]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/decl.c
typeck2.c (incomplete_type_error): Reorganise to avoid excessive diagnostics.
[thirdparty/gcc.git] / gcc / cp / decl.c
CommitLineData
e5e809f4 1/* Process declarations and variables for C compiler.
06ceef4e
RK
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3 Free Software Foundation, Inc.
e5e809f4 4 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba
MS
5
6This file is part of GNU CC.
7
8GNU CC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
13GNU CC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GNU CC; see the file COPYING. If not, write to
e9fa0c7c
RK
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA. */
8d08fdba
MS
22
23
24/* Process declarations and symbol lookup for C front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28/* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
8d08fdba 31#include "config.h"
8d052bc7 32#include "system.h"
8d08fdba
MS
33#include "tree.h"
34#include "rtl.h"
3bdf5ad1 35#include "expr.h"
8d08fdba
MS
36#include "flags.h"
37#include "cp-tree.h"
38#include "decl.h"
39#include "lex.h"
72b7eeff 40#include "defaults.h"
49c249e1
JM
41#include "output.h"
42#include "except.h"
54f92bfb 43#include "toplev.h"
7ddedda4 44#include "../hash.h"
4519c0a8 45#include "ggc.h"
0e9295cf 46#include "tm_p.h"
8d08fdba 47
8d08fdba
MS
48extern int current_class_depth;
49
30394414
JM
50extern tree global_namespace;
51
158991b7 52extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree));
62c154ed 53
255512c1 54#ifndef BOOL_TYPE_SIZE
e1cd6e56 55#ifdef SLOW_BYTE_ACCESS
2ef16140
MM
56/* In the new ABI, `bool' has size and alignment `1', on all
57 platforms. */
58#define BOOL_TYPE_SIZE \
59 ((SLOW_BYTE_ACCESS && !flag_new_abi) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
e1cd6e56 60#else
d2e5ee5c 61#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
e1cd6e56 62#endif
255512c1
JM
63#endif
64
8d08fdba
MS
65/* We let tm.h override the types used here, to handle trivial differences
66 such as the choice of unsigned int or long unsigned int for size_t.
67 When machines start needing nontrivial differences in the size type,
68 it would be best to do something here to figure out automatically
69 from other information what type to use. */
70
71#ifndef SIZE_TYPE
72#define SIZE_TYPE "long unsigned int"
73#endif
74
75#ifndef PTRDIFF_TYPE
76#define PTRDIFF_TYPE "long int"
77#endif
78
79#ifndef WCHAR_TYPE
80#define WCHAR_TYPE "int"
81#endif
82
652469d0
JM
83#ifndef WINT_TYPE
84#define WINT_TYPE "unsigned int"
85#endif
86
b15ad712
JM
87#ifndef INTMAX_TYPE
88#define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
89 ? "int" \
90 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
91 ? "long int" \
92 : "long long int"))
93#endif
94
95#ifndef UINTMAX_TYPE
96#define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
97 ? "unsigned int" \
98 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
99 ? "long unsigned int" \
100 : "long long unsigned int"))
101#endif
102
158991b7
KG
103static tree grokparms PARAMS ((tree, int));
104static const char *redeclaration_error_message PARAMS ((tree, tree));
8d08fdba 105
158991b7 106static void push_binding_level PARAMS ((struct binding_level *, int,
49c249e1 107 int));
158991b7
KG
108static void pop_binding_level PARAMS ((void));
109static void suspend_binding_level PARAMS ((void));
110static void resume_binding_level PARAMS ((struct binding_level *));
111static struct binding_level *make_binding_level PARAMS ((void));
112static void declare_namespace_level PARAMS ((void));
6625cdb5 113static int decl_jump_unsafe PARAMS ((tree));
158991b7
KG
114static void storedecls PARAMS ((tree));
115static void require_complete_types_for_parms PARAMS ((tree));
596ea4e5
AS
116static int ambi_op_p PARAMS ((enum tree_code));
117static int unary_op_p PARAMS ((enum tree_code));
158991b7
KG
118static tree store_bindings PARAMS ((tree, tree));
119static tree lookup_tag_reverse PARAMS ((tree, tree));
120static tree obscure_complex_init PARAMS ((tree, tree));
158991b7
KG
121static tree lookup_name_real PARAMS ((tree, int, int, int));
122static void warn_extern_redeclared_static PARAMS ((tree, tree));
123static void grok_reference_init PARAMS ((tree, tree, tree));
124static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
2c73f9f5 125 enum overload_flags, tree,
7a8f9fa9 126 tree, int, int, int, int, int, int, tree));
158991b7
KG
127static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
128static tree lookup_tag PARAMS ((enum tree_code, tree,
49c249e1
JM
129 struct binding_level *, int));
130static void set_identifier_type_value_with_scope
158991b7
KG
131 PARAMS ((tree, tree, struct binding_level *));
132static void record_builtin_type PARAMS ((enum rid, const char *, tree));
133static void record_unknown_type PARAMS ((tree, const char *));
596ea4e5 134static tree build_library_fn_1 PARAMS ((tree, enum tree_code, tree));
158991b7
KG
135static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
136static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
49c249e1 137 int));
158991b7
KG
138static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
139static void check_for_uninitialized_const_var PARAMS ((tree));
140static unsigned long typename_hash PARAMS ((hash_table_key));
141static boolean typename_compare PARAMS ((hash_table_key, hash_table_key));
142static void push_binding PARAMS ((tree, tree, struct binding_level*));
143static int add_binding PARAMS ((tree, tree));
144static void pop_binding PARAMS ((tree, tree));
145static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
146static tree find_binding PARAMS ((tree, tree));
147static tree select_decl PARAMS ((tree, int));
148static int lookup_flags PARAMS ((int, int));
149static tree qualify_lookup PARAMS ((tree, int));
150static tree record_builtin_java_type PARAMS ((const char *, int));
151static const char *tag_name PARAMS ((enum tag_types code));
152static void find_class_binding_level PARAMS ((void));
153static struct binding_level *innermost_nonclass_level PARAMS ((void));
154static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
155static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
156static int walk_globals_r PARAMS ((tree, void *));
157static void add_decl_to_level PARAMS ((tree, struct binding_level *));
158static tree make_label_decl PARAMS ((tree, int));
6625cdb5
JM
159static void use_label PARAMS ((tree));
160static void check_previous_goto_1 PARAMS ((tree, struct binding_level *, tree,
161 const char *, int));
162static void check_previous_goto PARAMS ((struct named_label_use_list *));
163static void check_switch_goto PARAMS ((struct binding_level *));
164static void check_previous_gotos PARAMS ((tree));
165static void pop_label PARAMS ((tree, tree));
158991b7
KG
166static void pop_labels PARAMS ((tree));
167static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
168static void layout_var_decl PARAMS ((tree));
169static void maybe_commonize_var PARAMS ((tree));
170static tree check_initializer PARAMS ((tree, tree));
171static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
172static void push_cp_function_context PARAMS ((struct function *));
173static void pop_cp_function_context PARAMS ((struct function *));
174static void mark_binding_level PARAMS ((void *));
2f8edb39 175static void mark_named_label_lists PARAMS ((void *, void *));
158991b7
KG
176static void mark_cp_function_context PARAMS ((struct function *));
177static void mark_saved_scope PARAMS ((void *));
ae499cce 178static void mark_lang_function PARAMS ((struct cp_language_function *));
158991b7 179static void save_function_data PARAMS ((tree));
f444e36b 180static void check_function_type PARAMS ((tree, tree));
158991b7
KG
181static void destroy_local_var PARAMS ((tree));
182static void finish_constructor_body PARAMS ((void));
183static void finish_destructor_body PARAMS ((void));
184static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
185static tree get_atexit_node PARAMS ((void));
186static tree get_dso_handle_node PARAMS ((void));
187static tree start_cleanup_fn PARAMS ((void));
188static void end_cleanup_fn PARAMS ((void));
2ce07e2d 189static tree cp_make_fname_decl PARAMS ((tree, const char *, int));
d43829f9 190static void initialize_predefined_identifiers PARAMS ((void));
5362b086 191static tree check_special_function_return_type
3dbc07b6 192 PARAMS ((special_function_kind, tree, tree, tree));
596ea4e5
AS
193static tree push_cp_library_fn PARAMS ((enum tree_code, tree));
194static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree));
f444e36b 195static void store_parm_decls PARAMS ((tree));
8d08fdba 196
69ac77ce 197#if defined (DEBUG_CP_BINDING_LEVELS)
158991b7 198static void indent PARAMS ((void));
69ac77ce
JL
199#endif
200
8d08fdba
MS
201/* Erroneous argument lists can use this *IFF* they do not modify it. */
202tree error_mark_list;
203
7f4edbcb 204/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 205 listed here individually for documentation purposes.
8d08fdba 206
7f4edbcb
BS
207 C++ extensions
208 tree wchar_decl_node;
37c46b43 209
7f4edbcb
BS
210 tree vtable_entry_type;
211 tree delta_type_node;
212#if 0
213 Old rtti stuff.
214 tree __baselist_desc_type_node;
215 tree __i_desc_type_node, __m_desc_type_node;
216 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
946dc1c8 217#endif
7f4edbcb
BS
218 tree __t_desc_type_node;
219#if 0
220 tree __tp_desc_type_node;
221#endif
db1147b2 222 tree ti_desc_type_node;
1f4cb92b 223 tree bltn_desc_type_node, ptr_desc_type_node;
db1147b2
NS
224 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
225 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
387769ed 226 tree ptm_desc_type_node;
db1147b2 227 tree base_desc_type_node;
7f4edbcb
BS
228#if 0
229 Not needed yet? May be needed one day?
230 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
231 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
232 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
946dc1c8 233#endif
8d08fdba 234
7f4edbcb
BS
235 tree class_type_node, record_type_node, union_type_node, enum_type_node;
236 tree unknown_type_node;
8d08fdba 237
7f4edbcb 238 Array type `vtable_entry_type[]'
8d08fdba 239
7f4edbcb
BS
240 tree vtbl_type_node;
241 tree vtbl_ptr_type_node;
8d08fdba 242
2854d3c6 243 Namespaces,
8d08fdba 244
7f4edbcb 245 tree std_node;
2854d3c6 246 tree abi_node;
8d08fdba 247
7f4edbcb
BS
248 A FUNCTION_DECL which can call `abort'. Not necessarily the
249 one that the user will declare, but sufficient to be called
250 by routines that want to abort the program.
8d08fdba 251
7f4edbcb 252 tree abort_fndecl;
8d08fdba 253
7f4edbcb 254 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 255
7f4edbcb 256 tree global_delete_fndecl;
8d08fdba 257
7f4edbcb 258 Used by RTTI
669ec2b4
JM
259 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
260 tree tinfo_var_id;
261
7f4edbcb 262*/
8d08fdba 263
7f4edbcb 264tree cp_global_trees[CPTI_MAX];
8d08fdba 265
2c73f9f5 266/* Indicates that there is a type value in some namespace, although
7f4edbcb 267 that is not necessarily in scope at the moment. */
2c73f9f5
ML
268
269static tree global_type_node;
270
6bcedb4e
MM
271/* If non-zero, this is the number of times we have entered the `std'
272 namespace when we are treating that namespace as an alias for the
273 global namespace. */
274static int in_fake_std;
6633d636 275
3e3f722c
ML
276/* Expect only namespace names now. */
277static int only_namespace_names;
278
6625cdb5
JM
279/* Used only for jumps to as-yet undefined labels, since jumps to
280 defined labels can have their validity checked immediately. */
281
282struct named_label_use_list
e349ee73
MS
283{
284 struct binding_level *binding_level;
285 tree names_in_scope;
286 tree label_decl;
9c0758dd 287 const char *filename_o_goto;
e349ee73 288 int lineno_o_goto;
6625cdb5 289 struct named_label_use_list *next;
e349ee73
MS
290};
291
ed5511d9 292#define named_label_uses cp_function_chain->x_named_label_uses
8d08fdba
MS
293
294/* A list of objects which have constructors or destructors
295 which reside in the global scope. The decl is stored in
296 the TREE_VALUE slot and the initializer is stored
297 in the TREE_PURPOSE slot. */
298tree static_aggregates;
299
8d08fdba
MS
300/* -- end of C++ */
301
81b3411c 302/* A node for the integer constants 2, and 3. */
d11ad92e 303
81b3411c 304tree integer_two_node, integer_three_node;
8d08fdba 305
8d08fdba
MS
306/* Parsing a function declarator leaves here a chain of structure
307 and enum types declared in the parmlist. */
308
309static tree last_function_parm_tags;
310
8d08fdba 311/* Similar, for last_function_parm_tags. */
9cd64686 312tree last_function_parms;
8d08fdba
MS
313static tree current_function_parm_tags;
314
6625cdb5
JM
315/* A list of all LABEL_DECLs in the function that have names. Here so
316 we can clear out their names' definitions at the end of the
317 function, and so we can check the validity of jumps to these labels. */
318
319struct named_label_list
320{
321 struct binding_level *binding_level;
322 tree names_in_scope;
323 tree old_value;
324 tree label_decl;
325 tree bad_decls;
326 int eh_region;
327 struct named_label_list *next;
328};
8d08fdba 329
4519c0a8 330#define named_labels cp_function_chain->x_named_labels
8d08fdba 331
8d08fdba
MS
332/* Set to 0 at beginning of a function definition, and whenever
333 a label (case or named) is defined. Set to value of expression
334 returned from function when that value can be transformed into
335 a named return value. */
336
337tree current_function_return_value;
338
b8458e3e
JM
339/* Nonzero means use the ISO C94 dialect of C. */
340
341int flag_isoc94;
342
83309c26 343/* Nonzero means use the ISO C99 dialect of C. */
68642fb6 344
83309c26 345int flag_isoc99;
68642fb6 346
93e2382f
JM
347/* Nonzero means we are a hosted implementation for code shared with C. */
348
349int flag_hosted = 1;
350
351/* Nonzero means add default format_arg attributes for functions not
352 in ISO C. */
353
354int flag_noniso_default_format_attributes = 1;
355
8d08fdba
MS
356/* Nonzero means give `double' the same size as `float'. */
357
358extern int flag_short_double;
359
8d08fdba
MS
360/* Nonzero if we want to conserve space in the .o files. We do this
361 by putting uninitialized data and runtime initialized data into
ddd5a7c1 362 .common instead of .data at the expense of not flagging multiple
8d08fdba
MS
363 definitions. */
364extern int flag_conserve_space;
8d08fdba 365\f
51c184be 366/* C and C++ flags are in decl2.c. */
8d08fdba 367
51c184be 368/* Flag used when debugging spew.c */
8d08fdba
MS
369
370extern int spew_debug;
371
e92cc029
MS
372/* A expression of value 0 with the same precision as a sizetype
373 node, but signed. */
374tree signed_size_zero_node;
375
0c8feefe
MM
376/* The name of the anonymous namespace, throughout this translation
377 unit. */
378tree anonymous_namespace_name;
379
b2244c65
MM
380/* The number of function bodies which we are currently processing.
381 (Zero if we are at namespace scope, one inside the body of a
382 function, two inside the body of a function in a local class, etc.) */
383int function_depth;
8d08fdba
MS
384\f
385/* For each binding contour we allocate a binding_level structure
e92cc029
MS
386 which records the names defined in that contour.
387 Contours include:
388 0) the global one
389 1) one for each function definition,
390 where internal declarations of the parameters appear.
391 2) one for each compound statement,
392 to record its declarations.
393
394 The current meaning of a name can be found by searching the levels
395 from the current one out to the global one.
396
397 Off to the side, may be the class_binding_level. This exists only
398 to catch class-local declarations. It is otherwise nonexistent.
399
400 Also there may be binding levels that catch cleanups that must be
d8f8dca1
MM
401 run when exceptions occur. Thus, to see whether a name is bound in
402 the current scope, it is not enough to look in the
403 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
404 instead. */
8d08fdba
MS
405
406/* Note that the information in the `names' component of the global contour
407 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
408
409struct binding_level
410 {
411 /* A chain of _DECL nodes for all variables, constants, functions,
e92cc029 412 and typedef types. These are in the reverse of the order
f181d4ae
MM
413 supplied. There may be OVERLOADs on this list, too, but they
414 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
8d08fdba
MS
415 tree names;
416
e92cc029
MS
417 /* A list of structure, union and enum definitions, for looking up
418 tag names.
419 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
420 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
421 or ENUMERAL_TYPE node.
422
423 C++: the TREE_VALUE nodes can be simple types for
424 component_bindings. */
8d08fdba
MS
425 tree tags;
426
2c73f9f5
ML
427 /* A list of USING_DECL nodes. */
428 tree usings;
429
ea9635c7
ML
430 /* A list of used namespaces. PURPOSE is the namespace,
431 VALUE the common ancestor with this binding_level's namespace. */
432 tree using_directives;
433
f181d4ae
MM
434 /* If this binding level is the binding level for a class, then
435 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
436 is the name of an entity bound in the class; the TREE_VALUE is
437 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
438 when leaving class scope, we can restore the
d8f8dca1
MM
439 IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
440 the DECL bound by this name in the class. */
8d08fdba
MS
441 tree class_shadowed;
442
f181d4ae
MM
443 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
444 is used for all binding levels. */
8d08fdba
MS
445 tree type_shadowed;
446
acef433b
MM
447 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
448 label in this scope. The TREE_PURPOSE is the previous value of
449 the IDENTIFIER_LABEL VALUE. */
450 tree shadowed_labels;
451
8d08fdba
MS
452 /* For each level (except not the global one),
453 a chain of BLOCK nodes for all the levels
454 that were entered and exited one level down. */
455 tree blocks;
456
70adf8a9
JM
457 /* The _TYPE node for this level, if parm_flag == 2. */
458 tree this_class;
459
8d08fdba
MS
460 /* The binding level which this one is contained in (inherits from). */
461 struct binding_level *level_chain;
462
f30432d7 463 /* List of decls in `names' that have incomplete
8d08fdba 464 structure or union types. */
f30432d7 465 tree incomplete;
8d08fdba 466
8d6e462b 467 /* List of VAR_DECLS saved from a previous for statement.
cab1f180 468 These would be dead in ISO-conforming code, but might
f181d4ae
MM
469 be referenced in ARM-era code. These are stored in a
470 TREE_LIST; the TREE_VALUE is the actual declaration. */
8d6e462b
PB
471 tree dead_vars_from_for;
472
8d08fdba 473 /* 1 for the level that holds the parameters of a function.
74b846e0
MM
474 2 for the level that holds a class declaration. */
475 unsigned parm_flag : 2;
8d08fdba
MS
476
477 /* 1 means make a BLOCK for this level regardless of all else.
478 2 for temporary binding contours created by the compiler. */
74b846e0 479 unsigned keep : 2;
8d08fdba
MS
480
481 /* Nonzero if this level "doesn't exist" for tags. */
482 unsigned tag_transparent : 1;
483
484 /* Nonzero if this level can safely have additional
485 cleanup-needing variables added to it. */
486 unsigned more_cleanups_ok : 1;
487 unsigned have_cleanups : 1;
488
74b846e0 489 /* Nonzero if this scope is for storing the decls for template
5566b478
MS
490 parameters and generic decls; these decls will be discarded and
491 replaced with a TEMPLATE_DECL. */
74b846e0
MM
492 unsigned template_parms_p : 1;
493
5362b086 494 /* Nonzero if this scope corresponds to the `<>' in a
74b846e0
MM
495 `template <>' clause. Whenever this flag is set,
496 TEMPLATE_PARMS_P will be set as well. */
497 unsigned template_spec_p : 1;
8d08fdba 498
a9aedbc2
MS
499 /* This is set for a namespace binding level. */
500 unsigned namespace_p : 1;
501
2ee887f2 502 /* True if this level is that of a for-statement where we need to
cab1f180 503 worry about ambiguous (ARM or ISO) scope rules. */
8d6e462b
PB
504 unsigned is_for_scope : 1;
505
6625cdb5
JM
506 /* True if this level corresponds to an EH region, as for a try block.
507 Currently this information is only available while building the
508 tree structure. */
227cf171
JM
509 unsigned eh_region : 1;
510
74b846e0 511 /* Four bits left for this word. */
8d08fdba
MS
512
513#if defined(DEBUG_CP_BINDING_LEVELS)
514 /* Binding depth at which this level began. */
515 unsigned binding_depth;
516#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
517 };
518
519#define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
68642fb6 520
8f032717 521/* The binding level currently in effect. */
8d08fdba 522
a8f73d4b 523#define current_binding_level \
01d939e8 524 (cfun \
a8f73d4b
MM
525 ? cp_function_chain->bindings \
526 : scope_chain->bindings)
8d08fdba
MS
527
528/* The binding level of the current class, if any. */
529
9cd64686 530#define class_binding_level scope_chain->class_bindings
8d08fdba 531
8d08fdba
MS
532/* A chain of binding_level structures awaiting reuse. */
533
534static struct binding_level *free_binding_level;
535
536/* The outermost binding level, for names of file scope.
537 This is created when the compiler is started and exists
538 through the entire run. */
539
540static struct binding_level *global_binding_level;
541
8d08fdba
MS
542/* Nonzero means unconditionally make a BLOCK for the next level pushed. */
543
544static int keep_next_level_flag;
545
546#if defined(DEBUG_CP_BINDING_LEVELS)
547static int binding_depth = 0;
548static int is_class_level = 0;
549
550static void
551indent ()
552{
553 register unsigned i;
554
555 for (i = 0; i < binding_depth*2; i++)
556 putc (' ', stderr);
557}
558#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
559
158991b7 560static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
8d08fdba
MS
561
562static void
563push_binding_level (newlevel, tag_transparent, keep)
564 struct binding_level *newlevel;
565 int tag_transparent, keep;
566{
567 /* Add this level to the front of the chain (stack) of levels that
568 are active. */
961192e1 569 memset ((char*) newlevel, 0, sizeof (struct binding_level));
8f032717 570 newlevel->level_chain = current_binding_level;
8d08fdba
MS
571 current_binding_level = newlevel;
572 newlevel->tag_transparent = tag_transparent;
573 newlevel->more_cleanups_ok = 1;
227cf171 574
8d08fdba
MS
575 newlevel->keep = keep;
576#if defined(DEBUG_CP_BINDING_LEVELS)
577 newlevel->binding_depth = binding_depth;
578 indent ();
579 fprintf (stderr, "push %s level 0x%08x line %d\n",
580 (is_class_level) ? "class" : "block", newlevel, lineno);
581 is_class_level = 0;
582 binding_depth++;
583#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
584}
585
8f032717
MM
586/* Find the innermost enclosing class scope, and reset
587 CLASS_BINDING_LEVEL appropriately. */
588
589static void
590find_class_binding_level ()
591{
592 struct binding_level *level = current_binding_level;
593
594 while (level && level->parm_flag != 2)
595 level = level->level_chain;
596 if (level && level->parm_flag == 2)
597 class_binding_level = level;
598 else
599 class_binding_level = 0;
600}
601
8d08fdba
MS
602static void
603pop_binding_level ()
604{
8d08fdba
MS
605 if (global_binding_level)
606 {
2c73f9f5 607 /* Cannot pop a level, if there are none left to pop. */
8d08fdba
MS
608 if (current_binding_level == global_binding_level)
609 my_friendly_abort (123);
610 }
611 /* Pop the current level, and free the structure for reuse. */
612#if defined(DEBUG_CP_BINDING_LEVELS)
613 binding_depth--;
614 indent ();
615 fprintf (stderr, "pop %s level 0x%08x line %d\n",
616 (is_class_level) ? "class" : "block",
617 current_binding_level, lineno);
618 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
619 {
620 indent ();
621 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
622 }
8d08fdba
MS
623 is_class_level = 0;
624#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
625 {
626 register struct binding_level *level = current_binding_level;
627 current_binding_level = current_binding_level->level_chain;
628 level->level_chain = free_binding_level;
629#if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
630 if (level->binding_depth != binding_depth)
631 abort ();
632#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
633 free_binding_level = level;
634 find_class_binding_level ();
8d08fdba
MS
635 }
636}
a9aedbc2
MS
637
638static void
639suspend_binding_level ()
640{
641 if (class_binding_level)
642 current_binding_level = class_binding_level;
643
644 if (global_binding_level)
645 {
2c73f9f5 646 /* Cannot suspend a level, if there are none left to suspend. */
a9aedbc2
MS
647 if (current_binding_level == global_binding_level)
648 my_friendly_abort (123);
649 }
650 /* Suspend the current level. */
651#if defined(DEBUG_CP_BINDING_LEVELS)
652 binding_depth--;
653 indent ();
654 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
655 (is_class_level) ? "class" : "block",
656 current_binding_level, lineno);
657 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
658 {
659 indent ();
660 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
661 }
a9aedbc2
MS
662 is_class_level = 0;
663#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
664 current_binding_level = current_binding_level->level_chain;
665 find_class_binding_level ();
a9aedbc2
MS
666}
667
824b9a4c 668static void
a9aedbc2
MS
669resume_binding_level (b)
670 struct binding_level *b;
671{
2c73f9f5
ML
672 /* Resuming binding levels is meant only for namespaces,
673 and those cannot nest into classes. */
674 my_friendly_assert(!class_binding_level, 386);
675 /* Also, resuming a non-directly nested namespace is a no-no. */
676 my_friendly_assert(b->level_chain == current_binding_level, 386);
a9aedbc2
MS
677 current_binding_level = b;
678#if defined(DEBUG_CP_BINDING_LEVELS)
679 b->binding_depth = binding_depth;
680 indent ();
681 fprintf (stderr, "resume %s level 0x%08x line %d\n",
682 (is_class_level) ? "class" : "block", b, lineno);
683 is_class_level = 0;
684 binding_depth++;
685#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
686}
8d08fdba 687\f
cffa8729
MS
688/* Create a new `struct binding_level'. */
689
690static
691struct binding_level *
692make_binding_level ()
693{
694 /* NOSTRICT */
695 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
696}
697
8d08fdba
MS
698/* Nonzero if we are currently in the global binding level. */
699
700int
701global_bindings_p ()
702{
703 return current_binding_level == global_binding_level;
704}
705
8f032717
MM
706/* Return the innermost binding level that is not for a class scope. */
707
708static struct binding_level *
709innermost_nonclass_level ()
710{
711 struct binding_level *b;
712
713 b = current_binding_level;
714 while (b->parm_flag == 2)
715 b = b->level_chain;
716
717 return b;
718}
719
a9aedbc2
MS
720/* Nonzero if we are currently in a toplevel binding level. This
721 means either the global binding level or a namespace in a toplevel
8f032717 722 binding level. Since there are no non-toplevel namespace levels,
74b846e0
MM
723 this really means any namespace or template parameter level. We
724 also include a class whose context is toplevel. */
a9aedbc2
MS
725
726int
727toplevel_bindings_p ()
728{
8f032717
MM
729 struct binding_level *b = innermost_nonclass_level ();
730
74b846e0 731 return b->namespace_p || b->template_parms_p;
a9aedbc2
MS
732}
733
8f032717
MM
734/* Nonzero if this is a namespace scope, or if we are defining a class
735 which is itself at namespace scope, or whose enclosing class is
736 such a class, etc. */
a9aedbc2 737
7bdbfa05 738int
a9aedbc2
MS
739namespace_bindings_p ()
740{
8f032717
MM
741 struct binding_level *b = innermost_nonclass_level ();
742
743 return b->namespace_p;
a9aedbc2
MS
744}
745
f1dedc31
MM
746/* If KEEP is non-zero, make a BLOCK node for the next binding level,
747 unconditionally. Otherwise, use the normal logic to decide whether
748 or not to create a BLOCK. */
749
8d08fdba 750void
f1dedc31
MM
751keep_next_level (keep)
752 int keep;
8d08fdba 753{
f1dedc31 754 keep_next_level_flag = keep;
8d08fdba
MS
755}
756
757/* Nonzero if the current level needs to have a BLOCK made. */
758
759int
760kept_level_p ()
761{
762 return (current_binding_level->blocks != NULL_TREE
763 || current_binding_level->keep
764 || current_binding_level->names != NULL_TREE
765 || (current_binding_level->tags != NULL_TREE
766 && !current_binding_level->tag_transparent));
767}
768
824b9a4c 769static void
a9aedbc2
MS
770declare_namespace_level ()
771{
772 current_binding_level->namespace_p = 1;
773}
774
74b846e0
MM
775/* Returns non-zero if this scope was created to store template
776 parameters. */
777
8d08fdba 778int
74b846e0 779template_parm_scope_p ()
8d08fdba 780{
74b846e0
MM
781 return current_binding_level->template_parms_p;
782}
783
784/* Returns the kind of template specialization we are currently
785 processing, given that it's declaration contained N_CLASS_SCOPES
786 explicit scope qualifications. */
787
788tmpl_spec_kind
789current_tmpl_spec_kind (n_class_scopes)
790 int n_class_scopes;
791{
792 int n_template_parm_scopes = 0;
793 int seen_specialization_p = 0;
794 int innermost_specialization_p = 0;
795 struct binding_level *b;
796
797 /* Scan through the template parameter scopes. */
798 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
799 {
800 /* If we see a specialization scope inside a parameter scope,
801 then something is wrong. That corresponds to a declaration
802 like:
803
804 template <class T> template <> ...
805
806 which is always illegal since [temp.expl.spec] forbids the
807 specialization of a class member template if the enclosing
808 class templates are not explicitly specialized as well. */
809 if (b->template_spec_p)
810 {
811 if (n_template_parm_scopes == 0)
812 innermost_specialization_p = 1;
813 else
814 seen_specialization_p = 1;
815 }
816 else if (seen_specialization_p == 1)
817 return tsk_invalid_member_spec;
818
819 ++n_template_parm_scopes;
820 }
821
822 /* Handle explicit instantiations. */
823 if (processing_explicit_instantiation)
824 {
825 if (n_template_parm_scopes != 0)
826 /* We've seen a template parameter list during an explicit
827 instantiation. For example:
828
829 template <class T> template void f(int);
830
831 This is erroneous. */
832 return tsk_invalid_expl_inst;
833 else
834 return tsk_expl_inst;
835 }
836
837 if (n_template_parm_scopes < n_class_scopes)
838 /* We've not seen enough template headers to match all the
839 specialized classes present. For example:
840
841 template <class T> void R<T>::S<T>::f(int);
842
843 This is illegal; there needs to be one set of template
844 parameters for each class. */
845 return tsk_insufficient_parms;
846 else if (n_template_parm_scopes == n_class_scopes)
847 /* We're processing a non-template declaration (even though it may
848 be a member of a template class.) For example:
849
850 template <class T> void S<T>::f(int);
851
852 The `class T' maches the `S<T>', leaving no template headers
853 corresponding to the `f'. */
854 return tsk_none;
855 else if (n_template_parm_scopes > n_class_scopes + 1)
856 /* We've got too many template headers. For example:
857
858 template <> template <class T> void f (T);
859
860 There need to be more enclosing classes. */
861 return tsk_excessive_parms;
862 else
863 /* This must be a template. It's of the form:
864
865 template <class T> template <class U> void S<T>::f(U);
866
867 This is a specialization if the innermost level was a
868 specialization; otherwise it's just a definition of the
869 template. */
870 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
871}
872
873void
874set_class_shadows (shadows)
875 tree shadows;
876{
877 class_binding_level->class_shadowed = shadows;
878}
879
880/* Enter a new binding level.
881 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
882 not for that of tags. */
883
884void
885pushlevel (tag_transparent)
886 int tag_transparent;
887{
b35d4555 888 struct binding_level *newlevel;
8d08fdba 889
01d939e8 890 if (cfun && !doing_semantic_analysis_p ())
b35d4555 891 return;
8d08fdba 892
b35d4555 893 /* Reuse or create a struct for this binding level. */
8d08fdba
MS
894#if defined(DEBUG_CP_BINDING_LEVELS)
895 if (0)
896#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
897 if (free_binding_level)
898#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
899 {
900 newlevel = free_binding_level;
901 free_binding_level = free_binding_level->level_chain;
902 }
903 else
acef433b 904 newlevel = make_binding_level ();
cffa8729 905
8d08fdba
MS
906 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
907 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
908 keep_next_level_flag = 0;
909}
910
74b846e0
MM
911/* Enter a new scope. The KIND indicates what kind of scope is being
912 created. */
913
914void
915begin_scope (sk)
916 scope_kind sk;
917{
918 pushlevel (0);
919
920 switch (sk)
921 {
922 case sk_template_spec:
923 current_binding_level->template_spec_p = 1;
924 /* Fall through. */
925
926 case sk_template_parms:
927 current_binding_level->template_parms_p = 1;
928 break;
929
930 default:
931 my_friendly_abort (20000309);
932 }
933}
934
935/* Exit the current scope. */
936
937void
938finish_scope ()
939{
940 poplevel (0, 0, 0);
941}
942
5566b478 943void
8d6e462b
PB
944note_level_for_for ()
945{
946 current_binding_level->is_for_scope = 1;
947}
948
6625cdb5
JM
949/* Record that the current binding level represents a try block. */
950
951void
952note_level_for_eh ()
953{
954 current_binding_level->eh_region = 1;
955}
956
f181d4ae
MM
957/* For a binding between a name and an entity at a block scope,
958 this is the `struct binding_level' for the block. */
959#define BINDING_LEVEL(NODE) \
c7a932b1 960 (((struct tree_binding*)NODE)->scope.level)
f181d4ae 961
f181d4ae
MM
962/* Make DECL the innermost binding for ID. The LEVEL is the binding
963 level at which this declaration is being bound. */
964
965static void
966push_binding (id, decl, level)
967 tree id;
968 tree decl;
969 struct binding_level* level;
970{
971 tree binding;
972
87e3dbc9 973 binding = make_node (CPLUS_BINDING);
f181d4ae
MM
974
975 /* Now, fill in the binding information. */
976 BINDING_VALUE (binding) = decl;
d8f8dca1 977 BINDING_TYPE (binding) = NULL_TREE;
f181d4ae 978 BINDING_LEVEL (binding) = level;
8f032717 979 INHERITED_VALUE_BINDING_P (binding) = 0;
f181d4ae 980 LOCAL_BINDING_P (binding) = (level != class_binding_level);
87e3dbc9 981 BINDING_HAS_LEVEL_P (binding) = 1;
f181d4ae 982
c45df9c1 983 /* And put it on the front of the list of bindings for ID. */
f181d4ae
MM
984 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
985 IDENTIFIER_BINDING (id) = binding;
986}
987
d8f8dca1
MM
988/* ID is already bound in the current scope. But, DECL is an
989 additional binding for ID in the same scope. This is the `struct
990 stat' hack whereby a non-typedef class-name or enum-name can be
991 bound at the same level as some other kind of entity. It's the
992 responsibility of the caller to check that inserting this name is
8f032717
MM
993 legal here. Returns nonzero if the new binding was successful. */
994static int
d8f8dca1
MM
995add_binding (id, decl)
996 tree id;
997 tree decl;
998{
999 tree binding = IDENTIFIER_BINDING (id);
8f032717 1000 int ok = 1;
d8f8dca1
MM
1001
1002 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1003 /* The new name is the type name. */
1004 BINDING_TYPE (binding) = decl;
8f032717
MM
1005 else if (!BINDING_VALUE (binding))
1006 /* This situation arises when push_class_level_binding moves an
1007 inherited type-binding out of the way to make room for a new
1008 value binding. */
1009 BINDING_VALUE (binding) = decl;
1010 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1011 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1012 {
1013 /* The old binding was a type name. It was placed in
1014 BINDING_VALUE because it was thought, at the point it was
1015 declared, to be the only entity with such a name. Move the
1016 type name into the type slot; it is now hidden by the new
1017 binding. */
d8f8dca1
MM
1018 BINDING_TYPE (binding) = BINDING_VALUE (binding);
1019 BINDING_VALUE (binding) = decl;
8f032717 1020 INHERITED_VALUE_BINDING_P (binding) = 0;
d8f8dca1 1021 }
263505af
MM
1022 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1023 && TREE_CODE (decl) == TYPE_DECL
1024 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1025 && same_type_p (TREE_TYPE (decl),
1026 TREE_TYPE (BINDING_VALUE (binding))))
1027 /* We have two typedef-names, both naming the same type to have
1028 the same name. This is OK because of:
1029
1030 [dcl.typedef]
1031
1032 In a given scope, a typedef specifier can be used to redefine
1033 the name of any type declared in that scope to refer to the
1034 type to which it already refers. */
1035 ok = 0;
7b176381
MM
1036 /* There can be two block-scope declarations of the same variable,
1037 so long as they are `extern' declarations. */
1038 else if (TREE_CODE (decl) == VAR_DECL
1039 && TREE_CODE (BINDING_VALUE (binding)) == VAR_DECL
1040 && DECL_EXTERNAL (decl)
1041 && DECL_EXTERNAL (BINDING_VALUE (binding)))
1042 {
1043 duplicate_decls (decl, BINDING_VALUE (binding));
1044 ok = 0;
1045 }
8f032717
MM
1046 else
1047 {
1048 cp_error ("declaration of `%#D'", decl);
1049 cp_error_at ("conflicts with previous declaration `%#D'",
1050 BINDING_VALUE (binding));
1051 ok = 0;
1052 }
1053
1054 return ok;
d8f8dca1
MM
1055}
1056
cfe507be
MM
1057/* Add DECL to the list of things declared in B. */
1058
1059static void
1060add_decl_to_level (decl, b)
1061 tree decl;
1062 struct binding_level *b;
1063{
cfe507be
MM
1064 /* We build up the list in reverse order, and reverse it later if
1065 necessary. */
1066 TREE_CHAIN (decl) = b->names;
1067 b->names = decl;
1068}
1069
1070/* Bind DECL to ID in the current_binding_level, assumed to be a local
1071 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1072 doesn't really belong to this binding level, that it got here
1073 through a using-declaration. */
f181d4ae
MM
1074
1075void
0034cf72 1076push_local_binding (id, decl, flags)
f181d4ae
MM
1077 tree id;
1078 tree decl;
0034cf72 1079 int flags;
f181d4ae 1080{
8f032717
MM
1081 struct binding_level *b;
1082
1083 /* Skip over any local classes. This makes sense if we call
1084 push_local_binding with a friend decl of a local class. */
1085 b = current_binding_level;
1086 while (b->parm_flag == 2)
1087 b = b->level_chain;
f181d4ae 1088
d8f8dca1 1089 if (lookup_name_current_level (id))
8f032717
MM
1090 {
1091 /* Supplement the existing binding. */
1092 if (!add_binding (id, decl))
1093 /* It didn't work. Something else must be bound at this
1094 level. Do not add DECL to the list of things to pop
1095 later. */
1096 return;
1097 }
d8f8dca1
MM
1098 else
1099 /* Create a new binding. */
8f032717 1100 push_binding (id, decl, b);
f181d4ae 1101
0034cf72 1102 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
a06d48ef
JM
1103 /* We must put the OVERLOAD into a TREE_LIST since the
1104 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1105 decls that got here through a using-declaration. */
1106 decl = build_tree_list (NULL_TREE, decl);
1107
f181d4ae
MM
1108 /* And put DECL on the list of things declared by the current
1109 binding level. */
cfe507be 1110 add_decl_to_level (decl, b);
f181d4ae
MM
1111}
1112
8f032717
MM
1113/* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1114 binding was successful. */
f181d4ae 1115
8f032717 1116int
f181d4ae
MM
1117push_class_binding (id, decl)
1118 tree id;
1119 tree decl;
1120{
8f032717
MM
1121 int result = 1;
1122 tree binding = IDENTIFIER_BINDING (id);
1123 tree context;
1124
1125 /* Note that we declared this value so that we can issue an error if
1126 this an illegal redeclaration of a name already used for some
1127 other purpose. */
1128 note_name_declared_in_class (id, decl);
1129
1130 if (binding && BINDING_LEVEL (binding) == class_binding_level)
d8f8dca1 1131 /* Supplement the existing binding. */
8f032717 1132 result = add_binding (id, decl);
d8f8dca1
MM
1133 else
1134 /* Create a new binding. */
1135 push_binding (id, decl, class_binding_level);
1136
1137 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1138 class-level declaration. Note that we do not use DECL here
1139 because of the possibility of the `struct stat' hack; if DECL is
1140 a class-name or enum-name we might prefer a field-name, or some
1141 such. */
1142 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
8f032717
MM
1143
1144 /* If this is a binding from a base class, mark it as such. */
1145 binding = IDENTIFIER_BINDING (id);
1146 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1147 {
280f9385
MM
1148 /* Any implicit typename must be from a base-class. The
1149 context for an implicit typename declaration is always
1150 the derived class in which the lookup was done, so the checks
1151 based on the context of DECL below will not trigger. */
83233dca 1152 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
280f9385 1153 INHERITED_VALUE_BINDING_P (binding) = 1;
8f032717
MM
1154 else
1155 {
280f9385 1156 if (TREE_CODE (decl) == OVERLOAD)
4f1c5b7d 1157 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
280f9385
MM
1158 else
1159 {
2f939d94 1160 my_friendly_assert (DECL_P (decl), 0);
4f1c5b7d 1161 context = CP_DECL_CONTEXT (decl);
280f9385 1162 }
8f032717 1163
280f9385
MM
1164 if (is_properly_derived_from (current_class_type, context))
1165 INHERITED_VALUE_BINDING_P (binding) = 1;
1166 else
1167 INHERITED_VALUE_BINDING_P (binding) = 0;
1168 }
8f032717
MM
1169 }
1170 else if (BINDING_VALUE (binding) == decl)
1171 /* We only encounter a TREE_LIST when push_class_decls detects an
1172 ambiguity. Such an ambiguity can be overridden by a definition
1173 in this class. */
1174 INHERITED_VALUE_BINDING_P (binding) = 1;
1175
1176 return result;
f181d4ae
MM
1177}
1178
d8f8dca1
MM
1179/* Remove the binding for DECL which should be the innermost binding
1180 for ID. */
f181d4ae 1181
68642fb6
UD
1182static void
1183pop_binding (id, decl)
f181d4ae 1184 tree id;
d8f8dca1 1185 tree decl;
f181d4ae
MM
1186{
1187 tree binding;
68642fb6 1188
f181d4ae
MM
1189 if (id == NULL_TREE)
1190 /* It's easiest to write the loops that call this function without
1191 checking whether or not the entities involved have names. We
1192 get here for such an entity. */
1193 return;
1194
d8f8dca1 1195 /* Get the innermost binding for ID. */
f181d4ae 1196 binding = IDENTIFIER_BINDING (id);
f181d4ae 1197
d8f8dca1
MM
1198 /* The name should be bound. */
1199 my_friendly_assert (binding != NULL_TREE, 0);
1200
1201 /* The DECL will be either the ordinary binding or the type
1202 binding for this identifier. Remove that binding. */
1203 if (BINDING_VALUE (binding) == decl)
1204 BINDING_VALUE (binding) = NULL_TREE;
1205 else if (BINDING_TYPE (binding) == decl)
1206 BINDING_TYPE (binding) = NULL_TREE;
1207 else
1208 my_friendly_abort (0);
1209
1210 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
87e3dbc9
MM
1211 /* We're completely done with the innermost binding for this
1212 identifier. Unhook it from the list of bindings. */
1213 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
f181d4ae
MM
1214}
1215
acef433b
MM
1216/* When a label goes out of scope, check to see if that label was used
1217 in a valid manner, and issue any appropriate warnings or errors. */
1218
1219static void
6625cdb5
JM
1220pop_label (label, old_value)
1221 tree label;
1222 tree old_value;
acef433b 1223{
88848bde 1224 if (!processing_template_decl && doing_semantic_analysis_p ())
acef433b 1225 {
88848bde
MM
1226 if (DECL_INITIAL (label) == NULL_TREE)
1227 {
1228 cp_error_at ("label `%D' used but not defined", label);
1229 /* Avoid crashing later. */
1230 define_label (input_filename, 1, DECL_NAME (label));
1231 }
078721e1 1232 else if (warn_unused_label && !TREE_USED (label))
88848bde 1233 cp_warning_at ("label `%D' defined but not used", label);
acef433b 1234 }
acef433b 1235
6625cdb5 1236 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
1237}
1238
0811ea8f 1239/* At the end of a function, all labels declared within the function
68642fb6 1240 go out of scope. BLOCK is the top-level block for the
acef433b
MM
1241 function. */
1242
1243static void
1244pop_labels (block)
1245 tree block;
1246{
6625cdb5 1247 struct named_label_list *link;
acef433b
MM
1248
1249 /* Clear out the definitions of all label names, since their scopes
1250 end here. */
6625cdb5 1251 for (link = named_labels; link; link = link->next)
acef433b 1252 {
6625cdb5 1253 pop_label (link->label_decl, link->old_value);
acef433b
MM
1254 /* Put the labels into the "variables" of the top-level block,
1255 so debugger can see them. */
6625cdb5
JM
1256 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
1257 BLOCK_VARS (block) = link->label_decl;
acef433b
MM
1258 }
1259
6625cdb5 1260 named_labels = NULL;
acef433b
MM
1261}
1262
8d08fdba
MS
1263/* Exit a binding level.
1264 Pop the level off, and restore the state of the identifier-decl mappings
1265 that were in effect when this level was entered.
1266
1267 If KEEP == 1, this level had explicit declarations, so
1268 and create a "block" (a BLOCK node) for the level
1269 to record its declarations and subblocks for symbol table output.
1270
8d08fdba
MS
1271 If FUNCTIONBODY is nonzero, this level is the body of a function,
1272 so create a block as if KEEP were set and also clear out all
1273 label names.
1274
1275 If REVERSE is nonzero, reverse the order of decls before putting
1276 them into the BLOCK. */
1277
1278tree
1279poplevel (keep, reverse, functionbody)
1280 int keep;
1281 int reverse;
1282 int functionbody;
1283{
1284 register tree link;
1285 /* The chain of decls was accumulated in reverse order.
1286 Put it into forward order, just for cleanliness. */
1287 tree decls;
1288 int tmp = functionbody;
b35d4555
MM
1289 int real_functionbody;
1290 tree tags;
1291 tree subblocks;
8d08fdba
MS
1292 tree block = NULL_TREE;
1293 tree decl;
f181d4ae
MM
1294 int leaving_for_scope;
1295
01d939e8 1296 if (cfun && !doing_semantic_analysis_p ())
b35d4555
MM
1297 return NULL_TREE;
1298
273a708f
MM
1299 my_friendly_assert (current_binding_level->parm_flag != 2,
1300 19990916);
b74a0560 1301
b35d4555
MM
1302 real_functionbody = (current_binding_level->keep == 2
1303 ? ((functionbody = 0), tmp) : functionbody);
1304 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1305 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1306
b74a0560
MM
1307 my_friendly_assert (!current_binding_level->class_shadowed,
1308 19990414);
8d08fdba 1309
536333d4
MM
1310 /* We used to use KEEP == 2 to indicate that the new block should go
1311 at the beginning of the list of blocks at this binding level,
1312 rather than the end. This hack is no longer used. */
1313 my_friendly_assert (keep == 0 || keep == 1, 0);
1314
8d08fdba
MS
1315 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1316 (HOST_WIDE_INT) current_binding_level->level_chain,
1317 current_binding_level->parm_flag,
5566b478 1318 current_binding_level->keep);
8d08fdba
MS
1319
1320 if (current_binding_level->keep == 1)
1321 keep = 1;
1322
6625cdb5
JM
1323 /* Any uses of undefined labels, and any defined labels, now operate
1324 under constraints of next binding contour. */
1325 if (cfun && !functionbody)
1326 {
1327 struct binding_level *level_chain;
1328 level_chain = current_binding_level->level_chain;
1329 if (level_chain)
1330 {
1331 struct named_label_use_list *uses;
1332 struct named_label_list *labels;
1333 for (labels = named_labels; labels; labels = labels->next)
1334 if (labels->binding_level == current_binding_level)
1335 {
1336 tree decl;
1337 if (current_binding_level->eh_region)
1338 labels->eh_region = 1;
1339 for (decl = labels->names_in_scope; decl;
1340 decl = TREE_CHAIN (decl))
1341 if (decl_jump_unsafe (decl))
1342 labels->bad_decls = tree_cons (NULL_TREE, decl,
1343 labels->bad_decls);
1344 labels->binding_level = level_chain;
1345 labels->names_in_scope = level_chain->names;
1346 }
1347
1348 for (uses = named_label_uses; uses; uses = uses->next)
1349 if (uses->binding_level == current_binding_level)
1350 {
1351 uses->binding_level = level_chain;
1352 uses->names_in_scope = level_chain->names;
1353 }
1354 }
1355 }
1356
8d08fdba
MS
1357 /* Get the decls in the order they were written.
1358 Usually current_binding_level->names is in reverse order.
1359 But parameter decls were previously put in forward order. */
1360
1361 if (reverse)
1362 current_binding_level->names
1363 = decls = nreverse (current_binding_level->names);
1364 else
1365 decls = current_binding_level->names;
1366
1367 /* Output any nested inline functions within this block
1368 if they weren't already output. */
8d08fdba
MS
1369 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1370 if (TREE_CODE (decl) == FUNCTION_DECL
1371 && ! TREE_ASM_WRITTEN (decl)
1372 && DECL_INITIAL (decl) != NULL_TREE
6060a796
MS
1373 && TREE_ADDRESSABLE (decl)
1374 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
1375 {
1376 /* If this decl was copied from a file-scope decl
1377 on account of a block-scope extern decl,
1378 propagate TREE_ADDRESSABLE to the file-scope decl. */
1379 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1380 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1381 else
1382 {
1383 push_function_context ();
1384 output_inline_function (decl);
1385 pop_function_context ();
1386 }
1387 }
1388
d9b2d9da
MM
1389 /* When not in function-at-a-time mode, expand_end_bindings will
1390 warn about unused variables. But, in function-at-a-time mode
1391 expand_end_bindings is not passed the list of variables in the
1392 current scope, and therefore no warning is emitted. So, we
1393 explicitly warn here. */
1394 if (!processing_template_decl)
1395 warn_about_unused_variables (getdecls ());
1396
8d08fdba
MS
1397 /* If there were any declarations or structure tags in that level,
1398 or if this level is a function body,
1399 create a BLOCK to record them for the life of this function. */
8d08fdba 1400 block = NULL_TREE;
f444e36b 1401 if (keep == 1 || functionbody)
8d08fdba
MS
1402 block = make_node (BLOCK);
1403 if (block != NULL_TREE)
1404 {
f444e36b
MM
1405 BLOCK_VARS (block) = decls;
1406 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
1407 }
1408
1409 /* In each subblock, record that this is its superior. */
8d08fdba
MS
1410 if (keep >= 0)
1411 for (link = subblocks; link; link = TREE_CHAIN (link))
1412 BLOCK_SUPERCONTEXT (link) = block;
1413
f181d4ae
MM
1414 /* We still support the old for-scope rules, whereby the variables
1415 in a for-init statement were in scope after the for-statement
1416 ended. We only use the new rules in flag_new_for_scope is
1417 nonzero. */
68642fb6 1418 leaving_for_scope
f181d4ae
MM
1419 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1420
1421 /* Remove declarations for all the DECLs in this level. */
1422 for (link = decls; link; link = TREE_CHAIN (link))
1423 {
c3783399
NS
1424 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
1425 && DECL_NAME (link))
f181d4ae 1426 {
68642fb6 1427 tree outer_binding
f181d4ae
MM
1428 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1429 tree ns_binding;
1430
1431 if (!outer_binding)
1432 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
c7dda1e3
MM
1433 else
1434 ns_binding = NULL_TREE;
1435
68642fb6
UD
1436 if (outer_binding
1437 && (BINDING_LEVEL (outer_binding)
f181d4ae
MM
1438 == current_binding_level->level_chain))
1439 /* We have something like:
68642fb6 1440
f181d4ae
MM
1441 int i;
1442 for (int i; ;);
68642fb6 1443
f181d4ae
MM
1444 and we are leaving the `for' scope. There's no reason to
1445 keep the binding of the inner `i' in this case. */
d8f8dca1 1446 pop_binding (DECL_NAME (link), link);
68642fb6
UD
1447 else if ((outer_binding
1448 && (TREE_CODE (BINDING_VALUE (outer_binding))
f181d4ae 1449 == TYPE_DECL))
68642fb6 1450 || (ns_binding
f181d4ae
MM
1451 && TREE_CODE (ns_binding) == TYPE_DECL))
1452 /* Here, we have something like:
1453
1454 typedef int I;
1455
1456 void f () {
1457 for (int I; ;);
1458 }
1459
1460 We must pop the for-scope binding so we know what's a
1461 type and what isn't. */
d8f8dca1 1462 pop_binding (DECL_NAME (link), link);
e76a2646 1463 else
e76a2646 1464 {
f181d4ae
MM
1465 /* Mark this VAR_DECL as dead so that we can tell we left it
1466 there only for backward compatibility. */
1467 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 1468
f181d4ae
MM
1469 /* Keep track of what should of have happenned when we
1470 popped the binding. */
1471 if (outer_binding && BINDING_VALUE (outer_binding))
68642fb6 1472 DECL_SHADOWED_FOR_VAR (link)
f181d4ae
MM
1473 = BINDING_VALUE (outer_binding);
1474
1475 /* Add it to the list of dead variables in the next
1476 outermost binding to that we can remove these when we
1477 leave that binding. */
1478 current_binding_level->level_chain->dead_vars_from_for
1479 = tree_cons (NULL_TREE, link,
1480 current_binding_level->level_chain->
1481 dead_vars_from_for);
1482
1483 /* Although we don't pop the CPLUS_BINDING, we do clear
1484 its BINDING_LEVEL since the level is going away now. */
1485 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1486 = 0;
e76a2646 1487 }
2ee887f2 1488 }
68642fb6 1489 else
8d6e462b 1490 {
f181d4ae 1491 /* Remove the binding. */
0034cf72
JM
1492 decl = link;
1493 if (TREE_CODE (decl) == TREE_LIST)
1494 decl = TREE_VALUE (decl);
2f939d94 1495 if (DECL_P (decl))
0034cf72
JM
1496 pop_binding (DECL_NAME (decl), decl);
1497 else if (TREE_CODE (decl) == OVERLOAD)
1498 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
68642fb6 1499 else
f181d4ae 1500 my_friendly_abort (0);
8d08fdba 1501 }
f181d4ae 1502 }
8d08fdba 1503
f181d4ae
MM
1504 /* Remove declarations for any `for' variables from inner scopes
1505 that we kept around. */
1506 for (link = current_binding_level->dead_vars_from_for;
1507 link; link = TREE_CHAIN (link))
d8f8dca1 1508 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 1509
f181d4ae
MM
1510 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1511 for (link = current_binding_level->type_shadowed;
1512 link; link = TREE_CHAIN (link))
1513 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
1514
1515 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1516 for (link = current_binding_level->shadowed_labels;
68642fb6 1517 link;
acef433b 1518 link = TREE_CHAIN (link))
6625cdb5 1519 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 1520
f181d4ae
MM
1521 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1522 list if a `using' declaration put them there. The debugging
1523 back-ends won't understand OVERLOAD, so we remove them here.
1524 Because the BLOCK_VARS are (temporarily) shared with
1525 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1526 popped all the bindings. */
1527 if (block)
1528 {
1529 tree* d;
8d6e462b 1530
a06d48ef
JM
1531 for (d = &BLOCK_VARS (block); *d; )
1532 {
1533 if (TREE_CODE (*d) == TREE_LIST)
1534 *d = TREE_CHAIN (*d);
1535 else
1536 d = &TREE_CHAIN (*d);
1537 }
8d6e462b 1538 }
8d08fdba
MS
1539
1540 /* If the level being exited is the top level of a function,
1541 check over all the labels. */
8d08fdba
MS
1542 if (functionbody)
1543 {
acef433b
MM
1544 /* Since this is the top level block of a function, the vars are
1545 the function's parameters. Don't leave them in the BLOCK
1546 because they are found in the FUNCTION_DECL instead. */
8d08fdba 1547 BLOCK_VARS (block) = 0;
acef433b 1548 pop_labels (block);
8d08fdba
MS
1549 }
1550
8d08fdba
MS
1551 tmp = current_binding_level->keep;
1552
1553 pop_binding_level ();
1554 if (functionbody)
1555 DECL_INITIAL (current_function_decl) = block;
1556 else if (block)
f444e36b
MM
1557 current_binding_level->blocks
1558 = chainon (current_binding_level->blocks, block);
1559
8d08fdba
MS
1560 /* If we did not make a block for the level just exited,
1561 any blocks made for inner levels
1562 (since they cannot be recorded as subblocks in that level)
1563 must be carried forward so they will later become subblocks
1564 of something else. */
1565 else if (subblocks)
536333d4
MM
1566 current_binding_level->blocks
1567 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 1568
d9b2d9da
MM
1569 /* Each and every BLOCK node created here in `poplevel' is important
1570 (e.g. for proper debugging information) so if we created one
1571 earlier, mark it as "used". */
1572 if (block)
1573 TREE_USED (block) = 1;
1574
8d08fdba 1575 /* Take care of compiler's internal binding structures. */
a4443a08 1576 if (tmp == 2)
8d08fdba 1577 {
d9b2d9da
MM
1578 tree scope_stmts;
1579
68642fb6 1580 scope_stmts
d9b2d9da 1581 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
8d08fdba 1582 if (block)
d9b2d9da
MM
1583 {
1584 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1585 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1586 }
1587
8f471b0d 1588 block = poplevel (keep, reverse, functionbody);
8d08fdba
MS
1589 }
1590
8d08fdba
MS
1591 return block;
1592}
1593
1594/* Delete the node BLOCK from the current binding level.
1595 This is used for the block inside a stmt expr ({...})
1596 so that the block can be reinserted where appropriate. */
1597
1598void
1599delete_block (block)
1600 tree block;
1601{
1602 tree t;
1603 if (current_binding_level->blocks == block)
1604 current_binding_level->blocks = TREE_CHAIN (block);
1605 for (t = current_binding_level->blocks; t;)
1606 {
1607 if (TREE_CHAIN (t) == block)
1608 TREE_CHAIN (t) = TREE_CHAIN (block);
1609 else
1610 t = TREE_CHAIN (t);
1611 }
1612 TREE_CHAIN (block) = NULL_TREE;
1613 /* Clear TREE_USED which is always set by poplevel.
1614 The flag is set again if insert_block is called. */
1615 TREE_USED (block) = 0;
1616}
1617
1618/* Insert BLOCK at the end of the list of subblocks of the
1619 current binding level. This is used when a BIND_EXPR is expanded,
1620 to handle the BLOCK node inside the BIND_EXPR. */
1621
1622void
1623insert_block (block)
1624 tree block;
1625{
1626 TREE_USED (block) = 1;
1627 current_binding_level->blocks
1628 = chainon (current_binding_level->blocks, block);
1629}
1630
8d08fdba
MS
1631/* Set the BLOCK node for the innermost scope
1632 (the one we are currently in). */
1633
1634void
1635set_block (block)
f444e36b 1636 tree block ATTRIBUTE_UNUSED;
8d08fdba 1637{
f444e36b
MM
1638 /* The RTL expansion machinery requires us to provide this callback,
1639 but it is not applicable in function-at-a-time mode. */
1640 my_friendly_assert (cfun && !doing_semantic_analysis_p (), 20000911);
8d08fdba
MS
1641}
1642
1643/* Do a pushlevel for class declarations. */
e92cc029 1644
8d08fdba
MS
1645void
1646pushlevel_class ()
1647{
1648 register struct binding_level *newlevel;
1649
1650 /* Reuse or create a struct for this binding level. */
1651#if defined(DEBUG_CP_BINDING_LEVELS)
1652 if (0)
1653#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1654 if (free_binding_level)
1655#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1656 {
1657 newlevel = free_binding_level;
1658 free_binding_level = free_binding_level->level_chain;
1659 }
1660 else
f181d4ae 1661 newlevel = make_binding_level ();
8d08fdba
MS
1662
1663#if defined(DEBUG_CP_BINDING_LEVELS)
1664 is_class_level = 1;
1665#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1666
1667 push_binding_level (newlevel, 0, 0);
1668
8d08fdba
MS
1669 class_binding_level = current_binding_level;
1670 class_binding_level->parm_flag = 2;
70adf8a9 1671 class_binding_level->this_class = current_class_type;
8d08fdba
MS
1672}
1673
b74a0560 1674/* ...and a poplevel for class declarations. */
e92cc029 1675
273a708f 1676void
b74a0560 1677poplevel_class ()
8d08fdba
MS
1678{
1679 register struct binding_level *level = class_binding_level;
8d08fdba
MS
1680 tree shadowed;
1681
1682 my_friendly_assert (level != 0, 354);
68642fb6 1683
8d08fdba 1684 /* If we're leaving a toplevel class, don't bother to do the setting
ddd5a7c1 1685 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
8d08fdba 1686 shouldn't even be used when current_class_type isn't set, and second,
ddd5a7c1 1687 if we don't touch it here, we're able to use the cache effect if the
8d08fdba 1688 next time we're entering a class scope, it is the same class. */
b74a0560 1689 if (current_class_depth != 1)
8f032717
MM
1690 {
1691 struct binding_level* b;
1692
1693 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1694 for (shadowed = level->class_shadowed;
1695 shadowed;
1696 shadowed = TREE_CHAIN (shadowed))
1697 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
68642fb6 1698
8f032717
MM
1699 /* Find the next enclosing class, and recreate
1700 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1701 b = level->level_chain;
1702 while (b && b->parm_flag != 2)
1703 b = b->level_chain;
1704
1705 if (b)
68642fb6
UD
1706 for (shadowed = b->class_shadowed;
1707 shadowed;
8f032717
MM
1708 shadowed = TREE_CHAIN (shadowed))
1709 {
1710 tree t;
1711
1712 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1713 while (t && BINDING_LEVEL (t) != b)
1714 t = TREE_CHAIN (t);
68642fb6 1715
8f032717 1716 if (t)
68642fb6 1717 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
8f032717
MM
1718 = BINDING_VALUE (t);
1719 }
1720 }
8d08fdba
MS
1721 else
1722 /* Remember to save what IDENTIFIER's were bound in this scope so we
1723 can recover from cache misses. */
e76a2646
MS
1724 {
1725 previous_class_type = current_class_type;
1726 previous_class_values = class_binding_level->class_shadowed;
1727 }
8d08fdba
MS
1728 for (shadowed = level->type_shadowed;
1729 shadowed;
1730 shadowed = TREE_CHAIN (shadowed))
2c73f9f5 1731 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
8d08fdba 1732
f181d4ae 1733 /* Remove the bindings for all of the class-level declarations. */
68642fb6
UD
1734 for (shadowed = level->class_shadowed;
1735 shadowed;
f181d4ae 1736 shadowed = TREE_CHAIN (shadowed))
d8f8dca1 1737 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
f181d4ae 1738
8d08fdba
MS
1739 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1740 (HOST_WIDE_INT) class_binding_level->level_chain,
1741 class_binding_level->parm_flag,
5566b478 1742 class_binding_level->keep);
8d08fdba 1743
38e01259 1744 /* Now, pop out of the binding level which we created up in the
8d08fdba
MS
1745 `pushlevel_class' routine. */
1746#if defined(DEBUG_CP_BINDING_LEVELS)
1747 is_class_level = 1;
1748#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1749
1750 pop_binding_level ();
8d08fdba 1751}
8f032717
MM
1752
1753/* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1754 for any names in enclosing classes. */
1755
1756void
1757clear_identifier_class_values ()
1758{
1759 tree t;
1760
1761 if (!class_binding_level)
1762 return;
1763
1764 for (t = class_binding_level->class_shadowed;
1765 t;
1766 t = TREE_CHAIN (t))
1767 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1768}
1769
0aafb128
MM
1770/* Returns non-zero if T is a virtual function table. */
1771
1772int
1773vtable_decl_p (t, data)
1774 tree t;
1775 void *data ATTRIBUTE_UNUSED;
1776{
1777 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1778}
1779
1780/* Returns non-zero if T is a TYPE_DECL for a type with virtual
1781 functions. */
1782
1783int
1784vtype_decl_p (t, data)
1785 tree t;
1786 void *data ATTRIBUTE_UNUSED;
1787{
1788 return (TREE_CODE (t) == TYPE_DECL
34249844
NS
1789 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1790 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
0aafb128
MM
1791}
1792
f71f87f9
MM
1793/* Return the declarations that are members of the namespace NS. */
1794
1795tree
1796cp_namespace_decls (ns)
1797 tree ns;
1798{
1799 return NAMESPACE_LEVEL (ns)->names;
1800}
1801
0aafb128
MM
1802/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1803 itself, calling F for each. The DATA is passed to F as well. */
1804
1805static int
1806walk_namespaces_r (namespace, f, data)
1807 tree namespace;
1808 walk_namespaces_fn f;
1809 void *data;
1810{
1811 tree current;
1812 int result = 0;
1813
1814 result |= (*f) (namespace, data);
1815
f71f87f9 1816 for (current = cp_namespace_decls (namespace);
0aafb128
MM
1817 current;
1818 current = TREE_CHAIN (current))
1819 {
1820 if (TREE_CODE (current) != NAMESPACE_DECL
1821 || DECL_NAMESPACE_ALIAS (current))
1822 continue;
1823 if (!DECL_LANG_SPECIFIC (current))
1824 {
1825 /* Hmm. std. */
6bcedb4e 1826 my_friendly_assert (current == fake_std_node, 393);
0aafb128
MM
1827 continue;
1828 }
1829
1830 /* We found a namespace. */
1831 result |= walk_namespaces_r (current, f, data);
1832 }
1833
1834 return result;
1835}
1836
1837/* Walk all the namespaces, calling F for each. The DATA is passed to
1838 F as well. */
1839
1840int
1841walk_namespaces (f, data)
1842 walk_namespaces_fn f;
1843 void *data;
1844{
1845 return walk_namespaces_r (global_namespace, f, data);
1846}
1847
1848struct walk_globals_data {
1849 walk_globals_pred p;
1850 walk_globals_fn f;
1851 void *data;
1852};
1853
1854/* Walk the global declarations in NAMESPACE. Whenever one is found
1855 for which P returns non-zero, call F with its address. If any call
1856 to F returns a non-zero value, return a non-zero value. */
1857
68642fb6 1858static int
0aafb128
MM
1859walk_globals_r (namespace, data)
1860 tree namespace;
1861 void *data;
1862{
1863 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1864 walk_globals_pred p = wgd->p;
1865 walk_globals_fn f = wgd->f;
1866 void *d = wgd->data;
1867 tree *t;
1868 int result = 0;
1869
1870 t = &NAMESPACE_LEVEL (namespace)->names;
1871
1872 while (*t)
1873 {
1874 tree glbl = *t;
1875
1876 if ((*p) (glbl, d))
1877 result |= (*f) (t, d);
1878
1879 /* If F changed *T, then *T still points at the next item to
1880 examine. */
1881 if (*t == glbl)
1882 t = &TREE_CHAIN (*t);
1883 }
1884
1885 return result;
1886}
1887
1888/* Walk the global declarations. Whenever one is found for which P
1889 returns non-zero, call F with its address. If any call to F
1890 returns a non-zero value, return a non-zero value. */
1891
1892int
1893walk_globals (p, f, data)
1894 walk_globals_pred p;
1895 walk_globals_fn f;
1896 void *data;
1897{
1898 struct walk_globals_data wgd;
1899 wgd.p = p;
1900 wgd.f = f;
1901 wgd.data = data;
1902
1903 return walk_namespaces (walk_globals_r, &wgd);
1904}
1905
1906/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1907 DATA is non-NULL, this is the last time we will call
1908 wrapup_global_declarations for this NAMESPACE. */
1909
1910int
1911wrapup_globals_for_namespace (namespace, data)
1912 tree namespace;
1913 void *data;
1914{
f71f87f9 1915 tree globals = cp_namespace_decls (namespace);
0aafb128
MM
1916 int len = list_length (globals);
1917 tree *vec = (tree *) alloca (sizeof (tree) * len);
1918 int i;
0352cfc8 1919 int result;
0aafb128
MM
1920 tree decl;
1921 int last_time = (data != 0);
1922
1923 if (last_time && namespace == global_namespace)
1924 /* Let compile_file handle the global namespace. */
1925 return 0;
1926
1927 /* Process the decls in reverse order--earliest first.
1928 Put them into VEC from back to front, then take out from front. */
0aafb128 1929 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
62136084 1930 vec[len - i - 1] = decl;
68642fb6 1931
0352cfc8
MM
1932 if (last_time)
1933 {
1934 check_global_declarations (vec, len);
1935 return 0;
1936 }
1937
1938 /* Temporarily mark vtables as external. That prevents
1939 wrapup_global_declarations from writing them out; we must process
1940 them ourselves in finish_vtable_vardecl. */
1941 for (i = 0; i < len; ++i)
91f2aa22 1942 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
0352cfc8
MM
1943 {
1944 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1945 DECL_EXTERNAL (vec[i]) = 1;
1946 }
0aafb128 1947
0352cfc8
MM
1948 /* Write out any globals that need to be output. */
1949 result = wrapup_global_declarations (vec, len);
1950
1951 /* Undo the hack to DECL_EXTERNAL above. */
1952 for (i = 0; i < len; ++i)
1953 if (vtable_decl_p (vec[i], /*data=*/0)
1954 && DECL_NOT_REALLY_EXTERN (vec[i]))
1955 {
1956 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1957 DECL_EXTERNAL (vec[i]) = 0;
1958 }
1959
1960 return result;
0aafb128
MM
1961}
1962
4519c0a8 1963\f
fc6af6e3
RH
1964/* Mark ARG (which is really a struct binding_level **) for GC. */
1965
4519c0a8
MM
1966static void
1967mark_binding_level (arg)
1968 void *arg;
1969{
1970 struct binding_level *lvl = *(struct binding_level **)arg;
1971
6625cdb5 1972 for (; lvl; lvl = lvl->level_chain)
4519c0a8
MM
1973 {
1974 ggc_mark_tree (lvl->names);
1975 ggc_mark_tree (lvl->tags);
1976 ggc_mark_tree (lvl->usings);
1977 ggc_mark_tree (lvl->using_directives);
1978 ggc_mark_tree (lvl->class_shadowed);
1979 ggc_mark_tree (lvl->type_shadowed);
1980 ggc_mark_tree (lvl->shadowed_labels);
1981 ggc_mark_tree (lvl->blocks);
70adf8a9 1982 ggc_mark_tree (lvl->this_class);
4519c0a8
MM
1983 ggc_mark_tree (lvl->incomplete);
1984 ggc_mark_tree (lvl->dead_vars_from_for);
6625cdb5
JM
1985 }
1986}
1987
1988static void
1989mark_named_label_lists (labs, uses)
1990 void *labs;
1991 void *uses;
1992{
1993 struct named_label_list *l = *(struct named_label_list **)labs;
1994 struct named_label_use_list *u = *(struct named_label_use_list **)uses;
4519c0a8 1995
6625cdb5
JM
1996 for (; l; l = l->next)
1997 {
1998 ggc_mark (l);
1999 mark_binding_level (l->binding_level);
2000 ggc_mark_tree (l->old_value);
2001 ggc_mark_tree (l->label_decl);
2002 ggc_mark_tree (l->bad_decls);
4519c0a8 2003 }
6625cdb5
JM
2004
2005 for (; u; u = u->next)
2006 ggc_mark (u);
4519c0a8 2007}
8d08fdba
MS
2008\f
2009/* For debugging. */
5566b478
MS
2010static int no_print_functions = 0;
2011static int no_print_builtins = 0;
8d08fdba
MS
2012
2013void
2014print_binding_level (lvl)
2015 struct binding_level *lvl;
2016{
2017 tree t;
2018 int i = 0, len;
2019 fprintf (stderr, " blocks=");
2020 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
2021 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
f30432d7 2022 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
8d08fdba
MS
2023 if (lvl->tag_transparent)
2024 fprintf (stderr, " tag-transparent");
2025 if (lvl->more_cleanups_ok)
2026 fprintf (stderr, " more-cleanups-ok");
2027 if (lvl->have_cleanups)
2028 fprintf (stderr, " have-cleanups");
8d08fdba
MS
2029 fprintf (stderr, "\n");
2030 if (lvl->names)
2031 {
2032 fprintf (stderr, " names:\t");
2033 /* We can probably fit 3 names to a line? */
2034 for (t = lvl->names; t; t = TREE_CHAIN (t))
2035 {
68642fb6 2036 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
8d08fdba
MS
2037 continue;
2038 if (no_print_builtins
fc378698
MS
2039 && (TREE_CODE (t) == TYPE_DECL)
2040 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
8d08fdba
MS
2041 continue;
2042
2043 /* Function decls tend to have longer names. */
2044 if (TREE_CODE (t) == FUNCTION_DECL)
2045 len = 3;
2046 else
2047 len = 2;
2048 i += len;
2049 if (i > 6)
2050 {
2051 fprintf (stderr, "\n\t");
2052 i = len;
2053 }
2054 print_node_brief (stderr, "", t, 0);
bd6dd845 2055 if (t == error_mark_node)
8d08fdba
MS
2056 break;
2057 }
2058 if (i)
2059 fprintf (stderr, "\n");
2060 }
2061 if (lvl->tags)
2062 {
2063 fprintf (stderr, " tags:\t");
2064 i = 0;
2065 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2066 {
2067 if (TREE_PURPOSE (t) == NULL_TREE)
2068 len = 3;
2069 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2070 len = 2;
2071 else
2072 len = 4;
2073 i += len;
2074 if (i > 5)
2075 {
2076 fprintf (stderr, "\n\t");
2077 i = len;
2078 }
2079 if (TREE_PURPOSE (t) == NULL_TREE)
2080 {
2081 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2082 fprintf (stderr, ">");
2083 }
2084 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2085 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2086 else
2087 {
2088 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2089 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2090 fprintf (stderr, ">");
2091 }
2092 }
2093 if (i)
2094 fprintf (stderr, "\n");
2095 }
8d08fdba
MS
2096 if (lvl->class_shadowed)
2097 {
2098 fprintf (stderr, " class-shadowed:");
2099 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2100 {
2101 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2102 }
2103 fprintf (stderr, "\n");
2104 }
2105 if (lvl->type_shadowed)
2106 {
2107 fprintf (stderr, " type-shadowed:");
2108 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2109 {
8d08fdba 2110 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
8d08fdba
MS
2111 }
2112 fprintf (stderr, "\n");
2113 }
2114}
2115
2116void
2117print_other_binding_stack (stack)
2118 struct binding_level *stack;
2119{
2120 struct binding_level *level;
2121 for (level = stack; level != global_binding_level; level = level->level_chain)
2122 {
2123 fprintf (stderr, "binding level ");
2124 fprintf (stderr, HOST_PTR_PRINTF, level);
2125 fprintf (stderr, "\n");
2126 print_binding_level (level);
2127 }
2128}
2129
2130void
2131print_binding_stack ()
2132{
2133 struct binding_level *b;
2134 fprintf (stderr, "current_binding_level=");
2135 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2136 fprintf (stderr, "\nclass_binding_level=");
2137 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2138 fprintf (stderr, "\nglobal_binding_level=");
2139 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2140 fprintf (stderr, "\n");
2141 if (class_binding_level)
2142 {
2143 for (b = class_binding_level; b; b = b->level_chain)
2144 if (b == current_binding_level)
2145 break;
2146 if (b)
2147 b = class_binding_level;
2148 else
2149 b = current_binding_level;
2150 }
2151 else
2152 b = current_binding_level;
2153 print_other_binding_stack (b);
2154 fprintf (stderr, "global:\n");
2155 print_binding_level (global_binding_level);
2156}
a9aedbc2 2157
2c73f9f5
ML
2158/* Namespace binding access routines: The namespace_bindings field of
2159 the identifier is polymorphic, with three possible values:
2160 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2161 indicating the BINDING_VALUE of global_namespace. */
30394414 2162
2c73f9f5
ML
2163/* Check whether the a binding for the name to scope is known.
2164 Assumes that the bindings of the name are already a list
2165 of bindings. Returns the binding found, or NULL_TREE. */
2166
2167static tree
2168find_binding (name, scope)
30394414
JM
2169 tree name;
2170 tree scope;
2171{
2c73f9f5 2172 tree iter, prev = NULL_TREE;
3e3f722c
ML
2173
2174 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2175
30394414
JM
2176 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2177 iter = TREE_CHAIN (iter))
2178 {
2179 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2180 if (BINDING_SCOPE (iter) == scope)
2c73f9f5 2181 {
cfe507be 2182 /* Move binding found to the front of the list, so
2c73f9f5
ML
2183 subsequent lookups will find it faster. */
2184 if (prev)
2185 {
2186 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2187 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2188 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2189 }
2190 return iter;
2191 }
2192 prev = iter;
30394414 2193 }
2c73f9f5
ML
2194 return NULL_TREE;
2195}
2196
2197/* Always returns a binding for name in scope. If the
2198 namespace_bindings is not a list, convert it to one first.
2199 If no binding is found, make a new one. */
2200
2201tree
2202binding_for_name (name, scope)
2203 tree name;
2204 tree scope;
2205{
2206 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2207 tree result;
3e3f722c
ML
2208
2209 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2210
2c73f9f5
ML
2211 if (b && TREE_CODE (b) != CPLUS_BINDING)
2212 {
2213 /* Get rid of optimization for global scope. */
2214 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2215 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2216 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2217 }
2218 if (b && (result = find_binding (name, scope)))
2219 return result;
cd9f6678 2220 /* Not found, make a new one. */
2c73f9f5
ML
2221 result = make_node (CPLUS_BINDING);
2222 TREE_CHAIN (result) = b;
2223 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2224 BINDING_SCOPE (result) = scope;
2225 BINDING_TYPE (result) = NULL_TREE;
2226 BINDING_VALUE (result) = NULL_TREE;
2c73f9f5
ML
2227 return result;
2228}
2229
2230/* Return the binding value for name in scope, considering that
2231 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2232
2233tree
2234namespace_binding (name, scope)
2235 tree name;
2236 tree scope;
2237{
2238 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2239 if (b == NULL_TREE)
2240 return NULL_TREE;
cb0dbb9a
JM
2241 if (scope == NULL_TREE)
2242 scope = global_namespace;
2c73f9f5
ML
2243 if (TREE_CODE (b) != CPLUS_BINDING)
2244 return (scope == global_namespace) ? b : NULL_TREE;
2245 name = find_binding (name,scope);
2246 if (name == NULL_TREE)
2247 return name;
2248 return BINDING_VALUE (name);
2249}
2250
2251/* Set the binding value for name in scope. If modifying the binding
2252 of global_namespace is attempted, try to optimize it. */
2253
2254void
2255set_namespace_binding (name, scope, val)
2256 tree name;
2257 tree scope;
2258 tree val;
2259{
2260 tree b;
cb0dbb9a
JM
2261
2262 if (scope == NULL_TREE)
2263 scope = global_namespace;
68642fb6 2264
2c73f9f5
ML
2265 if (scope == global_namespace)
2266 {
2267 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2268 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2269 {
2270 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2271 return;
2272 }
2273 }
2274 b = binding_for_name (name, scope);
2275 BINDING_VALUE (b) = val;
30394414
JM
2276}
2277
dff6b454
RK
2278/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2279 select a name that is unique to this compilation unit. */
e92cc029 2280
a9aedbc2
MS
2281void
2282push_namespace (name)
2283 tree name;
2284{
b370501f 2285 tree d = NULL_TREE;
30394414
JM
2286 int need_new = 1;
2287 int implicit_use = 0;
2c73f9f5 2288 int global = 0;
30394414
JM
2289 if (!global_namespace)
2290 {
2c73f9f5 2291 /* This must be ::. */
30394414 2292 my_friendly_assert (name == get_identifier ("::"), 377);
2c73f9f5 2293 global = 1;
30394414
JM
2294 }
2295 else if (!name)
2296 {
3ab52652
ML
2297 /* The name of anonymous namespace is unique for the translation
2298 unit. */
0c8feefe
MM
2299 if (!anonymous_namespace_name)
2300 anonymous_namespace_name = get_file_function_name ('N');
2301 name = anonymous_namespace_name;
3ab52652
ML
2302 d = IDENTIFIER_NAMESPACE_VALUE (name);
2303 if (d)
2304 /* Reopening anonymous namespace. */
2305 need_new = 0;
30394414 2306 implicit_use = 1;
2c73f9f5
ML
2307 }
2308 else if (current_namespace == global_namespace
6bcedb4e
MM
2309 && !flag_honor_std
2310 && name == std_identifier)
2c73f9f5 2311 {
6bcedb4e 2312 in_fake_std++;
2c73f9f5
ML
2313 return;
2314 }
30394414
JM
2315 else
2316 {
2c73f9f5 2317 /* Check whether this is an extended namespace definition. */
30394414
JM
2318 d = IDENTIFIER_NAMESPACE_VALUE (name);
2319 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
3e3f722c
ML
2320 {
2321 need_new = 0;
2322 if (DECL_NAMESPACE_ALIAS (d))
2323 {
8251199e 2324 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
3e3f722c
ML
2325 d, DECL_NAMESPACE_ALIAS (d));
2326 d = DECL_NAMESPACE_ALIAS (d);
2327 }
2328 }
30394414 2329 }
68642fb6 2330
30394414
JM
2331 if (need_new)
2332 {
2c73f9f5 2333 /* Make a new namespace, binding the name to it. */
6b57ac29 2334 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2c73f9f5
ML
2335 /* The global namespace is not pushed, and the global binding
2336 level is set elsewhere. */
2337 if (!global)
2338 {
40f1e342 2339 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
2c73f9f5
ML
2340 d = pushdecl (d);
2341 pushlevel (0);
2342 declare_namespace_level ();
2343 NAMESPACE_LEVEL (d) = current_binding_level;
2344 }
30394414 2345 }
2c73f9f5
ML
2346 else
2347 resume_binding_level (NAMESPACE_LEVEL (d));
2348
30394414
JM
2349 if (implicit_use)
2350 do_using_directive (d);
2c73f9f5 2351 /* Enter the name space. */
30394414 2352 current_namespace = d;
a9aedbc2
MS
2353}
2354
2355/* Pop from the scope of the current namespace. */
e92cc029 2356
a9aedbc2
MS
2357void
2358pop_namespace ()
2359{
2c73f9f5
ML
2360 if (current_namespace == global_namespace)
2361 {
6bcedb4e
MM
2362 my_friendly_assert (in_fake_std > 0, 980421);
2363 in_fake_std--;
2c73f9f5
ML
2364 return;
2365 }
cb0dbb9a 2366 current_namespace = CP_DECL_CONTEXT (current_namespace);
2c73f9f5
ML
2367 /* The binding level is not popped, as it might be re-opened later. */
2368 suspend_binding_level ();
2369}
a9aedbc2 2370
61fc8c9e
MM
2371/* Push into the scope of the namespace NS, even if it is deeply
2372 nested within another namespace. */
2373
2374void
2375push_nested_namespace (ns)
2376 tree ns;
2377{
2378 if (ns == global_namespace)
2379 push_to_top_level ();
2380 else
2381 {
2382 push_nested_namespace (CP_DECL_CONTEXT (ns));
2383 push_namespace (DECL_NAME (ns));
2384 }
2385}
2386
2387/* Pop back from the scope of the namespace NS, which was previously
2388 entered with push_nested_namespace. */
68642fb6 2389
61fc8c9e
MM
2390void
2391pop_nested_namespace (ns)
2392 tree ns;
2393{
2394 while (ns != global_namespace)
2395 {
2396 pop_namespace ();
2397 ns = CP_DECL_CONTEXT (ns);
2398 }
2399
2400 pop_from_top_level ();
2401}
2402
8d08fdba
MS
2403\f
2404/* Subroutines for reverting temporarily to top-level for instantiation
2405 of templates and such. We actually need to clear out the class- and
2406 local-value slots of all identifiers, so that only the global values
2407 are at all visible. Simply setting current_binding_level to the global
2408 scope isn't enough, because more binding levels may be pushed. */
9cd64686 2409struct saved_scope *scope_chain;
8d08fdba 2410
9cd64686 2411/* Mark ARG (which is really a struct saved_scope **) for GC. */
fc6af6e3
RH
2412
2413static void
2414mark_saved_scope (arg)
2415 void *arg;
2416{
2417 struct saved_scope *t = *(struct saved_scope **)arg;
2418 while (t)
2419 {
fc6af6e3
RH
2420 mark_binding_level (&t->class_bindings);
2421 ggc_mark_tree (t->old_bindings);
2422 ggc_mark_tree (t->old_namespace);
2423 ggc_mark_tree (t->class_name);
2424 ggc_mark_tree (t->class_type);
2425 ggc_mark_tree (t->access_specifier);
a8f73d4b 2426 ggc_mark_tree (t->function_decl);
fc6af6e3 2427 if (t->lang_base)
9cd64686 2428 ggc_mark_tree_varray (t->lang_base);
fc6af6e3 2429 ggc_mark_tree (t->lang_name);
fc6af6e3 2430 ggc_mark_tree (t->template_parms);
9cd64686
MM
2431 ggc_mark_tree (t->x_previous_class_type);
2432 ggc_mark_tree (t->x_previous_class_values);
6f80451c 2433 ggc_mark_tree (t->x_saved_tree);
70adf8a9
JM
2434 ggc_mark_tree (t->incomplete);
2435 ggc_mark_tree (t->lookups);
6f80451c
MM
2436
2437 mark_stmt_tree (&t->x_stmt_tree);
a8f73d4b 2438 mark_binding_level (&t->bindings);
fc6af6e3
RH
2439 t = t->prev;
2440 }
2441}
2442
e92cc029 2443static tree
45537677
MS
2444store_bindings (names, old_bindings)
2445 tree names, old_bindings;
2446{
2447 tree t;
2448 for (t = names; t; t = TREE_CHAIN (t))
2449 {
2450 tree binding, t1, id;
2451
2452 if (TREE_CODE (t) == TREE_LIST)
2453 id = TREE_PURPOSE (t);
2454 else
2455 id = DECL_NAME (t);
2456
68642fb6 2457 if (!id
f181d4ae
MM
2458 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2459 we have no IDENTIFIER_BINDING if we have left the class
2460 scope, but cached the class-level declarations. */
2461 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
45537677
MS
2462 continue;
2463
2464 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2465 if (TREE_VEC_ELT (t1, 0) == id)
2466 goto skip_it;
78957a2a 2467
87e3dbc9 2468 binding = make_tree_vec (4);
78957a2a 2469
45537677
MS
2470 if (id)
2471 {
2472 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2473 TREE_VEC_ELT (binding, 0) = id;
2c73f9f5 2474 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
f181d4ae 2475 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
45537677 2476 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
f181d4ae 2477 IDENTIFIER_BINDING (id) = NULL_TREE;
45537677
MS
2478 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2479 }
2480 TREE_CHAIN (binding) = old_bindings;
2481 old_bindings = binding;
2482 skip_it:
2483 ;
2484 }
2485 return old_bindings;
2486}
2487
8d08fdba 2488void
5566b478
MS
2489maybe_push_to_top_level (pseudo)
2490 int pseudo;
8d08fdba 2491{
a8f73d4b 2492 struct saved_scope *s;
9cd64686 2493 struct binding_level *b;
a8f73d4b
MM
2494 tree old_bindings;
2495 int need_pop;
2496
2497 s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
8d08fdba 2498
9cd64686
MM
2499 b = scope_chain ? current_binding_level : 0;
2500
a8f73d4b 2501 /* If we're in the middle of some function, save our state. */
01d939e8 2502 if (cfun)
a8f73d4b
MM
2503 {
2504 need_pop = 1;
2505 push_function_context_to (NULL_TREE);
2506 }
2507 else
2508 need_pop = 0;
e349ee73 2509
a8f73d4b 2510 old_bindings = NULL_TREE;
9cd64686 2511 if (scope_chain && previous_class_type)
a50f0918
MS
2512 old_bindings = store_bindings (previous_class_values, old_bindings);
2513
8d08fdba
MS
2514 /* Have to include global_binding_level, because class-level decls
2515 aren't listed anywhere useful. */
2516 for (; b; b = b->level_chain)
2517 {
2518 tree t;
2519
2c73f9f5
ML
2520 /* Template IDs are inserted into the global level. If they were
2521 inserted into namespace level, finish_file wouldn't find them
2522 when doing pending instantiations. Therefore, don't stop at
2523 namespace level, but continue until :: . */
74b846e0 2524 if (b == global_binding_level || (pseudo && b->template_parms_p))
5566b478 2525 break;
8d08fdba 2526
45537677 2527 old_bindings = store_bindings (b->names, old_bindings);
cffa8729 2528 /* We also need to check class_shadowed to save class-level type
45537677
MS
2529 bindings, since pushclass doesn't fill in b->names. */
2530 if (b->parm_flag == 2)
cffa8729 2531 old_bindings = store_bindings (b->class_shadowed, old_bindings);
8d08fdba 2532
8d08fdba
MS
2533 /* Unwind type-value slots back to top level. */
2534 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2535 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2536 }
fc0e7bf5
MM
2537 s->prev = scope_chain;
2538 s->old_bindings = old_bindings;
a8f73d4b
MM
2539 s->bindings = b;
2540 s->need_pop_function_context = need_pop;
2541 s->function_decl = current_function_decl;
fc0e7bf5
MM
2542
2543 scope_chain = s;
8d08fdba 2544 current_function_decl = NULL_TREE;
9cd64686
MM
2545 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2546 current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
51c184be 2547 current_lang_name = lang_name_cplusplus;
2c73f9f5 2548 current_namespace = global_namespace;
5566b478
MS
2549}
2550
2551void
2552push_to_top_level ()
2553{
2554 maybe_push_to_top_level (0);
8d08fdba
MS
2555}
2556
2557void
2558pop_from_top_level ()
2559{
9cd64686 2560 struct saved_scope *s = scope_chain;
8d08fdba
MS
2561 tree t;
2562
e76a2646 2563 /* Clear out class-level bindings cache. */
8d08fdba 2564 if (previous_class_type)
8f032717 2565 invalidate_class_lookup_cache ();
8d08fdba 2566
9cd64686
MM
2567 VARRAY_FREE (current_lang_base);
2568
2569 scope_chain = s->prev;
87e3dbc9 2570 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
8d08fdba
MS
2571 {
2572 tree id = TREE_VEC_ELT (t, 0);
2573 if (id)
2574 {
2c73f9f5 2575 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
f181d4ae 2576 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
8d08fdba 2577 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
9cd64686 2578 }
8d08fdba 2579 }
9cd64686 2580
a8f73d4b
MM
2581 /* If we were in the middle of compiling a function, restore our
2582 state. */
2583 if (s->need_pop_function_context)
2584 pop_function_context_from (NULL_TREE);
2585 current_function_decl = s->function_decl;
e349ee73 2586
a8f73d4b 2587 free (s);
8d08fdba
MS
2588}
2589\f
2590/* Push a definition of struct, union or enum tag "name".
68642fb6 2591 into binding_level "b". "type" should be the type node,
8d08fdba
MS
2592 We assume that the tag "name" is not already defined.
2593
2594 Note that the definition may really be just a forward reference.
2595 In that case, the TYPE_SIZE will be a NULL_TREE.
2596
e92cc029 2597 C++ gratuitously puts all these tags in the name space. */
8d08fdba
MS
2598
2599/* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2600 record the shadowed value for this binding contour. TYPE is
2601 the type that ID maps to. */
2602
2603static void
2604set_identifier_type_value_with_scope (id, type, b)
2605 tree id;
2606 tree type;
2607 struct binding_level *b;
2608{
2c73f9f5 2609 if (!b->namespace_p)
8d08fdba 2610 {
2c73f9f5
ML
2611 /* Shadow the marker, not the real thing, so that the marker
2612 gets restored later. */
2613 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
8d08fdba
MS
2614 b->type_shadowed
2615 = tree_cons (id, old_type_value, b->type_shadowed);
2616 }
2c73f9f5
ML
2617 else
2618 {
2619 tree binding = binding_for_name (id, current_namespace);
2620 BINDING_TYPE (binding) = type;
2621 /* Store marker instead of real type. */
2622 type = global_type_node;
2623 }
8d08fdba
MS
2624 SET_IDENTIFIER_TYPE_VALUE (id, type);
2625}
2626
8f032717 2627/* As set_identifier_type_value_with_scope, but using current_binding_level. */
8d08fdba
MS
2628
2629void
2630set_identifier_type_value (id, type)
2631 tree id;
2632 tree type;
2633{
8f032717 2634 set_identifier_type_value_with_scope (id, type, current_binding_level);
8d08fdba
MS
2635}
2636
2c73f9f5
ML
2637/* Return the type associated with id. */
2638
2639tree
2640identifier_type_value (id)
2641 tree id;
2642{
2643 /* There is no type with that name, anywhere. */
2644 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2645 return NULL_TREE;
2646 /* This is not the type marker, but the real thing. */
2647 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2648 return REAL_IDENTIFIER_TYPE_VALUE (id);
2649 /* Have to search for it. It must be on the global level, now.
2650 Ask lookup_name not to return non-types. */
3e3f722c 2651 id = lookup_name_real (id, 2, 1, 0);
2c73f9f5
ML
2652 if (id)
2653 return TREE_TYPE (id);
2654 return NULL_TREE;
2655}
2656
a9aedbc2
MS
2657/* Pop off extraneous binding levels left over due to syntax errors.
2658
2659 We don't pop past namespaces, as they might be valid. */
e92cc029 2660
8926095f
MS
2661void
2662pop_everything ()
2663{
2664#ifdef DEBUG_CP_BINDING_LEVELS
2665 fprintf (stderr, "XXX entering pop_everything ()\n");
2666#endif
8f032717 2667 while (!toplevel_bindings_p ())
8926095f 2668 {
8f032717 2669 if (current_binding_level->parm_flag == 2)
b74a0560 2670 pop_nested_class ();
8926095f
MS
2671 else
2672 poplevel (0, 0, 0);
2673 }
2674#ifdef DEBUG_CP_BINDING_LEVELS
2675 fprintf (stderr, "XXX leaving pop_everything ()\n");
2676#endif
2677}
2678
39c01e4c
MM
2679/* The type TYPE is being declared. If it is a class template, or a
2680 specialization of a class template, do any processing required and
2681 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2682 being declared a friend. B is the binding level at which this TYPE
2683 should be bound.
2684
2685 Returns the TYPE_DECL for TYPE, which may have been altered by this
2686 processing. */
2687
68642fb6 2688static tree
39c01e4c
MM
2689maybe_process_template_type_declaration (type, globalize, b)
2690 tree type;
2691 int globalize;
2692 struct binding_level* b;
2693{
2694 tree decl = TYPE_NAME (type);
68642fb6 2695
39c01e4c
MM
2696 if (processing_template_parmlist)
2697 /* You can't declare a new template type in a template parameter
2698 list. But, you can declare a non-template type:
68642fb6 2699
39c01e4c 2700 template <class A*> struct S;
68642fb6 2701
39c01e4c
MM
2702 is a forward-declaration of `A'. */
2703 ;
68642fb6 2704 else
39c01e4c
MM
2705 {
2706 maybe_check_template_type (type);
2707
68642fb6 2708 my_friendly_assert (IS_AGGR_TYPE (type)
ed44da02 2709 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
68642fb6
UD
2710
2711
3ebc5c52 2712 if (processing_template_decl)
39c01e4c
MM
2713 {
2714 /* This may change after the call to
2715 push_template_decl_real, but we want the original value. */
2716 tree name = DECL_NAME (decl);
2717
2718 decl = push_template_decl_real (decl, globalize);
2719 /* If the current binding level is the binding level for the
2720 template parameters (see the comment in
2721 begin_template_parm_list) and the enclosing level is a class
2722 scope, and we're not looking at a friend, push the
2723 declaration of the member class into the class scope. In the
2724 friend case, push_template_decl will already have put the
2725 friend into global scope, if appropriate. */
ed44da02 2726 if (TREE_CODE (type) != ENUMERAL_TYPE
74b846e0 2727 && !globalize && b->template_parms_p
39c01e4c
MM
2728 && b->level_chain->parm_flag == 2)
2729 {
61a127b3 2730 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
39c01e4c
MM
2731 /* Put this tag on the list of tags for the class, since
2732 that won't happen below because B is not the class
2733 binding level, but is instead the pseudo-global level. */
68642fb6 2734 b->level_chain->tags =
e1b3e07d 2735 tree_cons (name, type, b->level_chain->tags);
d0f062fb 2736 if (!COMPLETE_TYPE_P (current_class_type))
39c01e4c
MM
2737 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2738 }
2739 }
2740 }
2741
2742 return decl;
2743}
2744
9188c363
MM
2745/* In C++, you don't have to write `struct S' to refer to `S'; you
2746 can just use `S'. We accomplish this by creating a TYPE_DECL as
2747 if the user had written `typedef struct S S'. Create and return
2748 the TYPE_DECL for TYPE. */
2749
2750tree
2751create_implicit_typedef (name, type)
2752 tree name;
2753 tree type;
2754{
2755 tree decl;
2756
2757 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 2758 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
2759 /* There are other implicit type declarations, like the one *within*
2760 a class that allows you to write `S::S'. We must distinguish
2761 amongst these. */
2762 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2763 TYPE_NAME (type) = decl;
2764
2765 return decl;
2766}
2767
8d08fdba 2768/* Push a tag name NAME for struct/class/union/enum type TYPE.
6757edfe 2769 Normally put it into the inner-most non-tag-transparent scope,
8d08fdba 2770 but if GLOBALIZE is true, put it in the inner-most non-class scope.
e92cc029 2771 The latter is needed for implicit declarations. */
8d08fdba
MS
2772
2773void
2774pushtag (name, type, globalize)
2775 tree name, type;
2776 int globalize;
2777{
2778 register struct binding_level *b;
8d08fdba 2779
8f032717 2780 b = current_binding_level;
8d08fdba
MS
2781 while (b->tag_transparent
2782 || (globalize && b->parm_flag == 2))
2783 b = b->level_chain;
2784
e1b3e07d 2785 b->tags = tree_cons (name, type, b->tags);
8d08fdba
MS
2786
2787 if (name)
2788 {
8d08fdba 2789 /* Do C++ gratuitous typedefing. */
db5ae43f 2790 if (IDENTIFIER_TYPE_VALUE (name) != type)
8d08fdba 2791 {
93cdc044 2792 register tree d = NULL_TREE;
848cf1e0 2793 int in_class = 0;
9188c363 2794 tree context = TYPE_CONTEXT (type);
280f9385 2795
280f9385
MM
2796 if (! context)
2797 {
2798 tree cs = current_scope ();
2799
2800 if (! globalize)
2801 context = cs;
2f939d94 2802 else if (cs != NULL_TREE && TYPE_P (cs))
280f9385
MM
2803 /* When declaring a friend class of a local class, we want
2804 to inject the newly named class into the scope
2805 containing the local class, not the namespace scope. */
4f1c5b7d 2806 context = decl_function_context (get_type_decl (cs));
280f9385 2807 }
280f9385
MM
2808 if (!context)
2809 context = current_namespace;
8d08fdba 2810
74b846e0 2811 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
93cdc044
JM
2812 || b->parm_flag == 2)
2813 in_class = 1;
93cdc044 2814
848cf1e0
MM
2815 if (current_lang_name == lang_name_java)
2816 TYPE_FOR_JAVA (type) = 1;
93cdc044 2817
9188c363 2818 d = create_implicit_typedef (name, type);
cb0dbb9a 2819 DECL_CONTEXT (d) = FROB_CONTEXT (context);
9188c363
MM
2820 if (! in_class)
2821 set_identifier_type_value_with_scope (name, type, b);
e1cd6e56 2822
39c01e4c
MM
2823 d = maybe_process_template_type_declaration (type,
2824 globalize, b);
93cdc044
JM
2825
2826 if (b->parm_flag == 2)
61a127b3 2827 {
848cf1e0 2828 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
61a127b3
MM
2829 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2830 class. But if it's a member template class, we
2831 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2832 is done later. */
2833 finish_member_declaration (d);
8f032717
MM
2834 else
2835 pushdecl_class_level (d);
61a127b3 2836 }
93cdc044
JM
2837 else
2838 d = pushdecl_with_scope (d, b);
2839
848cf1e0
MM
2840 if (ANON_AGGRNAME_P (name))
2841 DECL_IGNORED_P (d) = 1;
2842
2843 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2844 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
1f6e1acc
AS
2845
2846 /* If this is a local class, keep track of it. We need this
2847 information for name-mangling, and so that it is possible to find
2848 all function definitions in a translation unit in a convenient
2849 way. (It's otherwise tricky to find a member function definition
2850 it's only pointed to from within a local class.) */
5362b086 2851 if (TYPE_CONTEXT (type)
089acd57
MM
2852 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL
2853 && !processing_template_decl)
1f6e1acc
AS
2854 VARRAY_PUSH_TREE (local_classes, type);
2855
5362b086 2856 if (!uses_template_parms (type))
669ec2b4
JM
2857 {
2858 if (flag_new_abi)
2859 DECL_ASSEMBLER_NAME (d) = mangle_type (type);
2860 else
2861 DECL_ASSEMBLER_NAME (d)
2862 = get_identifier (build_overload_name (type, 1, 1));
2863 }
8d08fdba
MS
2864 }
2865 if (b->parm_flag == 2)
2866 {
d0f062fb 2867 if (!COMPLETE_TYPE_P (current_class_type))
8d08fdba
MS
2868 CLASSTYPE_TAGS (current_class_type) = b->tags;
2869 }
2870 }
2871
2872 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2873 /* Use the canonical TYPE_DECL for this node. */
2874 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2875 else
2876 {
2877 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2878 will be the tagged type we just added to the current
2879 binding level. This fake NULL-named TYPE_DECL node helps
2880 dwarfout.c to know when it needs to output a
2881 representation of a tagged type, and it also gives us a
2882 convenient place to record the "scope start" address for
2883 the tagged type. */
2884
8d08fdba 2885 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
2886 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2887 }
2888}
2889
2890/* Counter used to create anonymous type names. */
e92cc029 2891
8d08fdba
MS
2892static int anon_cnt = 0;
2893
2894/* Return an IDENTIFIER which can be used as a name for
2895 anonymous structs and unions. */
e92cc029 2896
8d08fdba
MS
2897tree
2898make_anon_name ()
2899{
2900 char buf[32];
2901
2902 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2903 return get_identifier (buf);
2904}
2905
2906/* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2907 This keeps dbxout from getting confused. */
e92cc029 2908
8d08fdba
MS
2909void
2910clear_anon_tags ()
2911{
2912 register struct binding_level *b;
2913 register tree tags;
2914 static int last_cnt = 0;
2915
2916 /* Fast out if no new anon names were declared. */
2917 if (last_cnt == anon_cnt)
2918 return;
2919
2920 b = current_binding_level;
2921 while (b->tag_transparent)
2922 b = b->level_chain;
2923 tags = b->tags;
2924 while (tags)
2925 {
2926 /* A NULL purpose means we have already processed all tags
2927 from here to the end of the list. */
2928 if (TREE_PURPOSE (tags) == NULL_TREE)
2929 break;
2930 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2931 TREE_PURPOSE (tags) = NULL_TREE;
2932 tags = TREE_CHAIN (tags);
2933 }
2934 last_cnt = anon_cnt;
2935}
2936\f
2937/* Subroutine of duplicate_decls: return truthvalue of whether
2938 or not types of these decls match.
2939
2940 For C++, we must compare the parameter list so that `int' can match
2941 `int&' in a parameter position, but `int&' is not confused with
2942 `const int&'. */
e92cc029 2943
6060a796 2944int
8d08fdba
MS
2945decls_match (newdecl, olddecl)
2946 tree newdecl, olddecl;
2947{
2948 int types_match;
2949
347d73d7
ML
2950 if (newdecl == olddecl)
2951 return 1;
2952
6b4b3deb
MM
2953 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2954 /* If the two DECLs are not even the same kind of thing, we're not
2955 interested in their types. */
2956 return 0;
2957
2958 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
2959 {
2960 tree f1 = TREE_TYPE (newdecl);
2961 tree f2 = TREE_TYPE (olddecl);
2962 tree p1 = TYPE_ARG_TYPES (f1);
2963 tree p2 = TYPE_ARG_TYPES (f2);
2964
4f1c5b7d 2965 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
2966 && ! (DECL_EXTERN_C_P (newdecl)
2967 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
2968 return 0;
2969
8d08fdba 2970 if (TREE_CODE (f1) != TREE_CODE (f2))
e867a179 2971 return 0;
8d08fdba 2972
3bfdc719 2973 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 2974 {
8b27e9ef
NS
2975 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
2976 && (DECL_BUILT_IN (olddecl)
2977#ifndef NO_IMPLICIT_EXTERN_C
2978 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
2979 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
2980#endif
2981 ))
a28e3c7f
MS
2982 {
2983 types_match = self_promoting_args_p (p1);
2984 if (p1 == void_list_node)
2985 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2986 }
8b27e9ef
NS
2987#ifndef NO_IMPLICIT_EXTERN_C
2988 else if (p1 == NULL_TREE
2989 && (DECL_EXTERN_C_P (olddecl)
2990 && DECL_IN_SYSTEM_HEADER (olddecl)
2991 && !DECL_CLASS_SCOPE_P (olddecl))
2992 && (DECL_EXTERN_C_P (newdecl)
2993 && DECL_IN_SYSTEM_HEADER (newdecl)
2994 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
2995 {
2996 types_match = self_promoting_args_p (p2);
2997 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2998 }
8b27e9ef 2999#endif
8926095f 3000 else
91063b51 3001 types_match = compparms (p1, p2);
8926095f 3002 }
8d08fdba
MS
3003 else
3004 types_match = 0;
3005 }
6b4b3deb 3006 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 3007 {
f84b4be9
JM
3008 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3009 DECL_TEMPLATE_PARMS (olddecl)))
3010 return 0;
68642fb6 3011
2bb5d995
JM
3012 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
3013 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
3014 return 0;
3015
f84b4be9
JM
3016 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3017 types_match = 1;
3018 else
3019 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3020 DECL_TEMPLATE_RESULT (newdecl));
51c184be 3021 }
8d08fdba
MS
3022 else
3023 {
3024 if (TREE_TYPE (newdecl) == error_mark_node)
3025 types_match = TREE_TYPE (olddecl) == error_mark_node;
3026 else if (TREE_TYPE (olddecl) == NULL_TREE)
3027 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
3028 else if (TREE_TYPE (newdecl) == NULL_TREE)
3029 types_match = 0;
8d08fdba 3030 else
01240200 3031 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
3032 TREE_TYPE (olddecl),
3033 COMPARE_REDECLARATION);
8d08fdba
MS
3034 }
3035
3036 return types_match;
3037}
3038
3039/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 3040 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
3041
3042 Note that this does not apply to the C++ case of declaring
3043 a variable `extern const' and then later `const'.
3044
8d08fdba
MS
3045 Don't complain about built-in functions, since they are beyond
3046 the user's control. */
3047
3048static void
3049warn_extern_redeclared_static (newdecl, olddecl)
3050 tree newdecl, olddecl;
3051{
d8e178a0 3052 static const char *explicit_extern_static_warning
8251199e 3053 = "`%D' was declared `extern' and later `static'";
d8e178a0 3054 static const char *implicit_extern_static_warning
8251199e
JM
3055 = "`%D' was declared implicitly `extern' and later `static'";
3056
24f30ed4
MM
3057 tree name;
3058
68642fb6 3059 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee
JM
3060 || TREE_CODE (newdecl) == TEMPLATE_DECL
3061 || TREE_CODE (newdecl) == CONST_DECL)
8d08fdba 3062 return;
68642fb6 3063
963d5758
MM
3064 /* Don't get confused by static member functions; that's a different
3065 use of `static'. */
3066 if (TREE_CODE (newdecl) == FUNCTION_DECL
3067 && DECL_STATIC_FUNCTION_P (newdecl))
3068 return;
8d08fdba 3069
24f30ed4
MM
3070 /* If the old declaration was `static', or the new one isn't, then
3071 then everything is OK. */
3072 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3073 return;
3074
3075 /* It's OK to declare a builtin function as `static'. */
3076 if (TREE_CODE (olddecl) == FUNCTION_DECL
3077 && DECL_ARTIFICIAL (olddecl))
3078 return;
3079
8d08fdba 3080 name = DECL_ASSEMBLER_NAME (newdecl);
24f30ed4
MM
3081 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3082 ? implicit_extern_static_warning
3083 : explicit_extern_static_warning, newdecl);
3084 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
3085}
3086
3087/* Handle when a new declaration NEWDECL has the same name as an old
3088 one OLDDECL in the same binding contour. Prints an error message
3089 if appropriate.
3090
3091 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3092 Otherwise, return 0. */
3093
51c184be 3094int
8d08fdba 3095duplicate_decls (newdecl, olddecl)
824b9a4c 3096 tree newdecl, olddecl;
8d08fdba 3097{
8d08fdba
MS
3098 unsigned olddecl_uid = DECL_UID (olddecl);
3099 int olddecl_friend = 0, types_match = 0;
0b60dfe3 3100 int new_defines_function = 0;
5566b478
MS
3101
3102 if (newdecl == olddecl)
3103 return 1;
8d08fdba 3104
8926095f 3105 types_match = decls_match (newdecl, olddecl);
8d08fdba 3106
8d08fdba
MS
3107 /* If either the type of the new decl or the type of the old decl is an
3108 error_mark_node, then that implies that we have already issued an
3109 error (earlier) for some bogus type specification, and in that case,
3110 it is rather pointless to harass the user with yet more error message
0b60dfe3 3111 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
3112 if (TREE_TYPE (newdecl) == error_mark_node
3113 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba 3114 types_match = 1;
68642fb6 3115
0b60dfe3 3116 /* Check for redeclaration and other discrepancies. */
d22c8596 3117 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
3118 && DECL_ARTIFICIAL (olddecl))
3119 {
3120 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3121 {
3122 /* If you declare a built-in or predefined function name as static,
3123 the old definition is overridden, but optionally warn this was a
3124 bad choice of name. */
3125 if (! TREE_PUBLIC (newdecl))
3126 {
3127 if (warn_shadow)
3128 cp_warning ("shadowing %s function `%#D'",
3129 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3130 olddecl);
3131 /* Discard the old built-in function. */
3132 return 0;
3133 }
3134 /* If the built-in is not ansi, then programs can override
3135 it even globally without an error. */
3136 else if (! DECL_BUILT_IN (olddecl))
3137 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3138 olddecl, newdecl);
3139 else
3140 {
3141 cp_error ("declaration of `%#D'", newdecl);
3142 cp_error ("conflicts with built-in declaration `%#D'",
a4443a08 3143 olddecl);
9f33663b 3144 }
a4443a08
MS
3145 return 0;
3146 }
9f33663b 3147 else if (!types_match)
8d08fdba 3148 {
eb68cb58
MM
3149 if ((DECL_EXTERN_C_P (newdecl)
3150 && DECL_EXTERN_C_P (olddecl))
9f33663b
JM
3151 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3152 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 3153 {
9f33663b
JM
3154 /* A near match; override the builtin. */
3155
3156 if (TREE_PUBLIC (newdecl))
a4443a08 3157 {
9f33663b
JM
3158 cp_warning ("new declaration `%#D'", newdecl);
3159 cp_warning ("ambiguates built-in declaration `%#D'",
3160 olddecl);
a4443a08 3161 }
9f33663b
JM
3162 else if (warn_shadow)
3163 cp_warning ("shadowing %s function `%#D'",
3164 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3165 olddecl);
a4443a08 3166 }
9f33663b
JM
3167 else
3168 /* Discard the old built-in function. */
3169 return 0;
8d08fdba 3170 }
68642fb6 3171
24f30ed4
MM
3172 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3173 {
3174 /* If a builtin function is redeclared as `static', merge
3175 the declarations, but make the original one static. */
3176 DECL_THIS_STATIC (olddecl) = 1;
3177 TREE_PUBLIC (olddecl) = 0;
9bfadf57 3178
421844e7
MM
3179 /* Make the old declaration consistent with the new one so
3180 that all remnants of the builtin-ness of this function
3181 will be banished. */
9bfadf57
MM
3182 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3183 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3184 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3185 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3186 newdecl);
24f30ed4 3187 }
39211cd5
MS
3188 }
3189 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3190 {
9ed182dc
JM
3191 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3192 && TREE_CODE (newdecl) != TYPE_DECL
3193 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3194 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3195 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3196 && TREE_CODE (olddecl) != TYPE_DECL
3197 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3198 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3199 == TYPE_DECL))))
3200 {
3201 /* We do nothing special here, because C++ does such nasty
3202 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3203 get shadowed, and know that if we need to find a TYPE_DECL
3204 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3205 slot of the identifier. */
3206 return 0;
3207 }
3208
39211cd5 3209 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 3210 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 3211 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 3212 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
39211cd5 3213 return 0;
9ed182dc 3214
8251199e 3215 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
39211cd5
MS
3216 if (TREE_CODE (olddecl) == TREE_LIST)
3217 olddecl = TREE_VALUE (olddecl);
8251199e 3218 cp_error_at ("previous declaration of `%#D'", olddecl);
39211cd5
MS
3219
3220 /* New decl is completely inconsistent with the old one =>
3221 tell caller to replace the old one. */
3222
3223 return 0;
8d08fdba 3224 }
8d08fdba
MS
3225 else if (!types_match)
3226 {
4f1c5b7d 3227 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
3228 /* These are certainly not duplicate declarations; they're
3229 from different scopes. */
3230 return 0;
3231
8926095f 3232 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
3233 {
3234 /* The name of a class template may not be declared to refer to
3235 any other template, class, function, object, namespace, value,
e92cc029 3236 or type in the same scope. */
5566b478
MS
3237 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3238 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 3239 {
8251199e
JM
3240 cp_error ("declaration of template `%#D'", newdecl);
3241 cp_error_at ("conflicts with previous declaration `%#D'",
f0e01782
MS
3242 olddecl);
3243 }
ec255269
MS
3244 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3245 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3246 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 3247 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646
MM
3248 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3249 DECL_TEMPLATE_PARMS (olddecl)))
ec255269 3250 {
8251199e
JM
3251 cp_error ("new declaration `%#D'", newdecl);
3252 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
ec255269 3253 }
f0e01782
MS
3254 return 0;
3255 }
8926095f
MS
3256 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3257 {
eb68cb58 3258 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 3259 {
8251199e 3260 cp_error ("declaration of C function `%#D' conflicts with",
8926095f 3261 newdecl);
8251199e 3262 cp_error_at ("previous declaration `%#D' here", olddecl);
8926095f 3263 }
00595019 3264 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 3265 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 3266 {
8251199e
JM
3267 cp_error ("new declaration `%#D'", newdecl);
3268 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
700f8a87
MS
3269 }
3270 else
3271 return 0;
8926095f 3272 }
8d08fdba
MS
3273
3274 /* Already complained about this, so don't do so again. */
a4443a08 3275 else if (current_class_type == NULL_TREE
8d08fdba
MS
3276 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3277 {
8251199e
JM
3278 cp_error ("conflicting types for `%#D'", newdecl);
3279 cp_error_at ("previous declaration as `%#D'", olddecl);
8d08fdba
MS
3280 }
3281 }
68642fb6 3282 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
3283 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3284 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 3285 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
3286 != DECL_TI_TEMPLATE (olddecl))))
3287 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3288 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 3289 || (DECL_TI_TEMPLATE (olddecl)
75650646 3290 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
3291 /* It's OK to have a template specialization and a non-template
3292 with the same type, or to have specializations of two
75650646
MM
3293 different templates with the same type. Note that if one is a
3294 specialization, and the other is an instantiation of the same
3295 template, that we do not exit at this point. That situation
3296 can occur if we instantiate a template class, and then
3297 specialize one of its methods. This situation is legal, but
3298 the declarations must be merged in the usual way. */
3299 return 0;
68642fb6
UD
3300 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3301 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
3302 && !DECL_USE_TEMPLATE (newdecl))
3303 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3304 && !DECL_USE_TEMPLATE (olddecl))))
3305 /* One of the declarations is a template instantiation, and the
3306 other is not a template at all. That's OK. */
386b8a85 3307 return 0;
85c6cbaf
ML
3308 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3309 && DECL_NAMESPACE_ALIAS (newdecl)
3310 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3311 /* Redeclaration of namespace alias, ignore it. */
3312 return 1;
8d08fdba
MS
3313 else
3314 {
d8e178a0 3315 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 3316 if (errmsg)
8d08fdba 3317 {
8251199e 3318 cp_error (errmsg, newdecl);
8d08fdba
MS
3319 if (DECL_NAME (olddecl) != NULL_TREE)
3320 cp_error_at ((DECL_INITIAL (olddecl)
2c73f9f5 3321 && namespace_bindings_p ())
8251199e
JM
3322 ? "`%#D' previously defined here"
3323 : "`%#D' previously declared here", olddecl);
8d08fdba
MS
3324 }
3325 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3326 && DECL_INITIAL (olddecl) != NULL_TREE
3327 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3328 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3329 {
3330 /* Prototype decl follows defn w/o prototype. */
8251199e
JM
3331 cp_warning_at ("prototype for `%#D'", newdecl);
3332 cp_warning_at ("follows non-prototype definition here", olddecl);
8d08fdba
MS
3333 }
3334 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3335 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f
MS
3336 {
3337 /* extern "C" int foo ();
3338 int foo () { bar (); }
3339 is OK. */
9cd64686
MM
3340 if (current_lang_stack
3341 == &VARRAY_TREE (current_lang_base, 0))
a28e3c7f 3342 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
8926095f
MS
3343 else
3344 {
8251199e 3345 cp_error_at ("previous declaration of `%#D' with %L linkage",
8926095f 3346 olddecl, DECL_LANGUAGE (olddecl));
8251199e 3347 cp_error ("conflicts with new declaration with %L linkage",
8926095f
MS
3348 DECL_LANGUAGE (newdecl));
3349 }
3350 }
e1cd6e56 3351
a6f02587 3352 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
3353 ;
3354 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
3355 {
3356 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3357 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3358 int i = 1;
3359
3360 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3361 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 3362
e1cd6e56
MS
3363 for (; t1 && t1 != void_list_node;
3364 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3365 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3366 {
2507f3b5
RK
3367 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3368 TREE_PURPOSE (t2)))
e1cd6e56
MS
3369 {
3370 if (pedantic)
3371 {
8251199e 3372 cp_pedwarn ("default argument given for parameter %d of `%#D'",
e1cd6e56 3373 i, newdecl);
8251199e 3374 cp_pedwarn_at ("after previous specification in `%#D'",
e1cd6e56
MS
3375 olddecl);
3376 }
3377 }
3378 else
3379 {
8251199e 3380 cp_error ("default argument given for parameter %d of `%#D'",
e1cd6e56 3381 i, newdecl);
8251199e 3382 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
3383 olddecl);
3384 }
3385 }
a5894242 3386
7fcdf4c2
MS
3387 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3388 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 3389 {
8251199e 3390 cp_warning ("`%#D' was used before it was declared inline",
7fcdf4c2 3391 newdecl);
8251199e 3392 cp_warning_at ("previous non-inline declaration here",
7fcdf4c2 3393 olddecl);
dff6b454 3394 }
e1cd6e56 3395 }
8d08fdba
MS
3396 }
3397
3398 /* If new decl is `static' and an `extern' was seen previously,
3399 warn about it. */
3400 warn_extern_redeclared_static (newdecl, olddecl);
3401
e92cc029 3402 /* We have committed to returning 1 at this point. */
8d08fdba
MS
3403 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3404 {
3405 /* Now that functions must hold information normally held
3406 by field decls, there is extra work to do so that
3407 declaration information does not get destroyed during
3408 definition. */
3409 if (DECL_VINDEX (olddecl))
3410 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
4f1c5b7d
MM
3411 if (DECL_VIRTUAL_CONTEXT (olddecl))
3412 DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
8d08fdba
MS
3413 if (DECL_CONTEXT (olddecl))
3414 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
0e5921e8 3415 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
8d08fdba 3416 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
e1cd6e56
MS
3417 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3418 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 3419 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 3420 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
4a67c9e9 3421 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
963d5758 3422 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
596ea4e5 3423 DECL_LANG_SPECIFIC (newdecl)->u2 = DECL_LANG_SPECIFIC (olddecl)->u2;
0b60dfe3 3424 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 3425
0b60dfe3
BK
3426 /* Optionally warn about more than one declaration for the same
3427 name, but don't warn about a function declaration followed by a
3428 definition. */
3429 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3430 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3431 /* Don't warn about extern decl followed by definition. */
3432 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3433 /* Don't warn about friends, let add_friend take care of it. */
3434 && ! DECL_FRIEND_P (newdecl))
3435 {
8251199e
JM
3436 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3437 cp_warning_at ("previous declaration of `%D'", olddecl);
0b60dfe3 3438 }
8d08fdba
MS
3439 }
3440
3441 /* Deal with C++: must preserve virtual function table size. */
3442 if (TREE_CODE (olddecl) == TYPE_DECL)
3443 {
3444 register tree newtype = TREE_TYPE (newdecl);
3445 register tree oldtype = TREE_TYPE (olddecl);
3446
3447 if (newtype != error_mark_node && oldtype != error_mark_node
3448 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3449 {
3450 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3451 CLASSTYPE_FRIEND_CLASSES (newtype)
3452 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3453 }
970d6386
MM
3454
3455 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
3456 }
3457
8d08fdba
MS
3458 /* Copy all the DECL_... slots specified in the new decl
3459 except for any that we copy here from the old type. */
68642fb6 3460 DECL_MACHINE_ATTRIBUTES (newdecl)
0b60dfe3 3461 = merge_machine_decl_attributes (olddecl, newdecl);
8d08fdba 3462
5566b478
MS
3463 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3464 {
4d85e00e 3465 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
68642fb6 3466 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
3467 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3468 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 3469
5566b478
MS
3470 return 1;
3471 }
68642fb6 3472
8d08fdba
MS
3473 if (types_match)
3474 {
3475 /* Automatically handles default parameters. */
3476 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 3477 tree newtype;
8d08fdba 3478
e1cd6e56
MS
3479 /* Merge the data types specified in the two decls. */
3480 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3481
9076e292
JM
3482 /* If common_type produces a non-typedef type, just use the old type. */
3483 if (TREE_CODE (newdecl) == TYPE_DECL
3484 && newtype == DECL_ORIGINAL_TYPE (newdecl))
3485 newtype = oldtype;
3486
8d08fdba
MS
3487 if (TREE_CODE (newdecl) == VAR_DECL)
3488 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3489 /* Do this after calling `common_type' so that default
3490 parameters don't confuse us. */
3491 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3492 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3493 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3494 {
f30432d7 3495 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 3496 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 3497 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
3498 TYPE_RAISES_EXCEPTIONS (oldtype));
3499
9a224b4a
JM
3500 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3501 && DECL_SOURCE_LINE (olddecl) != 0
da20811c 3502 && flag_exceptions
4cc1d462
NS
3503 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3504 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
8d08fdba 3505 {
4cc1d462 3506 cp_error ("declaration of `%F' throws different exceptions",
a28e3c7f 3507 newdecl);
a09ba2e0 3508 cp_error_at ("than previous declaration `%F'", olddecl);
8d08fdba
MS
3509 }
3510 }
3511 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3512
3513 /* Lay the type out, unless already done. */
407f03b8 3514 if (! same_type_p (newtype, oldtype)
5566b478 3515 && TREE_TYPE (newdecl) != error_mark_node
5156628f 3516 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
3517 layout_type (TREE_TYPE (newdecl));
3518
5566b478
MS
3519 if ((TREE_CODE (newdecl) == VAR_DECL
3520 || TREE_CODE (newdecl) == PARM_DECL
3521 || TREE_CODE (newdecl) == RESULT_DECL
3522 || TREE_CODE (newdecl) == FIELD_DECL
3523 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 3524 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 3525 layout_decl (newdecl, 0);
8d08fdba
MS
3526
3527 /* Merge the type qualifiers. */
3528 if (TREE_READONLY (newdecl))
3529 TREE_READONLY (olddecl) = 1;
3530 if (TREE_THIS_VOLATILE (newdecl))
3531 TREE_THIS_VOLATILE (olddecl) = 1;
3532
3533 /* Merge the initialization information. */
8926095f
MS
3534 if (DECL_INITIAL (newdecl) == NULL_TREE
3535 && DECL_INITIAL (olddecl) != NULL_TREE)
3536 {
3537 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3538 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3539 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
b0d06515
MM
3540 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3541 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e
MM
3542 && DECL_LANG_SPECIFIC (olddecl))
3543 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
8926095f 3544 }
39211cd5
MS
3545
3546 /* Merge the section attribute.
3547 We want to issue an error if the sections conflict but that must be
3548 done later in decl_attributes since we are called before attributes
3549 are assigned. */
3550 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3551 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3552
5d73aa63
MM
3553 /* Keep the old rtl since we can safely use it. */
3554 DECL_RTL (newdecl) = DECL_RTL (olddecl);
a157febd
GK
3555
3556 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3557 {
3558 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3559 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3560 DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3561 |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3562 DECL_NO_LIMIT_STACK (newdecl)
3563 |= DECL_NO_LIMIT_STACK (olddecl);
3564 }
8d08fdba
MS
3565 }
3566 /* If cannot merge, then use the new type and qualifiers,
3567 and don't preserve the old rtl. */
3568 else
3569 {
3570 /* Clean out any memory we had of the old declaration. */
3571 tree oldstatic = value_member (olddecl, static_aggregates);
3572 if (oldstatic)
3573 TREE_VALUE (oldstatic) = error_mark_node;
3574
3575 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3576 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3577 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3578 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3579 }
3580
3581 /* Merge the storage class information. */
a9aedbc2 3582 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
e92cc029 3583 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 3584 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
3585 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3586 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3587 if (! DECL_EXTERNAL (olddecl))
3588 DECL_EXTERNAL (newdecl) = 0;
68642fb6 3589
0b60dfe3 3590 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 3591 {
a9aedbc2
MS
3592 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3593 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 3594 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
68642fb6 3595 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 3596 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
0b60dfe3
BK
3597 /* Don't really know how much of the language-specific
3598 values we should copy from old to new. */
3599 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3600 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3601 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
fbf1c34b 3602 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
0b60dfe3 3603 olddecl_friend = DECL_FRIEND_P (olddecl);
6a629cac
MM
3604
3605 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3606 if (TREE_CODE (newdecl) == FUNCTION_DECL
3607 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3608 DECL_BEFRIENDING_CLASSES (newdecl)
3609 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3610 DECL_BEFRIENDING_CLASSES (olddecl));
8d08fdba
MS
3611 }
3612
8d08fdba
MS
3613 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3614 {
68642fb6
UD
3615 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3616 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
3617 {
3618 /* If newdecl is not a specialization, then it is not a
3619 template-related function at all. And that means that we
3620 shoud have exited above, returning 0. */
3621 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3622 0);
3623
68642fb6 3624 if (TREE_USED (olddecl))
75650646 3625 /* From [temp.expl.spec]:
68642fb6 3626
75650646
MM
3627 If a template, a member template or the member of a class
3628 template is explicitly specialized then that
3629 specialization shall be declared before the first use of
3630 that specialization that would cause an implicit
3631 instantiation to take place, in every translation unit in
3632 which such a use occurs. */
68642fb6 3633 cp_error ("explicit specialization of %D after first use",
75650646
MM
3634 olddecl);
3635
3636 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3637 }
faae18ab
MS
3638 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3639
3640 /* If either decl says `inline', this fn is inline, unless its
3641 definition was passed already. */
3642 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3643 DECL_INLINE (olddecl) = 1;
3644 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3645
700f8a87
MS
3646 if (! types_match)
3647 {
3648 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3649 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
5566b478
MS
3650 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3651 }
3652 if (! types_match || new_defines_function)
3653 {
6f1b4c42
JM
3654 /* These need to be copied so that the names are available.
3655 Note that if the types do match, we'll preserve inline
3656 info and other bits, but if not, we won't. */
700f8a87
MS
3657 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3658 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 3659 }
8d08fdba
MS
3660 if (new_defines_function)
3661 /* If defining a function declared with other language
3662 linkage, use the previously declared language linkage. */
3663 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
6f1b4c42 3664 else if (types_match)
8d08fdba
MS
3665 {
3666 /* If redeclaring a builtin function, and not a definition,
3667 it stays built in. */
3668 if (DECL_BUILT_IN (olddecl))
3669 {
26db82d8 3670 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 3671 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
3672 /* If we're keeping the built-in definition, keep the rtl,
3673 regardless of declaration matches. */
3674 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3675 }
3676 else
3677 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3678
3679 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8926095f 3680 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
8d08fdba
MS
3681 /* Previously saved insns go together with
3682 the function's previous definition. */
3683 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3684 /* Don't clear out the arguments if we're redefining a function. */
3685 if (DECL_ARGUMENTS (olddecl))
3686 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3687 }
3688 }
3689
a9aedbc2
MS
3690 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3691 {
3692 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3693 }
3694
8d08fdba
MS
3695 /* Now preserve various other info from the definition. */
3696 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3697 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3698 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
f376e137 3699 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
8d08fdba 3700
8d08fdba
MS
3701 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3702 {
3703 int function_size;
8d08fdba
MS
3704
3705 function_size = sizeof (struct tree_decl);
3706
3707 bcopy ((char *) newdecl + sizeof (struct tree_common),
3708 (char *) olddecl + sizeof (struct tree_common),
3709 function_size - sizeof (struct tree_common));
3710
75650646
MM
3711 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3712 {
3713 /* If newdecl is a template instantiation, it is possible that
3714 the following sequence of events has occurred:
3715
3716 o A friend function was declared in a class template. The
68642fb6 3717 class template was instantiated.
75650646 3718
68642fb6
UD
3719 o The instantiation of the friend declaration was
3720 recorded on the instantiation list, and is newdecl.
75650646
MM
3721
3722 o Later, however, instantiate_class_template called pushdecl
3723 on the newdecl to perform name injection. But, pushdecl in
3724 turn called duplicate_decls when it discovered that another
3725 declaration of a global function with the same name already
68642fb6 3726 existed.
75650646
MM
3727
3728 o Here, in duplicate_decls, we decided to clobber newdecl.
3729
3730 If we're going to do that, we'd better make sure that
3731 olddecl, and not newdecl, is on the list of
3732 instantiations so that if we try to do the instantiation
3733 again we won't get the clobbered declaration. */
3734
68642fb6
UD
3735 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3736 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
75650646
MM
3737
3738 for (; decls; decls = TREE_CHAIN (decls))
3739 if (TREE_VALUE (decls) == newdecl)
3740 TREE_VALUE (decls) = olddecl;
3741 }
8d08fdba
MS
3742 }
3743 else
3744 {
3745 bcopy ((char *) newdecl + sizeof (struct tree_common),
3746 (char *) olddecl + sizeof (struct tree_common),
3747 sizeof (struct tree_decl) - sizeof (struct tree_common)
3748 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3749 }
3750
3751 DECL_UID (olddecl) = olddecl_uid;
3752 if (olddecl_friend)
3753 DECL_FRIEND_P (olddecl) = 1;
3754
d9525bec
BK
3755 /* NEWDECL contains the merged attribute lists.
3756 Update OLDDECL to be the same. */
3757 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3758
8d08fdba
MS
3759 return 1;
3760}
3761
3762/* Record a decl-node X as belonging to the current lexical scope.
3763 Check for errors (such as an incompatible declaration for the same
3764 name already seen in the same scope).
3765
3766 Returns either X or an old decl for the same name.
3767 If an old decl is returned, it may have been smashed
3768 to agree with what X says. */
3769
3770tree
3771pushdecl (x)
3772 tree x;
3773{
3774 register tree t;
b35d4555
MM
3775 register tree name;
3776 int need_new_binding;
3777
3778 /* We shouldn't be calling pushdecl when we're generating RTL for a
3779 function that we already did semantic analysis on previously. */
01d939e8 3780 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
b35d4555
MM
3781 19990913);
3782
b35d4555 3783 need_new_binding = 1;
8d08fdba 3784
50714e79
MM
3785 if (DECL_TEMPLATE_PARM_P (x))
3786 /* Template parameters have no context; they are not X::T even
3787 when declared within a class or namespace. */
3788 ;
3789 else
3790 {
3791 if (current_function_decl && x != current_function_decl
3792 /* A local declaration for a function doesn't constitute
3793 nesting. */
f39ee884
MM
3794 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3795 /* A local declaration for an `extern' variable is in the
94dfccd1 3796 scope of the current namespace, not the current
f39ee884
MM
3797 function. */
3798 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
50714e79
MM
3799 && !DECL_CONTEXT (x))
3800 DECL_CONTEXT (x) = current_function_decl;
cd9f6678
MM
3801
3802 /* If this is the declaration for a namespace-scope function,
3803 but the declaration itself is in a local scope, mark the
3804 declaration. */
68642fb6 3805 if (TREE_CODE (x) == FUNCTION_DECL
cd9f6678
MM
3806 && DECL_NAMESPACE_SCOPE_P (x)
3807 && current_function_decl
3808 && x != current_function_decl)
3809 DECL_LOCAL_FUNCTION_P (x) = 1;
50714e79 3810 }
8d08fdba 3811
fe8fadc1 3812 name = DECL_NAME (x);
8d08fdba
MS
3813 if (name)
3814 {
94dfccd1
JM
3815 int different_binding_level = 0;
3816
386b8a85
JM
3817 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3818 name = TREE_OPERAND (name, 0);
68642fb6 3819
94dfccd1
JM
3820 /* In case this decl was explicitly namespace-qualified, look it
3821 up in its namespace context. */
3822 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x)
3823 && namespace_bindings_p ())
2c73f9f5
ML
3824 t = namespace_binding (name, DECL_CONTEXT (x));
3825 else
3826 t = lookup_name_current_level (name);
fe8fadc1 3827
94dfccd1
JM
3828 /* [basic.link] If there is a visible declaration of an entity
3829 with linkage having the same name and type, ignoring entities
3830 declared outside the innermost enclosing namespace scope, the
3831 block scope declaration declares that same entity and
3832 receives the linkage of the previous declaration. */
3833 if (! t && current_function_decl && x != current_function_decl
3834 && (TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
3835 && DECL_EXTERNAL (x))
3836 {
3837 /* Look in block scope. */
3838 t = IDENTIFIER_VALUE (name);
3839 /* Or in the innermost namespace. */
3840 if (! t)
3841 t = namespace_binding (name, DECL_CONTEXT (x));
3842 /* Does it have linkage? */
3843 if (t && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
3844 t = NULL_TREE;
3845 if (t)
3846 different_binding_level = 1;
3847 }
3848
fe8fadc1
MM
3849 /* If we are declaring a function, and the result of name-lookup
3850 was an OVERLOAD, look for an overloaded instance that is
3851 actually the same as the function we are declaring. (If
3852 there is one, we have to merge our declaration with the
3853 previous declaration.) */
655dc6ee 3854 if (t && TREE_CODE (t) == OVERLOAD)
fe8fadc1
MM
3855 {
3856 tree match;
3857
655dc6ee
JM
3858 if (TREE_CODE (x) == FUNCTION_DECL)
3859 for (match = t; match; match = OVL_NEXT (match))
3860 {
3861 if (DECL_ASSEMBLER_NAME (OVL_CURRENT (t))
3862 == DECL_ASSEMBLER_NAME (x))
3863 break;
3864 }
3865 else
3866 /* Just choose one. */
3867 match = t;
fe8fadc1
MM
3868
3869 if (match)
3870 t = OVL_CURRENT (match);
3871 else
3872 t = NULL_TREE;
3873 }
3874
8d08fdba
MS
3875 if (t == error_mark_node)
3876 {
3877 /* error_mark_node is 0 for a while during initialization! */
3878 t = NULL_TREE;
8251199e 3879 cp_error_at ("`%#D' used prior to declaration", x);
8d08fdba 3880 }
51c184be 3881 else if (t != NULL_TREE)
8d08fdba 3882 {
94dfccd1
JM
3883 if (different_binding_level)
3884 {
3885 if (decls_match (x, t))
3886 /* The standard only says that the local extern
3887 inherits linkage from the previous decl; in
3888 particular, default args are not shared. It would
3889 be nice to propagate inlining info, though. FIXME. */
3890 TREE_PUBLIC (x) = TREE_PUBLIC (t);
3891 }
3892 else if (TREE_CODE (t) == PARM_DECL)
8d08fdba
MS
3893 {
3894 if (DECL_CONTEXT (t) == NULL_TREE)
3895 fatal ("parse errors have confused me too much");
be99da77 3896
e92cc029 3897 /* Check for duplicate params. */
be99da77
MS
3898 if (duplicate_decls (x, t))
3899 return t;
8d08fdba 3900 }
eb68cb58 3901 else if ((DECL_EXTERN_C_FUNCTION_P (x)
5566b478
MS
3902 || DECL_FUNCTION_TEMPLATE_P (x))
3903 && is_overloaded_fn (t))
2c73f9f5 3904 /* Don't do anything just yet. */;
e1cd6e56
MS
3905 else if (t == wchar_decl_node)
3906 {
3907 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
8251199e 3908 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
e1cd6e56
MS
3909
3910 /* Throw away the redeclaration. */
3911 return t;
3912 }
8926095f 3913 else if (TREE_CODE (t) != TREE_CODE (x))
8d08fdba 3914 {
9ed182dc 3915 if (duplicate_decls (x, t))
51c184be 3916 return t;
8d08fdba
MS
3917 }
3918 else if (duplicate_decls (x, t))
51c184be 3919 {
7177d104
MS
3920 if (TREE_CODE (t) == TYPE_DECL)
3921 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
f30432d7
MS
3922 else if (TREE_CODE (t) == FUNCTION_DECL)
3923 check_default_args (t);
7177d104 3924
51c184be
MS
3925 return t;
3926 }
35680744
MM
3927 else if (DECL_MAIN_P (x))
3928 {
3929 /* A redeclaration of main, but not a duplicate of the
68642fb6 3930 previous one.
35680744
MM
3931
3932 [basic.start.main]
3933
3934 This function shall not be overloaded. */
8251199e
JM
3935 cp_error_at ("invalid redeclaration of `%D'", t);
3936 cp_error ("as `%D'", x);
35680744
MM
3937 /* We don't try to push this declaration since that
3938 causes a crash. */
3939 return x;
3940 }
8d08fdba 3941 }
8926095f 3942
f3400fe2
JM
3943 check_template_shadow (x);
3944
fcfcdfc8
JM
3945 /* If this is a function conjured up by the backend, massage it
3946 so it looks friendly. */
eb68cb58 3947 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
fcfcdfc8
JM
3948 {
3949 retrofit_lang_decl (x);
3950 DECL_LANGUAGE (x) = lang_c;
3951 }
3952
eb68cb58 3953 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
8926095f 3954 {
7bdbfa05 3955 t = push_overloaded_decl (x, PUSH_LOCAL);
5fdaba89 3956 if (t != x)
8926095f 3957 return t;
f181d4ae
MM
3958 if (!namespace_bindings_p ())
3959 /* We do not need to create a binding for this name;
3960 push_overloaded_decl will have already done so if
3961 necessary. */
3962 need_new_binding = 0;
8926095f 3963 }
6eb3bb27 3964 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
cfe507be
MM
3965 {
3966 t = push_overloaded_decl (x, PUSH_GLOBAL);
3967 if (t == x)
3968 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3969 return t;
3970 }
8d08fdba 3971
a1774733
BK
3972 /* If declaring a type as a typedef, copy the type (unless we're
3973 at line 0), and install this TYPE_DECL as the new type's typedef
3974 name. See the extensive comment in ../c-decl.c (pushdecl). */
8d08fdba
MS
3975 if (TREE_CODE (x) == TYPE_DECL)
3976 {
3977 tree type = TREE_TYPE (x);
655dc6ee 3978 if (DECL_SOURCE_LINE (x) == 0)
a1774733
BK
3979 {
3980 if (TYPE_NAME (type) == 0)
3981 TYPE_NAME (type) = x;
3982 }
1c80fb65
MM
3983 else if (type != error_mark_node && TYPE_NAME (type) != x
3984 /* We don't want to copy the type when all we're
3985 doing is making a TYPE_DECL for the purposes of
3986 inlining. */
68642fb6 3987 && (!TYPE_NAME (type)
1c80fb65 3988 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
a1774733
BK
3989 {
3990 DECL_ORIGINAL_TYPE (x) = type;
3991 type = build_type_copy (type);
3992 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3993 TYPE_NAME (type) = x;
3994 TREE_TYPE (x) = type;
3995 }
8d08fdba 3996
8d08fdba
MS
3997 if (type != error_mark_node
3998 && TYPE_NAME (type)
3999 && TYPE_IDENTIFIER (type))
68642fb6 4000 set_identifier_type_value_with_scope (DECL_NAME (x), type,
f181d4ae
MM
4001 current_binding_level);
4002
8d08fdba
MS
4003 }
4004
4005 /* Multiple external decls of the same identifier ought to match.
4006
4007 We get warnings about inline functions where they are defined.
39211cd5 4008 We get warnings about other functions from push_overloaded_decl.
68642fb6 4009
8d08fdba 4010 Avoid duplicate warnings where they are used. */
39211cd5 4011 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
8d08fdba
MS
4012 {
4013 tree decl;
4014
f49fad00
JM
4015 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4016 if (decl && TREE_CODE (decl) == OVERLOAD)
4017 decl = OVL_FUNCTION (decl);
8d08fdba 4018
f49fad00
JM
4019 if (decl && decl != error_mark_node
4020 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))
8d08fdba
MS
4021 /* If different sort of thing, we already gave an error. */
4022 && TREE_CODE (decl) == TREE_CODE (x)
3bfdc719 4023 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
8d08fdba 4024 {
8251199e
JM
4025 cp_pedwarn ("type mismatch with previous external decl", x);
4026 cp_pedwarn_at ("previous external decl of `%#D'", decl);
8d08fdba
MS
4027 }
4028 }
4029
8d08fdba
MS
4030 /* This name is new in its binding level.
4031 Install the new declaration and return it. */
2c73f9f5 4032 if (namespace_bindings_p ())
8d08fdba
MS
4033 {
4034 /* Install a global value. */
4035
8d08fdba
MS
4036 /* If the first global decl has external linkage,
4037 warn if we later see static one. */
31928556 4038 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
8d08fdba 4039 TREE_PUBLIC (name) = 1;
5362b086 4040
fe8fadc1
MM
4041 /* Bind the mangled name for the entity. In the future, we
4042 should not need to do this; mangled names are an
4043 implementation detail of which the front-end should not
4044 need to be aware. */
d8f8dca1 4045 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
5fdaba89
MM
4046 && t != NULL_TREE)
4047 /* For an ordinary function, we create a binding from
4048 the mangled name (i.e., NAME) to the DECL. But, for
4049 an `extern "C"' function, the mangled name and the
4050 ordinary name are the same so we need not do this. */
eb68cb58 4051 && !DECL_EXTERN_C_FUNCTION_P (x))
30394414 4052 {
fe8fadc1
MM
4053 tree mangled_name;
4054
4055 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
4056 || TREE_CODE (x) == NAMESPACE_DECL)
4057 mangled_name = name;
4058 else
4059 mangled_name = DECL_ASSEMBLER_NAME (x);
4060
30394414 4061 if (TREE_CODE (x) == FUNCTION_DECL)
68642fb6 4062 my_friendly_assert
fe8fadc1
MM
4063 ((IDENTIFIER_GLOBAL_VALUE (mangled_name) == NULL_TREE)
4064 || (IDENTIFIER_GLOBAL_VALUE (mangled_name) == x), 378);
4065 SET_IDENTIFIER_NAMESPACE_VALUE (mangled_name, x);
30394414 4066 }
8d08fdba
MS
4067
4068 /* Don't forget if the function was used via an implicit decl. */
4069 if (IDENTIFIER_IMPLICIT_DECL (name)
4070 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4071 TREE_USED (x) = 1;
4072
4073 /* Don't forget if its address was taken in that way. */
4074 if (IDENTIFIER_IMPLICIT_DECL (name)
4075 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4076 TREE_ADDRESSABLE (x) = 1;
4077
4078 /* Warn about mismatches against previous implicit decl. */
4079 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4080 /* If this real decl matches the implicit, don't complain. */
4081 && ! (TREE_CODE (x) == FUNCTION_DECL
4082 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
8251199e
JM
4083 cp_warning
4084 ("`%D' was previously implicitly declared to return `int'", x);
8d08fdba
MS
4085
4086 /* If new decl is `static' and an `extern' was seen previously,
4087 warn about it. */
a0a33927
MS
4088 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4089 warn_extern_redeclared_static (x, t);
8d08fdba
MS
4090 }
4091 else
4092 {
4093 /* Here to install a non-global value. */
f181d4ae 4094 tree oldlocal = IDENTIFIER_VALUE (name);
31928556 4095 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba 4096
f181d4ae
MM
4097 if (need_new_binding)
4098 {
0034cf72 4099 push_local_binding (name, x, 0);
f181d4ae
MM
4100 /* Because push_local_binding will hook X on to the
4101 current_binding_level's name list, we don't want to
4102 do that again below. */
4103 need_new_binding = 0;
4104 }
8d08fdba
MS
4105
4106 /* If this is a TYPE_DECL, push it into the type value slot. */
4107 if (TREE_CODE (x) == TYPE_DECL)
68642fb6 4108 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
f181d4ae 4109 current_binding_level);
8d08fdba 4110
a9aedbc2
MS
4111 /* Clear out any TYPE_DECL shadowed by a namespace so that
4112 we won't think this is a type. The C struct hack doesn't
4113 go through namespaces. */
4114 if (TREE_CODE (x) == NAMESPACE_DECL)
68642fb6 4115 set_identifier_type_value_with_scope (name, NULL_TREE,
f181d4ae 4116 current_binding_level);
a9aedbc2 4117
e905ac8a
MS
4118 if (oldlocal)
4119 {
4120 tree d = oldlocal;
17aec3eb 4121
74dc0d8c
MS
4122 while (oldlocal
4123 && TREE_CODE (oldlocal) == VAR_DECL
4124 && DECL_DEAD_FOR_LOCAL (oldlocal))
17aec3eb
RK
4125 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4126
e905ac8a
MS
4127 if (oldlocal == NULL_TREE)
4128 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4129 }
4130
8d08fdba
MS
4131 /* If this is an extern function declaration, see if we
4132 have a global definition or declaration for the function. */
4133 if (oldlocal == NULL_TREE
faae18ab 4134 && DECL_EXTERNAL (x)
31928556 4135 && oldglobal != NULL_TREE
8d08fdba 4136 && TREE_CODE (x) == FUNCTION_DECL
31928556 4137 && TREE_CODE (oldglobal) == FUNCTION_DECL)
8d08fdba
MS
4138 {
4139 /* We have one. Their types must agree. */
31928556 4140 if (decls_match (x, oldglobal))
6060a796
MS
4141 /* OK */;
4142 else
8d08fdba 4143 {
8251199e
JM
4144 cp_warning ("extern declaration of `%#D' doesn't match", x);
4145 cp_warning_at ("global declaration `%#D'", oldglobal);
8d08fdba 4146 }
8d08fdba
MS
4147 }
4148 /* If we have a local external declaration,
4149 and no file-scope declaration has yet been seen,
4150 then if we later have a file-scope decl it must not be static. */
4151 if (oldlocal == NULL_TREE
31928556 4152 && oldglobal == NULL_TREE
8d08fdba
MS
4153 && DECL_EXTERNAL (x)
4154 && TREE_PUBLIC (x))
f181d4ae 4155 TREE_PUBLIC (name) = 1;
8d08fdba 4156
8d08fdba 4157 /* Warn if shadowing an argument at the top level of the body. */
e905ac8a
MS
4158 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4159 /* Inline decls shadow nothing. */
4160 && !DECL_FROM_INLINE (x)
4161 && TREE_CODE (oldlocal) == PARM_DECL
4162 /* Don't complain if it's from an enclosing function. */
4163 && DECL_CONTEXT (oldlocal) == current_function_decl
4164 && TREE_CODE (x) != PARM_DECL)
8d08fdba
MS
4165 {
4166 /* Go to where the parms should be and see if we
4167 find them there. */
4168 struct binding_level *b = current_binding_level->level_chain;
4169
4170 if (cleanup_label)
4171 b = b->level_chain;
4172
4173 /* ARM $8.3 */
4174 if (b->parm_flag == 1)
8251199e 4175 cp_error ("declaration of `%#D' shadows a parameter", name);
8d08fdba 4176 }
e905ac8a 4177
8d08fdba 4178 /* Maybe warn if shadowing something else. */
e905ac8a
MS
4179 if (warn_shadow && !DECL_EXTERNAL (x)
4180 /* Inline decls shadow nothing. */
4181 && !DECL_FROM_INLINE (x)
4182 /* No shadow warnings for internally generated vars. */
4183 && ! DECL_ARTIFICIAL (x)
4184 /* No shadow warnings for vars made for inlining. */
4185 && ! DECL_FROM_INLINE (x))
8d08fdba 4186 {
8d08fdba 4187 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
b9d12519
KG
4188 warning ("declaration of `%s' shadows a parameter",
4189 IDENTIFIER_POINTER (name));
8d08fdba 4190 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4ac14744 4191 && current_class_ptr
8d08fdba 4192 && !TREE_STATIC (name))
b9d12519
KG
4193 warning ("declaration of `%s' shadows a member of `this'",
4194 IDENTIFIER_POINTER (name));
8d08fdba 4195 else if (oldlocal != NULL_TREE)
b9d12519
KG
4196 warning ("declaration of `%s' shadows previous local",
4197 IDENTIFIER_POINTER (name));
31928556 4198 else if (oldglobal != NULL_TREE)
30394414 4199 /* XXX shadow warnings in outer-more namespaces */
b9d12519
KG
4200 warning ("declaration of `%s' shadows global declaration",
4201 IDENTIFIER_POINTER (name));
8d08fdba 4202 }
e1cd6e56 4203 }
8d08fdba 4204
e1cd6e56 4205 if (TREE_CODE (x) == FUNCTION_DECL)
f30432d7 4206 check_default_args (x);
8145f082
MS
4207
4208 /* Keep count of variables in this level with incomplete type. */
8145f082 4209 if (TREE_CODE (x) == VAR_DECL
28cbf42c 4210 && TREE_TYPE (x) != error_mark_node
d0f062fb 4211 && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
f30432d7
MS
4212 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4213 /* RTTI TD entries are created while defining the type_info. */
4214 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4215 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
70adf8a9
JM
4216 {
4217 if (namespace_bindings_p ())
4218 namespace_scope_incomplete
4219 = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4220 else
4221 current_binding_level->incomplete
4222 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4223 }
8d08fdba
MS
4224 }
4225
f181d4ae 4226 if (need_new_binding)
68642fb6 4227 add_decl_to_level (x,
efee38a9
MM
4228 DECL_NAMESPACE_SCOPE_P (x)
4229 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4230 : current_binding_level);
8d08fdba
MS
4231
4232 return x;
4233}
4234
5566b478
MS
4235/* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4236 caller to set DECL_CONTEXT properly. */
8d08fdba
MS
4237
4238static tree
4239pushdecl_with_scope (x, level)
4240 tree x;
4241 struct binding_level *level;
4242{
8d019cef 4243 register struct binding_level *b;
5566b478 4244 tree function_decl = current_function_decl;
8d08fdba 4245
5566b478 4246 current_function_decl = NULL_TREE;
8d019cef
JM
4247 if (level->parm_flag == 2)
4248 {
4249 b = class_binding_level;
4250 class_binding_level = level;
4251 pushdecl_class_level (x);
4252 class_binding_level = b;
4253 }
4254 else
4255 {
4256 b = current_binding_level;
4257 current_binding_level = level;
4258 x = pushdecl (x);
4259 current_binding_level = b;
4260 }
5566b478 4261 current_function_decl = function_decl;
8d08fdba
MS
4262 return x;
4263}
4264
2c73f9f5 4265/* Like pushdecl, only it places X in the current namespace,
8d08fdba 4266 if appropriate. */
e92cc029 4267
8d08fdba 4268tree
2c73f9f5 4269pushdecl_namespace_level (x)
8d08fdba
MS
4270 tree x;
4271{
8f032717 4272 register struct binding_level *b = current_binding_level;
2c73f9f5
ML
4273 register tree t;
4274
4275 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
8d08fdba
MS
4276
4277 /* Now, the type_shadowed stack may screw us. Munge it so it does
4278 what we want. */
4279 if (TREE_CODE (x) == TYPE_DECL)
4280 {
4281 tree name = DECL_NAME (x);
4282 tree newval;
4283 tree *ptr = (tree *)0;
4284 for (; b != global_binding_level; b = b->level_chain)
4285 {
4286 tree shadowed = b->type_shadowed;
4287 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4288 if (TREE_PURPOSE (shadowed) == name)
4289 {
4290 ptr = &TREE_VALUE (shadowed);
4291 /* Can't break out of the loop here because sometimes
4292 a binding level will have duplicate bindings for
4293 PT names. It's gross, but I haven't time to fix it. */
4294 }
4295 }
4296 newval = TREE_TYPE (x);
4297 if (ptr == (tree *)0)
4298 {
4299 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4300 up here if this is changed to an assertion. --KR */
4301 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4302 }
4303 else
4304 {
8d08fdba
MS
4305 *ptr = newval;
4306 }
4307 }
4308 return t;
4309}
4310
2c73f9f5
ML
4311/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4312 if appropriate. */
4313
4314tree
4315pushdecl_top_level (x)
4316 tree x;
4317{
b35d4555 4318 push_to_top_level ();
2c73f9f5 4319 x = pushdecl_namespace_level (x);
b35d4555 4320 pop_from_top_level ();
2c73f9f5
ML
4321 return x;
4322}
4323
8d08fdba 4324/* Make the declaration of X appear in CLASS scope. */
e92cc029 4325
61a127b3 4326void
8d08fdba
MS
4327pushdecl_class_level (x)
4328 tree x;
4329{
4330 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4331 scope looks for the pre-mangled name. */
8f032717
MM
4332 register tree name;
4333
4334 if (TREE_CODE (x) == OVERLOAD)
4335 x = OVL_CURRENT (x);
4336 name = DECL_NAME (x);
8d08fdba
MS
4337
4338 if (name)
4339 {
4340 push_class_level_binding (name, x);
4341 if (TREE_CODE (x) == TYPE_DECL)
f181d4ae 4342 set_identifier_type_value (name, TREE_TYPE (x));
8d08fdba 4343 }
6bdb8141 4344 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
8f032717
MM
4345 {
4346 tree f;
4347
4348 for (f = TYPE_FIELDS (TREE_TYPE (x));
4349 f;
4350 f = TREE_CHAIN (f))
4351 pushdecl_class_level (f);
4352 }
8d08fdba
MS
4353}
4354
9188c363
MM
4355/* Enter DECL into the symbol table, if that's appropriate. Returns
4356 DECL, or a modified version thereof. */
4357
4358tree
4359maybe_push_decl (decl)
4360 tree decl;
4361{
4362 tree type = TREE_TYPE (decl);
4363
4364 /* Add this decl to the current binding level, but not if it comes
4365 from another scope, e.g. a static member variable. TEM may equal
4366 DECL or it may be a previous decl of the same name. */
07c88314
MM
4367 if (decl == error_mark_node
4368 || (TREE_CODE (decl) != PARM_DECL
4369 && DECL_CONTEXT (decl) != NULL_TREE
4370 /* Definitions of namespace members outside their namespace are
4371 possible. */
4372 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
9188c363
MM
4373 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4374 || TREE_CODE (type) == UNKNOWN_TYPE
558475f0 4375 /* The declaration of a template specialization does not affect
9188c363
MM
4376 the functions available for overload resolution, so we do not
4377 call pushdecl. */
4378 || (TREE_CODE (decl) == FUNCTION_DECL
4379 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4380 return decl;
4381 else
4382 return pushdecl (decl);
4383}
4384
8d08fdba
MS
4385/* Make the declaration(s) of X appear in CLASS scope
4386 under the name NAME. */
e92cc029 4387
8d08fdba
MS
4388void
4389push_class_level_binding (name, x)
4390 tree name;
4391 tree x;
4392{
8f032717 4393 tree binding;
68642fb6 4394 /* The class_binding_level will be NULL if x is a template
98c1c668
JM
4395 parameter name in a member template. */
4396 if (!class_binding_level)
4397 return;
4398
908c4e83
MM
4399 /* Make sure that this new member does not have the same name
4400 as a template parameter. */
4401 if (TYPE_BEING_DEFINED (current_class_type))
4402 check_template_shadow (x);
4403
f181d4ae
MM
4404 /* If this declaration shadows a declaration from an enclosing
4405 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4406 we leave this class. Record the shadowed declaration here. */
8f032717 4407 binding = IDENTIFIER_BINDING (name);
68642fb6 4408 if (binding
8f032717
MM
4409 && ((TREE_CODE (x) == OVERLOAD
4410 && BINDING_VALUE (binding)
4411 && is_overloaded_fn (BINDING_VALUE (binding)))
4412 || INHERITED_VALUE_BINDING_P (binding)))
4413 {
4414 tree shadow;
4415 tree old_decl;
4416
4417 /* If the old binding was from a base class, and was for a tag
4418 name, slide it over to make room for the new binding. The
4419 old binding is still visible if explicitly qualified with a
4420 class-key. */
4421 if (INHERITED_VALUE_BINDING_P (binding)
4422 && BINDING_VALUE (binding)
4423 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4424 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4425 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4426 {
4427 old_decl = BINDING_TYPE (binding);
4428 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4429 BINDING_VALUE (binding) = NULL_TREE;
4430 INHERITED_VALUE_BINDING_P (binding) = 0;
4431 }
4432 else
4433 old_decl = BINDING_VALUE (binding);
4434
4435 /* There was already a binding for X containing fewer
4436 functions than are named in X. Find the previous
4437 declaration of X on the class-shadowed list, and update it. */
4438 for (shadow = class_binding_level->class_shadowed;
4439 shadow;
4440 shadow = TREE_CHAIN (shadow))
4441 if (TREE_PURPOSE (shadow) == name
4442 && TREE_TYPE (shadow) == old_decl)
4443 {
4444 BINDING_VALUE (binding) = x;
4445 INHERITED_VALUE_BINDING_P (binding) = 0;
4446 TREE_TYPE (shadow) = x;
4447 return;
4448 }
4449 }
f181d4ae 4450
8f032717
MM
4451 /* If we didn't replace an existing binding, put the binding on the
4452 stack of bindings for the identifier, and update
4453 IDENTIFIER_CLASS_VALUE. */
4454 if (push_class_binding (name, x))
4455 {
8f032717
MM
4456 class_binding_level->class_shadowed
4457 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4458 class_binding_level->class_shadowed);
8f032717
MM
4459 /* Record the value we are binding NAME to so that we can know
4460 what to pop later. */
4461 TREE_TYPE (class_binding_level->class_shadowed) = x;
4462 }
8d08fdba
MS
4463}
4464
dd4fae80
ML
4465/* Insert another USING_DECL into the current binding level, returning
4466 this declaration. If this is a redeclaration, do nothing, and
4467 return NULL_TREE if this not in namespace scope (in namespace
4468 scope, a using decl might extend any previous bindings). */
e92cc029 4469
2c73f9f5
ML
4470tree
4471push_using_decl (scope, name)
4472 tree scope;
4473 tree name;
8d08fdba 4474{
2c73f9f5 4475 tree decl;
68642fb6 4476
2c73f9f5
ML
4477 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4478 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4479 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4480 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4481 break;
4482 if (decl)
dd4fae80 4483 return namespace_bindings_p () ? decl : NULL_TREE;
4ce3d537 4484 decl = build_lang_decl (USING_DECL, name, void_type_node);
2c73f9f5
ML
4485 DECL_INITIAL (decl) = scope;
4486 TREE_CHAIN (decl) = current_binding_level->usings;
4487 current_binding_level->usings = decl;
4488 return decl;
8d08fdba
MS
4489}
4490
ea9635c7
ML
4491/* Add namespace to using_directives. Return NULL_TREE if nothing was
4492 changed (i.e. there was already a directive), or the fresh
4493 TREE_LIST otherwise. */
4494
4495tree
9ed182dc 4496push_using_directive (used)
ea9635c7 4497 tree used;
ea9635c7
ML
4498{
4499 tree ud = current_binding_level->using_directives;
9ed182dc 4500 tree iter, ancestor;
68642fb6 4501
ea9635c7
ML
4502 /* Check if we already have this. */
4503 if (purpose_member (used, ud) != NULL_TREE)
4504 return NULL_TREE;
00dc6358
JM
4505
4506 /* Recursively add all namespaces used. */
4507 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
9ed182dc 4508 push_using_directive (TREE_PURPOSE (iter));
00dc6358 4509
9ed182dc 4510 ancestor = namespace_ancestor (current_decl_namespace (), used);
00dc6358 4511 ud = current_binding_level->using_directives;
e1b3e07d 4512 ud = tree_cons (used, ancestor, ud);
ea9635c7
ML
4513 current_binding_level->using_directives = ud;
4514 return ud;
4515}
4516
f181d4ae
MM
4517/* DECL is a FUNCTION_DECL for a non-member function, which may have
4518 other definitions already in place. We get around this by making
4519 the value of the identifier point to a list of all the things that
4520 want to be referenced by that name. It is then up to the users of
4521 that name to decide what to do with that list.
8d08fdba 4522
17aec3eb
RK
4523 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4524 DECL_TEMPLATE_RESULT. It is dealt with the same way.
8d08fdba 4525
7bdbfa05
MM
4526 FLAGS is a bitwise-or of the following values:
4527 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4528 namespace scope.
4529 PUSH_USING: DECL is being pushed as the result of a using
68642fb6 4530 declaration.
7bdbfa05 4531
8d08fdba
MS
4532 The value returned may be a previous declaration if we guessed wrong
4533 about what language DECL should belong to (C or C++). Otherwise,
4534 it's always DECL (and never something that's not a _DECL). */
e92cc029 4535
7bdbfa05
MM
4536tree
4537push_overloaded_decl (decl, flags)
8d08fdba 4538 tree decl;
7bdbfa05 4539 int flags;
8d08fdba 4540{
f181d4ae 4541 tree name = DECL_NAME (decl);
700f8a87 4542 tree old;
f181d4ae 4543 tree new_binding;
7bdbfa05 4544 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
700f8a87
MS
4545
4546 if (doing_global)
9f33663b 4547 old = namespace_binding (name, DECL_CONTEXT (decl));
700f8a87 4548 else
f181d4ae 4549 old = lookup_name_current_level (name);
8d08fdba 4550
700f8a87 4551 if (old)
8d08fdba 4552 {
e1cd6e56 4553 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
8926095f 4554 {
700f8a87 4555 tree t = TREE_TYPE (old);
cdf5b885
MS
4556 if (IS_AGGR_TYPE (t) && warn_shadow
4557 && (! DECL_IN_SYSTEM_HEADER (decl)
4558 || ! DECL_IN_SYSTEM_HEADER (old)))
8251199e 4559 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
5b605f68 4560 old = NULL_TREE;
8926095f 4561 }
700f8a87 4562 else if (is_overloaded_fn (old))
8d08fdba 4563 {
8d08fdba 4564 tree tmp;
68642fb6 4565
2c73f9f5 4566 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
7bdbfa05
MM
4567 {
4568 tree fn = OVL_CURRENT (tmp);
4569
4570 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4571 && !(flags & PUSH_USING)
4572 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4573 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4574 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4575 decl, fn);
68642fb6 4576
7bdbfa05
MM
4577 if (duplicate_decls (decl, fn))
4578 return fn;
4579 }
8d08fdba 4580 }
655dc6ee
JM
4581 else if (old == error_mark_node)
4582 /* Ignore the undefined symbol marker. */
4583 old = NULL_TREE;
e1cd6e56
MS
4584 else
4585 {
8251199e
JM
4586 cp_error_at ("previous non-function declaration `%#D'", old);
4587 cp_error ("conflicts with function declaration `%#D'", decl);
a9aedbc2 4588 return decl;
e1cd6e56 4589 }
8d08fdba 4590 }
7177d104 4591
700f8a87 4592 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
8d08fdba 4593 {
2c73f9f5 4594 if (old && TREE_CODE (old) != OVERLOAD)
f181d4ae
MM
4595 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4596 else
4597 new_binding = ovl_cons (decl, old);
347d73d7
ML
4598 if (flags & PUSH_USING)
4599 OVL_USED (new_binding) = 1;
8d08fdba
MS
4600 }
4601 else
f181d4ae
MM
4602 /* NAME is not ambiguous. */
4603 new_binding = decl;
700f8a87
MS
4604
4605 if (doing_global)
f181d4ae 4606 set_namespace_binding (name, current_namespace, new_binding);
700f8a87 4607 else
f181d4ae
MM
4608 {
4609 /* We only create an OVERLOAD if there was a previous binding at
0580c9aa
ML
4610 this level, or if decl is a template. In the former case, we
4611 need to remove the old binding and replace it with the new
4612 binding. We must also run through the NAMES on the binding
4613 level where the name was bound to update the chain. */
4614
4615 if (TREE_CODE (new_binding) == OVERLOAD && old)
f181d4ae
MM
4616 {
4617 tree *d;
68642fb6 4618
f181d4ae
MM
4619 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4620 *d;
4621 d = &TREE_CHAIN (*d))
4622 if (*d == old
4623 || (TREE_CODE (*d) == TREE_LIST
4624 && TREE_VALUE (*d) == old))
4625 {
d8f8dca1
MM
4626 if (TREE_CODE (*d) == TREE_LIST)
4627 /* Just replace the old binding with the new. */
4628 TREE_VALUE (*d) = new_binding;
4629 else
4630 /* Build a TREE_LIST to wrap the OVERLOAD. */
68642fb6 4631 *d = tree_cons (NULL_TREE, new_binding,
ed5511d9 4632 TREE_CHAIN (*d));
d8f8dca1
MM
4633
4634 /* And update the CPLUS_BINDING node. */
4635 BINDING_VALUE (IDENTIFIER_BINDING (name))
4636 = new_binding;
4637 return decl;
f181d4ae
MM
4638 }
4639
d8f8dca1
MM
4640 /* We should always find a previous binding in this case. */
4641 my_friendly_abort (0);
f181d4ae
MM
4642 }
4643
4644 /* Install the new binding. */
0034cf72 4645 push_local_binding (name, new_binding, flags);
f181d4ae 4646 }
700f8a87 4647
8d08fdba
MS
4648 return decl;
4649}
4650\f
4651/* Generate an implicit declaration for identifier FUNCTIONID
4652 as a function of type int (). Print a warning if appropriate. */
4653
4654tree
4655implicitly_declare (functionid)
4656 tree functionid;
4657{
4658 register tree decl;
8d08fdba
MS
4659
4660 /* We used to reuse an old implicit decl here,
4661 but this loses with inline functions because it can clobber
4662 the saved decl chains. */
4663 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4664
4665 DECL_EXTERNAL (decl) = 1;
4666 TREE_PUBLIC (decl) = 1;
4667
cab1f180 4668 /* ISO standard says implicit declarations are in the innermost block.
d22c8596 4669 So we record the decl in the standard fashion. */
8d08fdba
MS
4670 pushdecl (decl);
4671 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4672
4673 if (warn_implicit
4674 /* Only one warning per identifier. */
4675 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4676 {
8251199e 4677 cp_pedwarn ("implicit declaration of function `%#D'", decl);
8d08fdba
MS
4678 }
4679
4680 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4681
8d08fdba
MS
4682 return decl;
4683}
4684
8251199e 4685/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
4686 when the declaration OLDDECL (assumed to be for the same name)
4687 has already been seen.
4688 Otherwise return an error message format string with a %s
4689 where the identifier should go. */
4690
d8e178a0 4691static const char *
8d08fdba
MS
4692redeclaration_error_message (newdecl, olddecl)
4693 tree newdecl, olddecl;
4694{
4695 if (TREE_CODE (newdecl) == TYPE_DECL)
4696 {
4697 /* Because C++ can put things into name space for free,
4698 constructs like "typedef struct foo { ... } foo"
4699 would look like an erroneous redeclaration. */
3bfdc719 4700 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8251199e 4701 return 0;
8d08fdba 4702 else
8251199e 4703 return "redefinition of `%#D'";
8d08fdba
MS
4704 }
4705 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4706 {
4707 /* If this is a pure function, its olddecl will actually be
4708 the original initialization to `0' (which we force to call
4709 abort()). Don't complain about redefinition in this case. */
fee7654e 4710 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
8251199e 4711 return 0;
8d08fdba 4712
2c73f9f5
ML
4713 /* If both functions come from different namespaces, this is not
4714 a redeclaration - this is a conflict with a used function. */
6eb3bb27 4715 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2c73f9f5 4716 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
8251199e 4717 return "`%D' conflicts with used function";
2c73f9f5 4718
db5ae43f
MS
4719 /* We'll complain about linkage mismatches in
4720 warn_extern_redeclared_static. */
4721
2c73f9f5 4722 /* Defining the same name twice is no good. */
8d08fdba 4723 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 4724 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
4725 {
4726 if (DECL_NAME (olddecl) == NULL_TREE)
8251199e 4727 return "`%#D' not declared in class";
8d08fdba 4728 else
8251199e 4729 return "redefinition of `%#D'";
8d08fdba 4730 }
8251199e 4731 return 0;
8d08fdba 4732 }
51c184be
MS
4733 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4734 {
ec255269 4735 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
5362b086 4736 && (DECL_TEMPLATE_RESULT (newdecl)
f4381d62 4737 != DECL_TEMPLATE_RESULT (olddecl))
ec255269
MS
4738 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4739 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4740 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
d0f062fb
NS
4741 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4742 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
8251199e
JM
4743 return "redefinition of `%#D'";
4744 return 0;
51c184be 4745 }
1f51a992 4746 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba
MS
4747 {
4748 /* Objects declared at top level: */
4749 /* If at least one is a reference, it's ok. */
4750 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
8251199e 4751 return 0;
8926095f 4752 /* Reject two definitions. */
8251199e 4753 return "redefinition of `%#D'";
8d08fdba
MS
4754 }
4755 else
4756 {
4757 /* Objects declared with block scope: */
4758 /* Reject two definitions, and reject a definition
4759 together with an external reference. */
4760 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
8251199e
JM
4761 return "redeclaration of `%#D'";
4762 return 0;
8d08fdba
MS
4763 }
4764}
4765\f
acef433b 4766/* Create a new label, named ID. */
8d08fdba 4767
acef433b
MM
4768static tree
4769make_label_decl (id, local_p)
8d08fdba 4770 tree id;
acef433b 4771 int local_p;
8d08fdba 4772{
acef433b 4773 tree decl;
8d08fdba 4774
acef433b 4775 decl = build_decl (LABEL_DECL, id, void_type_node);
b35d4555 4776 if (expanding_p)
acef433b
MM
4777 /* Make sure every label has an rtx. */
4778 label_rtx (decl);
4779
4780 DECL_CONTEXT (decl) = current_function_decl;
4781 DECL_MODE (decl) = VOIDmode;
4782 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 4783
acef433b
MM
4784 /* Say where one reference is to the label, for the sake of the
4785 error if it is not defined. */
4786 DECL_SOURCE_LINE (decl) = lineno;
4787 DECL_SOURCE_FILE (decl) = input_filename;
4788
4789 /* Record the fact that this identifier is bound to this label. */
4790 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4791
6625cdb5
JM
4792 return decl;
4793}
4794
4795/* Record this label on the list of used labels so that we can check
4796 at the end of the function to see whether or not the label was
4797 actually defined, and so we can check when the label is defined whether
4798 this use is valid. */
4799
4800static void
4801use_label (decl)
4802 tree decl;
4803{
4804 if (named_label_uses == NULL
4805 || named_label_uses->names_in_scope != current_binding_level->names
4806 || named_label_uses->label_decl != decl)
4807 {
4808 struct named_label_use_list *new_ent;
4809 new_ent = ((struct named_label_use_list *)
4810 ggc_alloc (sizeof (struct named_label_use_list)));
e349ee73
MS
4811 new_ent->label_decl = decl;
4812 new_ent->names_in_scope = current_binding_level->names;
4813 new_ent->binding_level = current_binding_level;
4814 new_ent->lineno_o_goto = lineno;
4815 new_ent->filename_o_goto = input_filename;
4816 new_ent->next = named_label_uses;
4817 named_label_uses = new_ent;
8d08fdba 4818 }
acef433b 4819}
8d08fdba 4820
acef433b
MM
4821/* Look for a label named ID in the current function. If one cannot
4822 be found, create one. (We keep track of used, but undefined,
4823 labels, and complain about them at the end of a function.) */
8d08fdba 4824
68642fb6 4825tree
acef433b
MM
4826lookup_label (id)
4827 tree id;
4828{
4829 tree decl;
6625cdb5 4830 struct named_label_list *ent;
8d08fdba 4831
acef433b
MM
4832 /* You can't use labels at global scope. */
4833 if (current_function_decl == NULL_TREE)
4834 {
4835 error ("label `%s' referenced outside of any function",
4836 IDENTIFIER_POINTER (id));
4837 return NULL_TREE;
4838 }
68642fb6 4839
acef433b
MM
4840 /* See if we've already got this label. */
4841 decl = IDENTIFIER_LABEL_VALUE (id);
4842 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4843 return decl;
8d08fdba 4844
acef433b
MM
4845 /* Record this label on the list of labels used in this function.
4846 We do this before calling make_label_decl so that we get the
4847 IDENTIFIER_LABEL_VALUE before the new label is declared. */
6625cdb5 4848 ent = ((struct named_label_list *)
f8a83ee3 4849 ggc_alloc_cleared (sizeof (struct named_label_list)));
6625cdb5
JM
4850 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
4851 ent->next = named_labels;
4852 named_labels = ent;
4853
acef433b
MM
4854 /* We need a new label. */
4855 decl = make_label_decl (id, /*local_p=*/0);
6625cdb5 4856
acef433b 4857 /* Now fill in the information we didn't have before. */
6625cdb5 4858 ent->label_decl = decl;
8d08fdba
MS
4859
4860 return decl;
4861}
4862
acef433b 4863/* Declare a local label named ID. */
8d08fdba
MS
4864
4865tree
acef433b
MM
4866declare_local_label (id)
4867 tree id;
8d08fdba 4868{
acef433b 4869 tree decl;
8d08fdba 4870
acef433b
MM
4871 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4872 this scope we can restore the old value of
4873 IDENTIFIER_TYPE_VALUE. */
68642fb6 4874 current_binding_level->shadowed_labels
acef433b
MM
4875 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4876 current_binding_level->shadowed_labels);
4877 /* Look for the label. */
4878 decl = make_label_decl (id, /*local_p=*/1);
4879 /* Now fill in the information we didn't have before. */
4880 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
68642fb6 4881
acef433b 4882 return decl;
8d08fdba
MS
4883}
4884
6625cdb5
JM
4885/* Returns nonzero if it is ill-formed to jump past the declaration of
4886 DECL. Returns 2 if it's also a real problem. */
4887
4888static int
4889decl_jump_unsafe (decl)
4890 tree decl;
4891{
4892 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
4893 return 0;
4894
4895 if (DECL_INITIAL (decl) == NULL_TREE
4896 && pod_type_p (TREE_TYPE (decl)))
4897 return 0;
4898
4899 /* This is really only important if we're crossing an initialization.
4900 The POD stuff is just pedantry; why should it matter if the class
4901 contains a field of pointer to member type? */
4902 if (DECL_INITIAL (decl)
4903 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
4904 return 2;
4905 return 1;
4906}
4907
4908/* Check that a single previously seen jump to a newly defined label
4909 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
4910 the jump context; NAMES are the names in scope in LEVEL at the jump
4911 context; FILE and LINE are the source position of the jump or 0. */
4912
4913static void
4914check_previous_goto_1 (decl, level, names, file, line)
4915 tree decl;
4916 struct binding_level *level;
4917 tree names;
4918 const char *file;
4919 int line;
4920{
4921 int identified = 0;
4922 int saw_eh = 0;
4923 struct binding_level *b = current_binding_level;
4924 for (; b; b = b->level_chain)
4925 {
4926 tree new_decls = b->names;
4927 tree old_decls = (b == level ? names : NULL_TREE);
4928 for (; new_decls != old_decls;
4929 new_decls = TREE_CHAIN (new_decls))
4930 {
4931 int problem = decl_jump_unsafe (new_decls);
4932 if (! problem)
4933 continue;
4934
4935 if (! identified)
4936 {
4937 if (decl)
4938 cp_pedwarn ("jump to label `%D'", decl);
4939 else
4940 pedwarn ("jump to case label");
4941
4942 if (file)
4943 pedwarn_with_file_and_line (file, line, " from here");
4944 identified = 1;
4945 }
4946
4947 if (problem > 1 && DECL_ARTIFICIAL (new_decls))
4948 /* Can't skip init of __exception_info. */
4949 cp_error_at (" enters catch block", new_decls);
4950 else if (problem > 1)
4951 cp_error_at (" crosses initialization of `%#D'",
4952 new_decls);
4953 else
4954 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4955 new_decls);
4956 }
4957
4958 if (b == level)
4959 break;
4960 if (b->eh_region && ! saw_eh)
4961 {
4962 if (! identified)
4963 {
4964 if (decl)
4965 cp_pedwarn ("jump to label `%D'", decl);
4966 else
4967 pedwarn ("jump to case label");
4968
4969 if (file)
4970 pedwarn_with_file_and_line (file, line, " from here");
4971 identified = 1;
4972 }
4973 error (" enters try block");
4974 saw_eh = 1;
4975 }
4976 }
4977}
4978
4979static void
4980check_previous_goto (use)
4981 struct named_label_use_list *use;
4982{
4983 check_previous_goto_1 (use->label_decl, use->binding_level,
4984 use->names_in_scope, use->filename_o_goto,
4985 use->lineno_o_goto);
4986}
4987
4988static void
4989check_switch_goto (level)
4990 struct binding_level *level;
4991{
4992 check_previous_goto_1 (NULL_TREE, level, level->names, NULL, 0);
4993}
4994
4995/* Check that any previously seen jumps to a newly defined label DECL
4996 are OK. Called by define_label. */
4997
4998static void
4999check_previous_gotos (decl)
5000 tree decl;
5001{
5002 struct named_label_use_list **usep;
5003
5004 if (! TREE_USED (decl))
5005 return;
5006
5007 for (usep = &named_label_uses; *usep; )
5008 {
5009 struct named_label_use_list *use = *usep;
5010 if (use->label_decl == decl)
5011 {
5012 check_previous_goto (use);
5013 *usep = use->next;
5014 }
5015 else
5016 usep = &(use->next);
5017 }
5018}
5019
5020/* Check that a new jump to a label DECL is OK. Called by
5021 finish_goto_stmt. */
5022
5023void
5024check_goto (decl)
5025 tree decl;
5026{
5027 int identified = 0;
5028 tree bad;
5029 struct named_label_list *lab;
5030
e3cd9945
APB
5031 /* We can't know where a computed goto is jumping. So we assume
5032 that it's OK. */
5033 if (! DECL_P (decl))
5034 return;
5035
6625cdb5
JM
5036 /* If the label hasn't been defined yet, defer checking. */
5037 if (! DECL_INITIAL (decl))
5038 {
5039 use_label (decl);
5040 return;
5041 }
5042
5043 for (lab = named_labels; lab; lab = lab->next)
5044 if (decl == lab->label_decl)
5045 break;
5046
5047 /* If the label is not on named_labels it's a gcc local label, so
5048 it must be in an outer scope, so jumping to it is always OK. */
5049 if (lab == 0)
5050 return;
5051
5052 if ((lab->eh_region || lab->bad_decls) && !identified)
5053 {
5054 cp_pedwarn_at ("jump to label `%D'", decl);
5055 pedwarn (" from here");
5056 identified = 1;
5057 }
5058
5059 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
5060 {
5061 tree b = TREE_VALUE (bad);
5062 int u = decl_jump_unsafe (b);
5063
5064 if (u > 1 && DECL_ARTIFICIAL (b))
5065 /* Can't skip init of __exception_info. */
5066 cp_error_at (" enters catch block", b);
5067 else if (u > 1)
5068 cp_error_at (" skips initialization of `%#D'", b);
5069 else
5070 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
5071 }
5072
5073 if (lab->eh_region)
5074 error (" enters try block");
5075}
5076
8d08fdba
MS
5077/* Define a label, specifying the location in the source file.
5078 Return the LABEL_DECL node for the label, if the definition is valid.
5079 Otherwise return 0. */
5080
5081tree
5082define_label (filename, line, name)
3b304f5b 5083 const char *filename;
8d08fdba
MS
5084 int line;
5085 tree name;
5086{
f01b0acb 5087 tree decl = lookup_label (name);
6625cdb5
JM
5088 struct named_label_list *ent;
5089
5090 for (ent = named_labels; ent; ent = ent->next)
5091 if (ent->label_decl == decl)
5092 break;
8d08fdba
MS
5093
5094 /* After labels, make any new cleanups go into their
5095 own new (temporary) binding contour. */
5096 current_binding_level->more_cleanups_ok = 0;
5097
e1cd6e56 5098 if (name == get_identifier ("wchar_t"))
8251199e 5099 cp_pedwarn ("label named wchar_t");
e1cd6e56 5100
8d08fdba
MS
5101 if (DECL_INITIAL (decl) != NULL_TREE)
5102 {
8251199e 5103 cp_error ("duplicate label `%D'", decl);
8d08fdba
MS
5104 return 0;
5105 }
5106 else
5107 {
8d08fdba
MS
5108 /* Mark label as having been defined. */
5109 DECL_INITIAL (decl) = error_mark_node;
5110 /* Say where in the source. */
5111 DECL_SOURCE_FILE (decl) = filename;
5112 DECL_SOURCE_LINE (decl) = line;
6625cdb5
JM
5113 if (ent)
5114 {
5115 ent->names_in_scope = current_binding_level->names;
5116 ent->binding_level = current_binding_level;
5117 }
5118 check_previous_gotos (decl);
8d08fdba
MS
5119 current_function_return_value = NULL_TREE;
5120 return decl;
5121 }
5122}
5123
a5894242
MS
5124struct cp_switch
5125{
5126 struct binding_level *level;
5127 struct cp_switch *next;
56cb9733
MM
5128 /* The SWITCH_STMT being built. */
5129 tree switch_stmt;
5130 /* A splay-tree mapping the low element of a case range to the high
5131 element, or NULL_TREE if there is no high element. Used to
5132 determine whether or not a new case label duplicates an old case
5133 label. We need a tree, rather than simply a hash table, because
5134 of the GNU case range extension. */
5135 splay_tree cases;
a5894242
MS
5136};
5137
56cb9733
MM
5138/* A stack of the currently active switch statements. The innermost
5139 switch statement is on the top of the stack. There is no need to
5140 mark the stack for garbage collection because it is only active
5141 during the processing of the body of a function, and we never
5142 collect at that point. */
5362b086 5143
a5894242
MS
5144static struct cp_switch *switch_stack;
5145
56cb9733
MM
5146/* Called right after a switch-statement condition is parsed.
5147 SWITCH_STMT is the switch statement being parsed. */
5148
a5894242 5149void
56cb9733
MM
5150push_switch (switch_stmt)
5151 tree switch_stmt;
a5894242
MS
5152{
5153 struct cp_switch *p
bedda2da 5154 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
a5894242
MS
5155 p->level = current_binding_level;
5156 p->next = switch_stack;
56cb9733
MM
5157 p->switch_stmt = switch_stmt;
5158 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
5159 switch_stack = p;
5160}
5161
5162void
5163pop_switch ()
5164{
bedda2da 5165 struct cp_switch *cs;
5362b086 5166
bedda2da 5167 cs = switch_stack;
56cb9733 5168 splay_tree_delete (cs->cases);
a5894242 5169 switch_stack = switch_stack->next;
bedda2da 5170 free (cs);
a5894242
MS
5171}
5172
b0a1da19
JM
5173/* Note that we've seen a definition of a case label, and complain if this
5174 is a bad place for one. */
e92cc029 5175
8d08fdba 5176void
56cb9733
MM
5177finish_case_label (low_value, high_value)
5178 tree low_value;
5179 tree high_value;
8d08fdba 5180{
56cb9733 5181 tree cond;
a5894242 5182
b0a1da19 5183 if (! switch_stack)
56cb9733
MM
5184 {
5185 if (high_value)
5186 error ("case label not within a switch statement");
5187 else if (low_value)
5362b086 5188 cp_error ("case label `%E' not within a switch statement",
56cb9733
MM
5189 low_value);
5190 else
5191 error ("`default' label not within a switch statement");
5192 return;
5193 }
5194
56cb9733
MM
5195 if (processing_template_decl)
5196 {
8f17b5c5
MM
5197 tree label;
5198
56cb9733
MM
5199 /* For templates, just add the case label; we'll do semantic
5200 analysis at instantiation-time. */
8f17b5c5 5201 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
56cb9733
MM
5202 add_stmt (build_case_label (low_value, high_value, label));
5203 return;
5204 }
5205
5206 /* Find the condition on which this switch statement depends. */
5207 cond = SWITCH_COND (switch_stack->switch_stmt);
5208 if (cond && TREE_CODE (cond) == TREE_LIST)
5209 cond = TREE_VALUE (cond);
56cb9733 5210
8f17b5c5 5211 c_add_case_label (switch_stack->cases, cond, low_value, high_value);
8d08fdba 5212
6625cdb5 5213 check_switch_goto (switch_stack->level);
a5894242 5214
8d08fdba
MS
5215 /* After labels, make any new cleanups go into their
5216 own new (temporary) binding contour. */
8d08fdba
MS
5217 current_binding_level->more_cleanups_ok = 0;
5218 current_function_return_value = NULL_TREE;
5219}
5220\f
5221/* Return the list of declarations of the current level.
5222 Note that this list is in reverse order unless/until
5223 you nreverse it; and when you do nreverse it, you must
5224 store the result back using `storedecls' or you will lose. */
5225
5226tree
5227getdecls ()
5228{
5229 return current_binding_level->names;
5230}
5231
5232/* Return the list of type-tags (for structs, etc) of the current level. */
5233
5234tree
5235gettags ()
5236{
5237 return current_binding_level->tags;
5238}
5239
5240/* Store the list of declarations of the current level.
5241 This is done for the parameter declarations of a function being defined,
5242 after they are modified in the light of any missing parameters. */
5243
5244static void
5245storedecls (decls)
5246 tree decls;
5247{
5248 current_binding_level->names = decls;
5249}
5250
5251/* Similarly, store the list of tags of the current level. */
5252
280f9385 5253void
8d08fdba
MS
5254storetags (tags)
5255 tree tags;
5256{
5257 current_binding_level->tags = tags;
5258}
5259\f
5260/* Given NAME, an IDENTIFIER_NODE,
5261 return the structure (or union or enum) definition for that name.
5262 Searches binding levels from BINDING_LEVEL up to the global level.
5263 If THISLEVEL_ONLY is nonzero, searches only the specified context
5264 (but skips any tag-transparent contexts to find one that is
5265 meaningful for tags).
5266 FORM says which kind of type the caller wants;
5267 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5268 If the wrong kind of type is found, and it's not a template, an error is
5269 reported. */
5270
5271static tree
5272lookup_tag (form, name, binding_level, thislevel_only)
5273 enum tree_code form;
8d08fdba 5274 tree name;
cffa8729 5275 struct binding_level *binding_level;
8d08fdba
MS
5276 int thislevel_only;
5277{
5278 register struct binding_level *level;
74b846e0
MM
5279 /* Non-zero if, we should look past a template parameter level, even
5280 if THISLEVEL_ONLY. */
5281 int allow_template_parms_p = 1;
8d08fdba
MS
5282
5283 for (level = binding_level; level; level = level->level_chain)
5284 {
5285 register tree tail;
5286 if (ANON_AGGRNAME_P (name))
5287 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5288 {
5289 /* There's no need for error checking here, because
5290 anon names are unique throughout the compilation. */
5291 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5292 return TREE_VALUE (tail);
5293 }
2c73f9f5
ML
5294 else if (level->namespace_p)
5295 /* Do namespace lookup. */
6c011b01 5296 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
2c73f9f5 5297 {
36a117a5
MM
5298 tree old = binding_for_name (name, tail);
5299
74b846e0
MM
5300 /* If we just skipped past a template parameter level,
5301 even though THISLEVEL_ONLY, and we find a template
5302 class declaration, then we use the _TYPE node for the
36a117a5 5303 template. See the example below. */
74b846e0 5304 if (thislevel_only && !allow_template_parms_p
68642fb6 5305 && old && BINDING_VALUE (old)
36a117a5
MM
5306 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5307 old = TREE_TYPE (BINDING_VALUE (old));
68642fb6 5308 else
36a117a5
MM
5309 old = BINDING_TYPE (old);
5310
2c73f9f5
ML
5311 /* If it has an original type, it is a typedef, and we
5312 should not return it. */
5313 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5314 old = NULL_TREE;
5315 if (old && TREE_CODE (old) != form
5316 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5317 {
8251199e 5318 cp_error ("`%#D' redeclared as %C", old, form);
2c73f9f5
ML
5319 return NULL_TREE;
5320 }
5321 if (old)
5322 return old;
5323 if (thislevel_only || tail == global_namespace)
5324 return NULL_TREE;
5325 }
8d08fdba
MS
5326 else
5327 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5328 {
a80e4195 5329 if (TREE_PURPOSE (tail) == name)
8d08fdba
MS
5330 {
5331 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5332 /* Should tighten this up; it'll probably permit
5333 UNION_TYPE and a struct template, for example. */
5334 if (code != form
5566b478 5335 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
8d08fdba
MS
5336 {
5337 /* Definition isn't the kind we were looking for. */
8251199e 5338 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
8d08fdba 5339 form);
72b7eeff 5340 return NULL_TREE;
8d08fdba
MS
5341 }
5342 return TREE_VALUE (tail);
5343 }
5344 }
5345 if (thislevel_only && ! level->tag_transparent)
5566b478 5346 {
74b846e0 5347 if (level->template_parms_p && allow_template_parms_p)
5566b478 5348 {
36a117a5 5349 /* We must deal with cases like this:
68642fb6 5350
36a117a5
MM
5351 template <class T> struct S;
5352 template <class T> struct S {};
68642fb6 5353
36a117a5
MM
5354 When looking up `S', for the second declaration, we
5355 would like to find the first declaration. But, we
5356 are in the pseudo-global level created for the
5357 template parameters, rather than the (surrounding)
5358 namespace level. Thus, we keep going one more level,
5359 even though THISLEVEL_ONLY is non-zero. */
74b846e0 5360 allow_template_parms_p = 0;
36a117a5 5361 continue;
5566b478 5362 }
36a117a5
MM
5363 else
5364 return NULL_TREE;
5566b478 5365 }
8d08fdba
MS
5366 }
5367 return NULL_TREE;
5368}
5369
bd6dd845 5370#if 0
8d08fdba
MS
5371void
5372set_current_level_tags_transparency (tags_transparent)
5373 int tags_transparent;
5374{
5375 current_binding_level->tag_transparent = tags_transparent;
5376}
bd6dd845 5377#endif
8d08fdba
MS
5378
5379/* Given a type, find the tag that was defined for it and return the tag name.
5380 Otherwise return 0. However, the value can never be 0
5381 in the cases in which this is used.
5382
5383 C++: If NAME is non-zero, this is the new name to install. This is
5384 done when replacing anonymous tags with real tag names. */
5385
5386static tree
5387lookup_tag_reverse (type, name)
5388 tree type;
5389 tree name;
5390{
5391 register struct binding_level *level;
5392
5393 for (level = current_binding_level; level; level = level->level_chain)
5394 {
5395 register tree tail;
5396 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5397 {
5398 if (TREE_VALUE (tail) == type)
5399 {
5400 if (name)
5401 TREE_PURPOSE (tail) = name;
5402 return TREE_PURPOSE (tail);
5403 }
5404 }
5405 }
5406 return NULL_TREE;
5407}
8d08fdba 5408\f
a9aedbc2 5409/* Look up NAME in the NAMESPACE. */
e92cc029 5410
a9aedbc2
MS
5411tree
5412lookup_namespace_name (namespace, name)
5413 tree namespace, name;
5414{
30394414 5415 tree val;
f30c84c9 5416 tree template_id = NULL_TREE;
2c73f9f5 5417
30394414 5418 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
1231fb96 5419
1231fb96 5420 if (TREE_CODE (name) == NAMESPACE_DECL)
d8f8dca1 5421 /* This happens for A::B<int> when B is a namespace. */
1231fb96 5422 return name;
d8f8dca1
MM
5423 else if (TREE_CODE (name) == TEMPLATE_DECL)
5424 {
5425 /* This happens for A::B where B is a template, and there are no
5426 template arguments. */
5427 cp_error ("invalid use of `%D'", name);
5428 return error_mark_node;
5429 }
1231fb96 5430
b262d64c
JM
5431 namespace = ORIGINAL_NAMESPACE (namespace);
5432
f30c84c9
MM
5433 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5434 {
5435 template_id = name;
5436 name = TREE_OPERAND (name, 0);
5437 if (TREE_CODE (name) == OVERLOAD)
5438 name = DECL_NAME (OVL_CURRENT (name));
2f939d94 5439 else if (DECL_P (name))
f30c84c9
MM
5440 name = DECL_NAME (name);
5441 }
5442
30394414 5443 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
68642fb6 5444
87e3dbc9 5445 val = make_node (CPLUS_BINDING);
52c11ef6 5446 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
2c73f9f5
ML
5447 return error_mark_node;
5448
5449 if (BINDING_VALUE (val))
1c35f5b6
JM
5450 {
5451 val = BINDING_VALUE (val);
5452
f30c84c9
MM
5453 if (template_id)
5454 {
5455 if (DECL_CLASS_TEMPLATE_P (val))
68642fb6 5456 val = lookup_template_class (val,
f30c84c9
MM
5457 TREE_OPERAND (template_id, 1),
5458 /*in_decl=*/NULL_TREE,
5459 /*context=*/NULL_TREE,
5460 /*entering_scope=*/0);
5461 else if (DECL_FUNCTION_TEMPLATE_P (val)
5462 || TREE_CODE (val) == OVERLOAD)
68642fb6 5463 val = lookup_template_function (val,
f30c84c9
MM
5464 TREE_OPERAND (template_id, 1));
5465 else
5466 {
5467 cp_error ("`%D::%D' is not a template",
5468 namespace, name);
5469 return error_mark_node;
5470 }
5471 }
5472
1c35f5b6
JM
5473 /* If we have a single function from a using decl, pull it out. */
5474 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5475 val = OVL_FUNCTION (val);
5476 return val;
5477 }
5478
8251199e 5479 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
30394414 5480 return error_mark_node;
a9aedbc2
MS
5481}
5482
7ddedda4
MM
5483/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5484
5485static unsigned long
5486typename_hash (k)
5487 hash_table_key k;
5488{
5489 unsigned long hash;
5490 tree t;
5491
5492 t = (tree) k;
5493 hash = (((unsigned long) TYPE_CONTEXT (t))
5494 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5495
5496 return hash;
5497}
5498
5499/* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5500
5501static boolean
5502typename_compare (k1, k2)
5503 hash_table_key k1;
5504 hash_table_key k2;
5505{
5506 tree t1;
5507 tree t2;
5508 tree d1;
5509 tree d2;
5510
5511 t1 = (tree) k1;
5512 t2 = (tree) k2;
5513 d1 = TYPE_NAME (t1);
5514 d2 = TYPE_NAME (t2);
68642fb6 5515
7ddedda4
MM
5516 return (DECL_NAME (d1) == DECL_NAME (d2)
5517 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
68642fb6 5518 && ((TREE_TYPE (t1) != NULL_TREE)
7ddedda4
MM
5519 == (TREE_TYPE (t2) != NULL_TREE))
5520 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5521 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5522}
5523
45869a6c
MM
5524/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5525 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5526 is non-NULL, this type is being created by the implicit typename
5527 extension, and BASE_TYPE is a type named `t' in some base class of
68642fb6 5528 `T' which depends on template parameters.
45869a6c
MM
5529
5530 Returns the new TYPENAME_TYPE. */
5531
5532tree
5533build_typename_type (context, name, fullname, base_type)
5534 tree context;
5535 tree name;
5536 tree fullname;
5537 tree base_type;
5538{
5539 tree t;
5540 tree d;
7ddedda4 5541 struct hash_entry* e;
45869a6c 5542
7ddedda4
MM
5543 static struct hash_table ht;
5544
9cd64686
MM
5545 if (!ht.table)
5546 {
5547 static struct hash_table *h = &ht;
68642fb6 5548 if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
9cd64686
MM
5549 &typename_compare))
5550 fatal ("virtual memory exhausted");
5551 ggc_add_tree_hash_table_root (&h, 1);
5552 }
45869a6c
MM
5553
5554 /* Build the TYPENAME_TYPE. */
33848bb0 5555 t = make_aggr_type (TYPENAME_TYPE);
45869a6c
MM
5556 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5557 TYPENAME_TYPE_FULLNAME (t) = fullname;
5558 TREE_TYPE (t) = base_type;
45869a6c
MM
5559
5560 /* Build the corresponding TYPE_DECL. */
5561 d = build_decl (TYPE_DECL, name, t);
5562 TYPE_NAME (TREE_TYPE (d)) = d;
5563 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5564 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2642b9bf 5565 DECL_ARTIFICIAL (d) = 1;
45869a6c 5566
7ddedda4
MM
5567 /* See if we already have this type. */
5568 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5569 if (e)
87e3dbc9 5570 t = (tree) e->key;
7ddedda4
MM
5571 else
5572 /* Insert the type into the table. */
5573 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5574
45869a6c
MM
5575 return t;
5576}
5577
3baa501d
MM
5578/* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5579 unless an error occurs, in which case error_mark_node is returned.
5580 If COMPLAIN zero, don't complain about any errors that occur. */
5581
5566b478 5582tree
3baa501d 5583make_typename_type (context, name, complain)
5566b478 5584 tree context, name;
3baa501d 5585 int complain;
5566b478 5586{
b2b7d40a 5587 tree fullname;
a80e4195 5588
2f939d94 5589 if (TYPE_P (name))
78638e24 5590 {
68642fb6
UD
5591 if (!(TYPE_LANG_SPECIFIC (name)
5592 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
5593 || CLASSTYPE_USE_TEMPLATE (name))))
5594 name = TYPE_IDENTIFIER (name);
5595 else
5596 /* Create a TEMPLATE_ID_EXPR for the type. */
5597 name = build_nt (TEMPLATE_ID_EXPR,
5598 CLASSTYPE_TI_TEMPLATE (name),
5599 CLASSTYPE_TI_ARGS (name));
5600 }
653cc74a 5601 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 5602 name = DECL_NAME (name);
b2b7d40a
JM
5603
5604 fullname = name;
5605
5606 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
5607 {
5608 name = TREE_OPERAND (name, 0);
5609 if (TREE_CODE (name) == TEMPLATE_DECL)
5610 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5611 }
b2b7d40a 5612 if (TREE_CODE (name) != IDENTIFIER_NODE)
a80e4195 5613 my_friendly_abort (2000);
5566b478 5614
04ddee1b
BK
5615 if (TREE_CODE (context) == NAMESPACE_DECL)
5616 {
5617 /* We can get here from typename_sub0 in the explicit_template_type
5618 expansion. Just fail. */
3baa501d
MM
5619 if (complain)
5620 cp_error ("no class template named `%#T' in `%#T'",
5621 name, context);
04ddee1b
BK
5622 return error_mark_node;
5623 }
5624
85b71cf2 5625 if (! uses_template_parms (context)
b77ead33 5626 || currently_open_class (context))
5566b478 5627 {
b2b7d40a
JM
5628 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5629 {
ad810b22 5630 tree tmpl = NULL_TREE;
b2b7d40a 5631 if (IS_AGGR_TYPE (context))
ad810b22
MM
5632 tmpl = lookup_field (context, name, 0, 0);
5633 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
b2b7d40a 5634 {
3baa501d
MM
5635 if (complain)
5636 cp_error ("no class template named `%#T' in `%#T'",
5637 name, context);
b2b7d40a
JM
5638 return error_mark_node;
5639 }
ffb690bd 5640
68642fb6 5641 return lookup_template_class (tmpl,
ad810b22 5642 TREE_OPERAND (fullname, 1),
68642fb6 5643 NULL_TREE, context,
ad810b22 5644 /*entering_scope=*/0);
b2b7d40a
JM
5645 }
5646 else
5566b478 5647 {
b4f70b3d 5648 tree t;
68642fb6 5649
b4f70b3d 5650 if (!IS_AGGR_TYPE (context))
b2b7d40a 5651 {
3baa501d
MM
5652 if (complain)
5653 cp_error ("no type named `%#T' in `%#T'", name, context);
b2b7d40a
JM
5654 return error_mark_node;
5655 }
1107c4b3 5656
b4f70b3d 5657 t = lookup_field (context, name, 0, 1);
7d4bdeed
MM
5658 if (t)
5659 return TREE_TYPE (t);
5566b478 5660 }
5566b478 5661 }
11249cf0
MM
5662
5663 /* If the CONTEXT is not a template type, then either the field is
5664 there now or its never going to be. */
b4f70b3d 5665 if (!uses_template_parms (context))
11249cf0 5666 {
3baa501d
MM
5667 if (complain)
5668 cp_error ("no type named `%#T' in `%#T'", name, context);
11249cf0
MM
5669 return error_mark_node;
5670 }
68642fb6
UD
5671
5672
45869a6c 5673 return build_typename_type (context, name, fullname, NULL_TREE);
5566b478
MS
5674}
5675
2c73f9f5
ML
5676/* Select the right _DECL from multiple choices. */
5677
5678static tree
52c11ef6 5679select_decl (binding, flags)
2c73f9f5 5680 tree binding;
52c11ef6 5681 int flags;
2c73f9f5
ML
5682{
5683 tree val;
5684 val = BINDING_VALUE (binding);
97ba1e3c
MM
5685
5686 /* When we implicitly declare some builtin entity, we mark it
5687 DECL_ANTICIPATED, so that we know to ignore it until it is
5688 really declared. */
5362b086
EC
5689 if (val && DECL_P (val)
5690 && DECL_LANG_SPECIFIC (val)
97ba1e3c
MM
5691 && DECL_ANTICIPATED (val))
5692 return NULL_TREE;
5693
52c11ef6 5694 if (LOOKUP_NAMESPACES_ONLY (flags))
3e3f722c
ML
5695 {
5696 /* We are not interested in types. */
5697 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5698 return val;
5699 return NULL_TREE;
5700 }
68642fb6 5701
2c73f9f5
ML
5702 /* If we could have a type and
5703 we have nothing or we need a type and have none. */
5704 if (BINDING_TYPE (binding)
52c11ef6
JM
5705 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5706 && TREE_CODE (val) != TYPE_DECL)))
2c73f9f5
ML
5707 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5708 /* Don't return non-types if we really prefer types. */
52c11ef6 5709 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
c592d5d2
ML
5710 && (TREE_CODE (val) != TEMPLATE_DECL
5711 || !DECL_CLASS_TEMPLATE_P (val)))
2c73f9f5 5712 val = NULL_TREE;
1c35f5b6 5713
2c73f9f5
ML
5714 return val;
5715}
5716
2c169bab
JM
5717/* Unscoped lookup of a global: iterate over current namespaces,
5718 considering using-directives. If SPACESP is non-NULL, store a list
5719 of the namespaces we've considered in it. */
ea9635c7 5720
2c169bab
JM
5721tree
5722unqualified_namespace_lookup (name, flags, spacesp)
ea9635c7 5723 tree name;
52c11ef6 5724 int flags;
2c169bab 5725 tree *spacesp;
ea9635c7 5726{
87e3dbc9 5727 tree b = make_node (CPLUS_BINDING);
ea9635c7
ML
5728 tree initial = current_decl_namespace();
5729 tree scope = initial;
5730 tree siter;
5731 struct binding_level *level;
5732 tree val = NULL_TREE;
5733
2c169bab
JM
5734 if (spacesp)
5735 *spacesp = NULL_TREE;
5736
5737 for (; !val; scope = CP_DECL_CONTEXT (scope))
ea9635c7 5738 {
2c169bab 5739 if (spacesp)
e1b3e07d 5740 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
ea9635c7
ML
5741 val = binding_for_name (name, scope);
5742
5743 /* Initialize binding for this context. */
5744 BINDING_VALUE (b) = BINDING_VALUE (val);
5745 BINDING_TYPE (b) = BINDING_TYPE (val);
5746
5747 /* Add all _DECLs seen through local using-directives. */
68642fb6 5748 for (level = current_binding_level;
ea9635c7
ML
5749 !level->namespace_p;
5750 level = level->level_chain)
52c11ef6 5751 if (!lookup_using_namespace (name, b, level->using_directives,
2c169bab 5752 scope, flags, spacesp))
ea9635c7 5753 /* Give up because of error. */
5b163de4 5754 return error_mark_node;
ea9635c7
ML
5755
5756 /* Add all _DECLs seen through global using-directives. */
5757 /* XXX local and global using lists should work equally. */
5758 siter = initial;
5759 while (1)
5760 {
68642fb6 5761 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
2c169bab 5762 scope, flags, spacesp))
ea9635c7 5763 /* Give up because of error. */
5b163de4 5764 return error_mark_node;
ea9635c7
ML
5765 if (siter == scope) break;
5766 siter = CP_DECL_CONTEXT (siter);
5767 }
5768
52c11ef6 5769 val = select_decl (b, flags);
ea9635c7
ML
5770 if (scope == global_namespace)
5771 break;
ea9635c7
ML
5772 }
5773 return val;
5774}
5775
52c11ef6
JM
5776/* Combine prefer_type and namespaces_only into flags. */
5777
5778static int
5779lookup_flags (prefer_type, namespaces_only)
5780 int prefer_type, namespaces_only;
5781{
5782 if (namespaces_only)
5783 return LOOKUP_PREFER_NAMESPACES;
5784 if (prefer_type > 1)
5785 return LOOKUP_PREFER_TYPES;
5786 if (prefer_type > 0)
5787 return LOOKUP_PREFER_BOTH;
5788 return 0;
5789}
5790
5791/* Given a lookup that returned VAL, use FLAGS to decide if we want to
5792 ignore it or not. Subroutine of lookup_name_real. */
5793
5794static tree
5795qualify_lookup (val, flags)
5796 tree val;
5797 int flags;
5798{
5799 if (val == NULL_TREE)
5800 return val;
6b945830
JM
5801 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5802 return val;
5803 if ((flags & LOOKUP_PREFER_TYPES)
5804 && (TREE_CODE (val) == TYPE_DECL
5805 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5806 && DECL_CLASS_TEMPLATE_P (val))))
5807 return val;
5808 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
52c11ef6
JM
5809 return NULL_TREE;
5810 return val;
5811}
5812
235f734d
MM
5813/* Any other BINDING overrides an implicit TYPENAME. Warn about
5814 that. */
5815
5816static void
5817warn_about_implicit_typename_lookup (typename, binding)
5818 tree typename;
5819 tree binding;
5820{
5821 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5822 tree name = DECL_NAME (typename);
5823
5824 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5825 && CLASSTYPE_TEMPLATE_INFO (subtype)
5826 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5827 && ! (TREE_CODE (binding) == TYPE_DECL
5828 && same_type_p (TREE_TYPE (binding), subtype)))
5829 {
68642fb6 5830 cp_warning ("lookup of `%D' finds `%#D'",
235f734d
MM
5831 name, binding);
5832 cp_warning (" instead of `%D' from dependent base class",
5833 typename);
5834 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5835 constructor_name (current_class_type), name);
5836 }
5837}
5838
8d08fdba
MS
5839/* Look up NAME in the current binding level and its superiors in the
5840 namespace of variables, functions and typedefs. Return a ..._DECL
5841 node of some kind representing its definition if there is only one
5842 such declaration, or return a TREE_LIST with all the overloaded
5843 definitions if there are many, or return 0 if it is undefined.
5844
2c73f9f5
ML
5845 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5846 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
a28e3c7f 5847 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
68642fb6 5848 Otherwise we prefer non-TYPE_DECLs.
f84b4be9
JM
5849
5850 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5851 using IDENTIFIER_CLASS_VALUE. */
8d08fdba 5852
824b9a4c 5853static tree
3e3f722c 5854lookup_name_real (name, prefer_type, nonclass, namespaces_only)
8d08fdba 5855 tree name;
3e3f722c 5856 int prefer_type, nonclass, namespaces_only;
8d08fdba 5857{
235f734d
MM
5858 tree t;
5859 tree val = NULL_TREE;
a28e3c7f 5860 int yylex = 0;
e1cd6e56 5861 tree from_obj = NULL_TREE;
52c11ef6 5862 int flags;
235f734d 5863 int val_is_implicit_typename = 0;
8d08fdba 5864
3e3f722c
ML
5865 /* Hack: copy flag set by parser, if set. */
5866 if (only_namespace_names)
5867 namespaces_only = 1;
52c11ef6 5868
a28e3c7f
MS
5869 if (prefer_type == -2)
5870 {
5871 extern int looking_for_typename;
fc378698 5872 tree type = NULL_TREE;
a28e3c7f
MS
5873
5874 yylex = 1;
5875 prefer_type = looking_for_typename;
e1cd6e56 5876
52c11ef6 5877 flags = lookup_flags (prefer_type, namespaces_only);
52c11ef6
JM
5878 /* If the next thing is '<', class templates are types. */
5879 if (looking_for_template)
5880 flags |= LOOKUP_TEMPLATES_EXPECTED;
5881
653cc74a 5882 /* std:: becomes :: for now. */
6bcedb4e 5883 if (got_scope && got_scope == fake_std_node)
653cc74a
JM
5884 got_scope = void_type_node;
5885
e1cd6e56
MS
5886 if (got_scope)
5887 type = got_scope;
dff6b454 5888 else if (got_object != error_mark_node)
e1cd6e56 5889 type = got_object;
68642fb6 5890
e1cd6e56 5891 if (type)
a28e3c7f 5892 {
e1cd6e56 5893 if (type == error_mark_node)
f376e137 5894 return error_mark_node;
a80e4195
MS
5895 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5896 type = TREE_TYPE (type);
5566b478 5897
2b9dc906
JM
5898 if (TYPE_P (type))
5899 type = complete_type (type);
5566b478 5900
a1774733 5901 if (TREE_CODE (type) == VOID_TYPE)
2c73f9f5
ML
5902 type = global_namespace;
5903 if (TREE_CODE (type) == NAMESPACE_DECL)
a9aedbc2 5904 {
87e3dbc9 5905 val = make_node (CPLUS_BINDING);
6ad07332 5906 flags |= LOOKUP_COMPLAIN;
52c11ef6 5907 if (!qualified_lookup_using_namespace (name, type, val, flags))
2c73f9f5 5908 return NULL_TREE;
52c11ef6 5909 val = select_decl (val, flags);
a9aedbc2 5910 }
5566b478 5911 else if (! IS_AGGR_TYPE (type)
5156628f 5912 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
a1281f45 5913 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
5156628f 5914 || TREE_CODE (type) == TYPENAME_TYPE)
e92cc029 5915 /* Someone else will give an error about this if needed. */
a28e3c7f 5916 val = NULL_TREE;
e1cd6e56 5917 else if (type == current_class_type)
a28e3c7f 5918 val = IDENTIFIER_CLASS_VALUE (name);
a28e3c7f 5919 else
70adf8a9
JM
5920 {
5921 val = lookup_member (type, name, 0, prefer_type);
5922 type_access_control (type, val);
e69c8072
JM
5923
5924 /* Restore the containing TYPENAME_TYPE if we looked
5925 through it before. */
5926 if (got_scope && got_scope != type
5927 && val && TREE_CODE (val) == TYPE_DECL
5928 && TREE_CODE (TREE_TYPE (val)) == TYPENAME_TYPE)
5929 TYPE_CONTEXT (TREE_TYPE (val)) = got_scope;
70adf8a9 5930 }
a28e3c7f 5931 }
e1cd6e56
MS
5932 else
5933 val = NULL_TREE;
5934
594740f3 5935 if (got_scope)
e1cd6e56 5936 goto done;
594740f3 5937 else if (got_object && val)
aca77bd1
JM
5938 {
5939 from_obj = val;
5940 val = NULL_TREE;
5941 }
a28e3c7f 5942 }
52c11ef6 5943 else
5b163de4
JM
5944 {
5945 flags = lookup_flags (prefer_type, namespaces_only);
5946 /* If we're not parsing, we need to complain. */
5947 flags |= LOOKUP_COMPLAIN;
5948 }
e76a2646 5949
d8f8dca1 5950 /* First, look in non-namespace scopes. */
6f1b4c42
JM
5951
5952 if (current_class_type == NULL_TREE)
5953 nonclass = 1;
5954
235f734d 5955 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
d8f8dca1 5956 {
235f734d
MM
5957 tree binding;
5958
5959 if (!LOCAL_BINDING_P (t) && nonclass)
d8f8dca1
MM
5960 /* We're not looking for class-scoped bindings, so keep going. */
5961 continue;
68642fb6 5962
d8f8dca1 5963 /* If this is the kind of thing we're looking for, we're done. */
235f734d
MM
5964 if (qualify_lookup (BINDING_VALUE (t), flags))
5965 binding = BINDING_VALUE (t);
68642fb6 5966 else if ((flags & LOOKUP_PREFER_TYPES)
235f734d
MM
5967 && qualify_lookup (BINDING_TYPE (t), flags))
5968 binding = BINDING_TYPE (t);
5969 else
5970 binding = NULL_TREE;
5971
70adf8a9
JM
5972 /* Handle access control on types from enclosing or base classes. */
5973 if (binding && ! yylex
5974 && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
5975 type_access_control (BINDING_LEVEL (t)->this_class, binding);
5976
235f734d 5977 if (binding
83233dca 5978 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
d8f8dca1 5979 {
235f734d
MM
5980 if (val_is_implicit_typename && !yylex)
5981 warn_about_implicit_typename_lookup (val, binding);
5982 val = binding;
68642fb6 5983 val_is_implicit_typename
83233dca 5984 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
235f734d
MM
5985 if (!val_is_implicit_typename)
5986 break;
d8f8dca1
MM
5987 }
5988 }
f181d4ae 5989
235f734d
MM
5990 /* Now lookup in namespace scopes. */
5991 if (!val || val_is_implicit_typename)
e76a2646 5992 {
2c169bab 5993 t = unqualified_namespace_lookup (name, flags, 0);
235f734d 5994 if (t)
c1def683 5995 {
235f734d
MM
5996 if (val_is_implicit_typename && !yylex)
5997 warn_about_implicit_typename_lookup (val, t);
5998 val = t;
c1def683
JM
5999 }
6000 }
6001
a28e3c7f 6002 done:
8d08fdba
MS
6003 if (val)
6004 {
c91a56d2 6005 /* This should only warn about types used in qualified-ids. */
e1cd6e56 6006 if (from_obj && from_obj != val)
5566b478 6007 {
c91a56d2
MS
6008 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
6009 && TREE_CODE (val) == TYPE_DECL
aca77bd1
JM
6010 && ! same_type_p (TREE_TYPE (from_obj), TREE_TYPE (val)))
6011 cp_pedwarn ("\
6012lookup of `%D' in the scope of `%#T' (`%#T') \
6013does not match lookup in the current scope (`%#T')",
6014 name, got_object, TREE_TYPE (from_obj),
6015 TREE_TYPE (val));
594740f3 6016
b8b1a3c1
JM
6017 /* We don't change val to from_obj if got_object depends on
6018 template parms because that breaks implicit typename for
6019 destructor calls. */
6020 if (! uses_template_parms (got_object))
53fdbb3b 6021 val = from_obj;
5566b478 6022 }
e1cd6e56 6023
0c64a9ca
JM
6024 /* If we have a single function from a using decl, pull it out. */
6025 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
6026 val = OVL_FUNCTION (val);
8d08fdba 6027 }
e1cd6e56
MS
6028 else if (from_obj)
6029 val = from_obj;
8d08fdba
MS
6030
6031 return val;
6032}
6033
700f8a87
MS
6034tree
6035lookup_name_nonclass (name)
6036 tree name;
6037{
3e3f722c 6038 return lookup_name_real (name, 0, 1, 0);
700f8a87
MS
6039}
6040
2c73f9f5
ML
6041tree
6042lookup_function_nonclass (name, args)
6043 tree name;
6044 tree args;
6045{
6046 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
6047}
6048
3e3f722c
ML
6049tree
6050lookup_name_namespace_only (name)
6051 tree name;
6052{
6053 /* type-or-namespace, nonclass, namespace_only */
6054 return lookup_name_real (name, 1, 1, 1);
6055}
6056
700f8a87
MS
6057tree
6058lookup_name (name, prefer_type)
6059 tree name;
6060 int prefer_type;
6061{
3e3f722c 6062 return lookup_name_real (name, prefer_type, 0, 0);
700f8a87
MS
6063}
6064
a7d2d407
MM
6065/* Similar to `lookup_name' but look only in the innermost non-class
6066 binding level. */
8d08fdba
MS
6067
6068tree
6069lookup_name_current_level (name)
6070 tree name;
6071{
a7d2d407
MM
6072 struct binding_level *b;
6073 tree t = NULL_TREE;
8d08fdba 6074
a7d2d407
MM
6075 b = current_binding_level;
6076 while (b->parm_flag == 2)
6077 b = b->level_chain;
6078
6079 if (b->namespace_p)
8d08fdba 6080 {
5fdaba89 6081 t = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
6082
6083 /* extern "C" function() */
6084 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
6085 t = TREE_VALUE (t);
6086 }
68642fb6 6087 else if (IDENTIFIER_BINDING (name)
f181d4ae 6088 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
8d08fdba 6089 {
a4443a08
MS
6090 while (1)
6091 {
f181d4ae
MM
6092 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6093 return IDENTIFIER_VALUE (name);
68642fb6 6094
9ed182dc
JM
6095 if (b->keep == 2)
6096 b = b->level_chain;
6097 else
6098 break;
6099 }
6100 }
6101
6102 return t;
6103}
6104
6105/* Like lookup_name_current_level, but for types. */
6106
6107tree
6108lookup_type_current_level (name)
6109 tree name;
6110{
6111 register tree t = NULL_TREE;
6112
6113 my_friendly_assert (! current_binding_level->namespace_p, 980716);
6114
6115 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6116 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6117 {
6118 struct binding_level *b = current_binding_level;
6119 while (1)
6120 {
6121 if (purpose_member (name, b->type_shadowed))
6122 return REAL_IDENTIFIER_TYPE_VALUE (name);
a4443a08
MS
6123 if (b->keep == 2)
6124 b = b->level_chain;
6125 else
6126 break;
6127 }
8d08fdba
MS
6128 }
6129
6130 return t;
6131}
3e3f722c
ML
6132
6133void
6134begin_only_namespace_names ()
6135{
6136 only_namespace_names = 1;
6137}
6138
6139void
6140end_only_namespace_names ()
6141{
6142 only_namespace_names = 0;
6143}
8d08fdba 6144\f
8d08fdba 6145/* Push the declarations of builtin types into the namespace.
0e5921e8 6146 RID_INDEX is the index of the builtin type
8d08fdba
MS
6147 in the array RID_POINTERS. NAME is the name used when looking
6148 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6149
6150static void
6151record_builtin_type (rid_index, name, type)
6152 enum rid rid_index;
d8e178a0 6153 const char *name;
8d08fdba
MS
6154 tree type;
6155{
6156 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 6157 tree tdecl = NULL_TREE;
8d08fdba 6158
0e5921e8 6159 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
6160 rname = ridpointers[(int) rid_index];
6161 if (name)
6162 tname = get_identifier (name);
6163
6164 TYPE_BUILT_IN (type) = 1;
68642fb6 6165
8d08fdba
MS
6166 if (tname)
6167 {
8d08fdba 6168 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
8d08fdba 6169 set_identifier_type_value (tname, NULL_TREE);
0e5921e8 6170 if ((int) rid_index < (int) RID_MAX)
2c73f9f5
ML
6171 /* Built-in types live in the global namespace. */
6172 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba
MS
6173 }
6174 if (rname != NULL_TREE)
6175 {
6176 if (tname != NULL_TREE)
6177 {
6178 set_identifier_type_value (rname, NULL_TREE);
2c73f9f5 6179 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba
MS
6180 }
6181 else
6182 {
8d08fdba 6183 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
8d08fdba
MS
6184 set_identifier_type_value (rname, NULL_TREE);
6185 }
6186 }
8d08fdba
MS
6187}
6188
eff71ab0 6189/* Record one of the standard Java types.
4d8a1dd6
MM
6190 * Declare it as having the given NAME.
6191 * If SIZE > 0, it is the size of one of the integral types;
6192 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
6193
6194static tree
6195record_builtin_java_type (name, size)
d8e178a0 6196 const char *name;
eff71ab0
PB
6197 int size;
6198{
6199 tree type, decl;
6200 if (size > 0)
6201 type = make_signed_type (size);
6202 else if (size > -32)
6203 { /* "__java_char" or ""__java_boolean". */
6204 type = make_unsigned_type (-size);
6205 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6206 }
6207 else
6208 { /* "__java_float" or ""__java_double". */
6209 type = make_node (REAL_TYPE);
6210 TYPE_PRECISION (type) = - size;
6211 layout_type (type);
6212 }
0e5921e8 6213 record_builtin_type (RID_MAX, name, type);
eff71ab0 6214 decl = TYPE_NAME (type);
e229f2cd
PB
6215
6216 /* Suppress generate debug symbol entries for these types,
6217 since for normal C++ they are just clutter.
6218 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 6219 DECL_IGNORED_P (decl) = 1;
e229f2cd 6220
eff71ab0
PB
6221 TYPE_FOR_JAVA (type) = 1;
6222 return type;
6223}
6224
036407f7
ML
6225/* Push a type into the namespace so that the back-ends ignore it. */
6226
6227static void
6228record_unknown_type (type, name)
6229 tree type;
d8e178a0 6230 const char *name;
036407f7
ML
6231{
6232 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6233 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6234 DECL_IGNORED_P (decl) = 1;
6235 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6236 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6237 TYPE_ALIGN (type) = 1;
11cf4d18 6238 TYPE_USER_ALIGN (type) = 0;
036407f7 6239 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 6240}
036407f7 6241
d43829f9
MM
6242/* An string for which we should create an IDENTIFIER_NODE at
6243 startup. */
6244
6245typedef struct predefined_identifier
6246{
6247 /* The name of the identifier. */
6248 const char *name;
6249 /* The place where the IDENTIFIER_NODE should be stored. */
6250 tree *node;
298d6f60
MM
6251 /* Non-zero if this is the name of a constructor or destructor. */
6252 int ctor_or_dtor_p;
d43829f9
MM
6253} predefined_identifier;
6254
6255/* Create all the predefined identifiers. */
6256
6257static void
5362b086 6258initialize_predefined_identifiers ()
d43829f9
MM
6259{
6260 struct predefined_identifier *pid;
6261
6262 /* A table of identifiers to create at startup. */
6263 static predefined_identifier predefined_identifiers[] = {
298d6f60
MM
6264 { "C++", &lang_name_cplusplus, 0 },
6265 { "C", &lang_name_c, 0 },
6266 { "Java", &lang_name_java, 0 },
6267 { CTOR_NAME, &ctor_identifier, 1 },
6268 { "__base_ctor", &base_ctor_identifier, 1 },
6269 { "__comp_ctor", &complete_ctor_identifier, 1 },
6270 { DTOR_NAME, &dtor_identifier, 1 },
6271 { "__comp_dtor", &complete_dtor_identifier, 1 },
6272 { "__base_dtor", &base_dtor_identifier, 1 },
6273 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6274 { VTABLE_DELTA2_NAME, &delta2_identifier, 0 },
6275 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6276 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6277 { VTABLE_INDEX_NAME, &index_identifier, 0 },
6278 { "nelts", &nelts_identifier, 0 },
6279 { THIS_NAME, &this_identifier, 0 },
6280 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6281 { "__pfn_or_delta2", &pfn_or_delta2_identifier, 0 },
6282 { "_vptr", &vptr_identifier, 0 },
6283 { "__cp_push_exception", &cp_push_exception_identifier, 0 },
3ec6bad3 6284 { "__vtt_parm", &vtt_parm_identifier, 0 },
1f6e1acc 6285 { "std", &std_identifier, 0 },
298d6f60 6286 { NULL, NULL, 0 }
d43829f9
MM
6287 };
6288
6289 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
6290 {
6291 *pid->node = get_identifier (pid->name);
6292 if (pid->ctor_or_dtor_p)
6293 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6294 }
d43829f9
MM
6295}
6296
8d08fdba
MS
6297/* Create the predefined scalar types of C,
6298 and some nodes representing standard constants (0, 1, (void *)0).
6299 Initialize the global binding level.
6300 Make definitions for built-in primitive functions. */
6301
6302void
6303init_decl_processing ()
6304{
8d08fdba 6305 tree fields[20];
8d08fdba 6306 int wchar_type_size;
8d08fdba
MS
6307 tree array_domain_type;
6308
5bb2a292
MM
6309 /* Check to see that the user did not specify an invalid combination
6310 of command-line options. */
6311 if (flag_new_abi && !flag_vtable_thunks)
6312 fatal ("the new ABI requires vtable thunks");
6313
d43829f9
MM
6314 /* Create all the identifiers we need. */
6315 initialize_predefined_identifiers ();
8d08fdba 6316
8f17b5c5 6317 /* Fill in back-end hooks. */
a8f73d4b
MM
6318 init_lang_status = &push_cp_function_context;
6319 free_lang_status = &pop_cp_function_context;
b4b8bee7 6320 mark_lang_status = &mark_cp_function_context;
8f17b5c5 6321 lang_safe_from_p = &c_safe_from_p;
0a7394bc 6322 lang_dump_tree = &cp_dump_tree;
99dccabc 6323
fc6af6e3
RH
6324 cp_parse_init ();
6325 init_decl2 ();
9cd64686 6326 init_pt ();
fc6af6e3 6327
9cd64686
MM
6328 /* Create the global variables. */
6329 push_to_top_level ();
8012c983 6330
2c73f9f5 6331 /* Enter the global namespace. */
30394414 6332 my_friendly_assert (global_namespace == NULL_TREE, 375);
30394414
JM
6333 push_namespace (get_identifier ("::"));
6334 global_namespace = current_namespace;
6335 current_lang_name = NULL_TREE;
6336
bccd95ae 6337 /* Adjust various flags based on command-line settings. */
2642b9bf
JM
6338 if (! flag_permissive && ! pedantic)
6339 flag_pedantic_errors = 1;
bccd95ae
MM
6340 if (!flag_no_inline)
6341 flag_inline_trees = 1;
830fcda8 6342
8d08fdba
MS
6343 /* Initially, C. */
6344 current_lang_name = lang_name_c;
6345
6346 current_function_decl = NULL_TREE;
8d08fdba
MS
6347 current_binding_level = NULL_BINDING_LEVEL;
6348 free_binding_level = NULL_BINDING_LEVEL;
6349
81b3411c
BS
6350 build_common_tree_nodes (flag_signed_char);
6351
8d08fdba
MS
6352 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6353 TREE_TYPE (error_mark_list) = error_mark_node;
6354
a28e3c7f
MS
6355 /* Make the binding_level structure for global names. */
6356 pushlevel (0);
8d08fdba 6357 global_binding_level = current_binding_level;
2c73f9f5
ML
6358 /* The global level is the namespace level of ::. */
6359 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6360 declare_namespace_level ();
8d08fdba 6361
6bcedb4e
MM
6362 /* Create the `std' namespace. */
6363 if (flag_honor_std)
6364 {
6365 push_namespace (std_identifier);
6366 std_node = current_namespace;
6367 pop_namespace ();
6368 fake_std_node = error_mark_node;
6369 }
6370 else
6371 {
6372 fake_std_node = build_decl (NAMESPACE_DECL,
6373 std_identifier,
6374 void_type_node);
6375 pushdecl (fake_std_node);
6376 }
5362b086 6377
8d08fdba 6378 /* Define `int' and `char' first so that dbx will output them first. */
8d08fdba 6379 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
8d08fdba
MS
6380 record_builtin_type (RID_CHAR, "char", char_type_node);
6381
45075bf3
NS
6382 /* `signed' is the same as `int' */
6383 record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
8d08fdba 6384 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
8d08fdba 6385 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
0e5921e8 6386 record_builtin_type (RID_MAX, "long unsigned int",
f09f1de5 6387 long_unsigned_type_node);
0e5921e8
ZW
6388 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6389 record_builtin_type (RID_MAX, "long long int",
f09f1de5 6390 long_long_integer_type_node);
0e5921e8 6391 record_builtin_type (RID_MAX, "long long unsigned int",
8d08fdba 6392 long_long_unsigned_type_node);
0e5921e8 6393 record_builtin_type (RID_MAX, "long long unsigned",
8d08fdba 6394 long_long_unsigned_type_node);
5156628f 6395 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
0e5921e8 6396 record_builtin_type (RID_MAX, "short unsigned int",
5362b086 6397 short_unsigned_type_node);
0e5921e8 6398 record_builtin_type (RID_MAX, "unsigned short",
f09f1de5 6399 short_unsigned_type_node);
5156628f 6400
8d08fdba
MS
6401 ptrdiff_type_node
6402 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
652469d0 6403 unsigned_ptrdiff_type_node = unsigned_type (ptrdiff_type_node);
8d08fdba 6404
8d08fdba 6405 /* Define both `signed char' and `unsigned char'. */
0e5921e8
ZW
6406 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6407 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
8d08fdba 6408
81b3411c
BS
6409 /* `unsigned long' is the standard type for sizeof.
6410 Note that stddef.h uses `unsigned long',
6411 and this must agree, even if long and int are the same size. */
652469d0
JM
6412 c_size_type_node =
6413 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE)));
6414 signed_size_type_node = signed_type (c_size_type_node);
6415 set_sizetype (c_size_type_node);
81b3411c 6416
835f9b4d
GRK
6417 /* Create the widest literal types. */
6418 widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
68642fb6 6419 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
835f9b4d
GRK
6420 widest_integer_literal_type_node));
6421
6422 widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
68642fb6 6423 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
835f9b4d
GRK
6424 widest_unsigned_literal_type_node));
6425
8d08fdba 6426 /* These are types that type_for_size and type_for_mode use. */
8d08fdba 6427 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
8d08fdba 6428 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
8d08fdba 6429 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
8d08fdba 6430 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
946dc1c8 6431#if HOST_BITS_PER_WIDE_INT >= 64
5ebcdddb 6432 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
946dc1c8 6433#endif
8d08fdba 6434 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
8d08fdba 6435 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
8d08fdba 6436 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
8d08fdba 6437 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
946dc1c8 6438#if HOST_BITS_PER_WIDE_INT >= 64
5ebcdddb 6439 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
946dc1c8 6440#endif
8d08fdba 6441
81b3411c 6442 build_common_tree_nodes_2 (flag_short_double);
37c46b43 6443
4d8a1dd6
MM
6444 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6445 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6446 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6447 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6448 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6449 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6450 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6451 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 6452
8d08fdba
MS
6453 integer_two_node = build_int_2 (2, 0);
6454 TREE_TYPE (integer_two_node) = integer_type_node;
6455 integer_three_node = build_int_2 (3, 0);
6456 TREE_TYPE (integer_three_node) = integer_type_node;
8d08fdba 6457
255512c1
JM
6458 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6459 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
c1ea6a0b
BK
6460 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6461 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6462 TYPE_PRECISION (boolean_type_node) = 1;
255512c1
JM
6463 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6464 boolean_false_node = build_int_2 (0, 0);
6465 TREE_TYPE (boolean_false_node) = boolean_type_node;
6466 boolean_true_node = build_int_2 (1, 0);
6467 TREE_TYPE (boolean_true_node) = boolean_type_node;
2986ae00 6468
ff0bee63
JM
6469 signed_size_zero_node = build_int_2 (0, 0);
6470 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
81b3411c 6471 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
0e5921e8 6472 record_builtin_type (RID_MAX, "long double", long_double_type_node);
81b3411c
BS
6473
6474 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6475 complex_integer_type_node));
6476 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6477 complex_float_type_node));
6478 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6479 complex_double_type_node));
6480 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6481 complex_long_double_type_node));
8d08fdba 6482
e92cc029
MS
6483 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6484
8d08fdba 6485 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
8d08fdba
MS
6486 void_list_node = build_tree_list (NULL_TREE, void_type_node);
6487 TREE_PARMLIST (void_list_node) = 1;
6488
8d08fdba 6489 string_type_node = build_pointer_type (char_type_node);
beb53fb8 6490 const_string_type_node
68642fb6 6491 = build_pointer_type (build_qualified_type (char_type_node,
91063b51 6492 TYPE_QUAL_CONST));
4cc1d462 6493 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6b5fbb55 6494#if 0
0e5921e8 6495 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6b5fbb55 6496#endif
8d08fdba
MS
6497
6498 /* Make a type to be the domain of a few array types
6499 whose domains don't really matter.
2ce07e2d 6500 200 is small enough that it always fits in size_t. */
8d08fdba
MS
6501 array_domain_type = build_index_type (build_int_2 (200, 0));
6502
2c73f9f5 6503 /* Make a type for arrays of characters.
8d08fdba
MS
6504 With luck nothing will ever really depend on the length of this
6505 array type. */
6506 char_array_type_node
6507 = build_array_type (char_type_node, array_domain_type);
3bdf5ad1 6508
8d08fdba
MS
6509 /* Likewise for arrays of ints. */
6510 int_array_type_node
6511 = build_array_type (integer_type_node, array_domain_type);
6512
c7e266a6
MM
6513 if (flag_new_abi)
6514 delta_type_node = ptrdiff_type_node;
6515 else if (flag_huge_objects)
7f4edbcb
BS
6516 delta_type_node = long_integer_type_node;
6517 else
6518 delta_type_node = short_integer_type_node;
6519
c7e266a6
MM
6520 if (flag_new_abi)
6521 vtable_index_type = ptrdiff_type_node;
6522 else
6523 vtable_index_type = delta_type_node;
6524
8d08fdba
MS
6525 default_function_type
6526 = build_function_type (integer_type_node, NULL_TREE);
8d08fdba
MS
6527
6528 ptr_type_node = build_pointer_type (void_type_node);
beb53fb8 6529 const_ptr_type_node
91063b51 6530 = build_pointer_type (build_qualified_type (void_type_node,
7f4edbcb 6531 TYPE_QUAL_CONST));
3ec6bad3 6532 vtt_parm_type = build_pointer_type (const_ptr_type_node);
6bcedb4e 6533 c_common_nodes_and_builtins ();
356955cf 6534 lang_type_promotes_to = convert_type_from_ellipsis;
7f4edbcb 6535
824b9a4c 6536 void_ftype_ptr
4cc1d462 6537 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 6538
3b9ae6f0
GK
6539#ifdef MD_INIT_BUILTINS
6540 MD_INIT_BUILTINS;
6541#endif
6542
8d08fdba
MS
6543 /* C++ extensions */
6544
6545 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
6546 record_unknown_type (unknown_type_node, "unknown type");
6547
8d08fdba
MS
6548 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6549 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 6550
03d0f4af 6551 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
a6967cc0
JM
6552
6553 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6554 result. */
8d08fdba
MS
6555 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6556 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6557
e92cc029 6558 /* This is special for C++ so functions can be overloaded. */
5096c664
JM
6559 wchar_type_node = get_identifier (flag_short_wchar
6560 ? "short unsigned int"
6561 : WCHAR_TYPE);
6562 wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
8d08fdba 6563 wchar_type_size = TYPE_PRECISION (wchar_type_node);
7b019c19
MM
6564 if (TREE_UNSIGNED (wchar_type_node))
6565 wchar_type_node = make_signed_type (wchar_type_size);
6566 else
6567 wchar_type_node = make_unsigned_type (wchar_type_size);
5362b086 6568 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
f376e137 6569
8d08fdba
MS
6570 /* This is for wide string constants. */
6571 wchar_array_type_node
6572 = build_array_type (wchar_type_node, array_domain_type);
6573
652469d0
JM
6574 wint_type_node =
6575 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WINT_TYPE)));
6576
b15ad712
JM
6577 intmax_type_node =
6578 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (INTMAX_TYPE)));
6579 uintmax_type_node =
6580 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (UINTMAX_TYPE)));
6581
8926095f 6582 if (flag_vtable_thunks)
700f8a87
MS
6583 {
6584 /* Make sure we get a unique function type, so we can give
6585 its pointer type a name. (This wins for gdb.) */
6586 tree vfunc_type = make_node (FUNCTION_TYPE);
6587 TREE_TYPE (vfunc_type) = integer_type_node;
6588 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6589 layout_type (vfunc_type);
6590
6591 vtable_entry_type = build_pointer_type (vfunc_type);
6592 }
8926095f 6593 else
700f8a87 6594 {
33848bb0 6595 vtable_entry_type = make_aggr_type (RECORD_TYPE);
721c3b42
MM
6596 fields[0] = build_decl (FIELD_DECL, delta_identifier,
6597 delta_type_node);
6598 fields[1] = build_decl (FIELD_DECL, index_identifier,
6599 delta_type_node);
6600 fields[2] = build_decl (FIELD_DECL, pfn_identifier,
6601 ptr_type_node);
700f8a87
MS
6602 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6603 double_type_node);
6604
6605 /* Make this part of an invisible union. */
6606 fields[3] = copy_node (fields[2]);
6607 TREE_TYPE (fields[3]) = delta_type_node;
6608 DECL_NAME (fields[3]) = delta2_identifier;
6609 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6610 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
06ceef4e 6611 DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
700f8a87
MS
6612 TREE_UNSIGNED (fields[3]) = 0;
6613 TREE_CHAIN (fields[2]) = fields[3];
91063b51
MM
6614 vtable_entry_type = build_qualified_type (vtable_entry_type,
6615 TYPE_QUAL_CONST);
700f8a87 6616 }
0e5921e8 6617 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 6618
8d08fdba 6619 vtbl_type_node
52bf7d5d 6620 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 6621 layout_type (vtbl_type_node);
91063b51 6622 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
0e5921e8 6623 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
849da744
MM
6624 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6625 layout_type (vtbl_ptr_type_node);
0e5921e8 6626 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
8d08fdba 6627
2854d3c6
NS
6628 if (flag_new_abi)
6629 {
6630 push_namespace (get_identifier ("__cxxabiv1"));
6631 abi_node = current_namespace;
6632 pop_namespace ();
6633 }
6633d636 6634
2c73f9f5 6635 global_type_node = make_node (LANG_TYPE);
036407f7 6636 record_unknown_type (global_type_node, "global type");
2c73f9f5 6637
db5ae43f
MS
6638 /* Now, C++. */
6639 current_lang_name = lang_name_cplusplus;
8d08fdba 6640
ced78d8b 6641 {
2c73f9f5
ML
6642 tree bad_alloc_type_node, newtype, deltype;
6643 if (flag_honor_std)
6bcedb4e 6644 push_namespace (std_identifier);
2c73f9f5 6645 bad_alloc_type_node = xref_tag
ca107ded 6646 (class_type_node, get_identifier ("bad_alloc"), 1);
2c73f9f5
ML
6647 if (flag_honor_std)
6648 pop_namespace ();
6649 newtype = build_exception_variant
4cc1d462
NS
6650 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6651 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
6652 push_cp_library_fn (NEW_EXPR, newtype);
6653 push_cp_library_fn (VEC_NEW_EXPR, newtype);
6654 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
6655 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 6656 }
8d08fdba
MS
6657
6658 abort_fndecl
0c11ada6 6659 = build_library_fn_ptr ("__pure_virtual", void_ftype);
8d08fdba 6660
8d08fdba
MS
6661 /* Perform other language dependent initializations. */
6662 init_class_processing ();
6663 init_init_processing ();
6664 init_search_processing ();
db48b831 6665 init_rtti_processing ();
8d08fdba 6666
6467930b 6667 if (flag_exceptions)
8d2733ca 6668 init_exception_processing ();
8d08fdba
MS
6669 if (flag_no_inline)
6670 {
6671 flag_inline_functions = 0;
8d08fdba 6672 }
9e9ff709 6673
7fcdf4c2 6674 if (! supports_one_only ())
72b7eeff 6675 flag_weak = 0;
8d08fdba
MS
6676
6677 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
63ad61ed
ZW
6678 function_id_node = get_identifier ("__FUNCTION__");
6679 pretty_function_id_node = get_identifier ("__PRETTY_FUNCTION__");
6680 func_id_node = get_identifier ("__func__");
6681
2ce07e2d 6682 make_fname_decl = cp_make_fname_decl;
8d08fdba
MS
6683 declare_function_name ();
6684
6685 /* Prepare to check format strings against argument lists. */
6686 init_function_format_info ();
e9a25f70
JL
6687
6688 /* Show we use EH for cleanups. */
6689 using_eh_for_cleanups ();
62c154ed 6690
e5dc5fb2 6691 valid_lang_attribute = cp_valid_lang_attribute;
d9cf7c82
JM
6692
6693 /* Maintain consistency. Perhaps we should just complain if they
6694 say -fwritable-strings? */
6695 if (flag_writable_strings)
6696 flag_const_strings = 0;
fc6af6e3
RH
6697
6698 /* Add GC roots for all of our global variables. */
6699 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6700 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
fc6af6e3
RH
6701 ggc_add_tree_root (&integer_three_node, 1);
6702 ggc_add_tree_root (&integer_two_node, 1);
fc6af6e3 6703 ggc_add_tree_root (&signed_size_zero_node, 1);
fc6af6e3
RH
6704 ggc_add_tree_root (&size_one_node, 1);
6705 ggc_add_tree_root (&size_zero_node, 1);
fc6af6e3
RH
6706 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6707 mark_binding_level);
9cd64686 6708 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
fc6af6e3
RH
6709 ggc_add_tree_root (&static_ctors, 1);
6710 ggc_add_tree_root (&static_dtors, 1);
9cd64686 6711 ggc_add_tree_root (&lastiddecl, 1);
fc6af6e3 6712
fc6af6e3
RH
6713 ggc_add_tree_root (&last_function_parm_tags, 1);
6714 ggc_add_tree_root (&current_function_return_value, 1);
fc6af6e3 6715 ggc_add_tree_root (&current_function_parm_tags, 1);
9cd64686 6716 ggc_add_tree_root (&last_function_parms, 1);
fc6af6e3 6717 ggc_add_tree_root (&error_mark_list, 1);
9cd64686 6718
fc6af6e3 6719 ggc_add_tree_root (&global_namespace, 1);
fc6af6e3
RH
6720 ggc_add_tree_root (&global_type_node, 1);
6721 ggc_add_tree_root (&anonymous_namespace_name, 1);
9cd64686
MM
6722
6723 ggc_add_tree_root (&got_object, 1);
6724 ggc_add_tree_root (&got_scope, 1);
6725
6726 ggc_add_tree_root (&current_lang_name, 1);
6727 ggc_add_tree_root (&static_aggregates, 1);
62c154ed
JM
6728}
6729
2ce07e2d
NS
6730/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6731 decl, NAME is the initialization string and TYPE_DEP indicates whether
6732 NAME depended on the type of the function. We make use of that to detect
6733 __PRETTY_FUNCTION__ inside a template fn. Because we build a tree for
6734 the function before emitting any of it, we don't need to treat the
6735 VAR_DECL specially. We can decide whether to emit it later, if it was
6736 used. */
6737
6738static tree
6739cp_make_fname_decl (id, name, type_dep)
6740 tree id;
6741 const char *name;
6742 int type_dep;
6743{
6744 tree decl, type, init;
6745 size_t length = strlen (name);
6746 tree domain = NULL_TREE;
5362b086 6747
2ce07e2d
NS
6748 if (!processing_template_decl)
6749 type_dep = 0;
6750 if (!type_dep)
6751 domain = build_index_type (build_int_2 (length, 0));
6752
6753 type = build_cplus_array_type
6754 (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
6755 domain);
6756
6dfbb909 6757 decl = build_decl (VAR_DECL, id, type);
2ce07e2d
NS
6758 TREE_STATIC (decl) = 1;
6759 TREE_READONLY (decl) = 1;
6760 DECL_SOURCE_LINE (decl) = 0;
6761 DECL_ARTIFICIAL (decl) = 1;
6762 DECL_IN_SYSTEM_HEADER (decl) = 1;
6763 pushdecl (decl);
6764 if (processing_template_decl)
6765 decl = push_template_decl (decl);
6766 if (type_dep)
6767 {
6768 init = build (FUNCTION_NAME, type);
6769 DECL_PRETTY_FUNCTION_P (decl) = 1;
6770 }
6771 else
6772 {
6773 init = build_string (length + 1, name);
6774 TREE_TYPE (init) = type;
6775 }
6776 DECL_INITIAL (decl) = init;
6777 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
5362b086 6778
2ce07e2d
NS
6779 /* We will have to make sure we only emit this, if it is actually used. */
6780 return decl;
6781}
6782
0c11ada6
JM
6783/* Entry point for the benefit of c_common_nodes_and_builtins.
6784
6785 Make a definition for a builtin function named NAME and whose data type
8d08fdba 6786 is TYPE. TYPE should be a function type with argument types.
8d08fdba 6787
0c11ada6
JM
6788 CLASS and CODE tell later passes how to compile calls to this function.
6789 See tree.h for possible values.
6790
6791 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
8d08fdba
MS
6792 the name to be called if we can't opencode the function. */
6793
6794tree
0c11ada6 6795builtin_function (name, type, code, class, libname)
d8e178a0 6796 const char *name;
8d08fdba 6797 tree type;
0c11ada6
JM
6798 int code;
6799 enum built_in_class class;
6800 const char *libname;
8d08fdba 6801{
596ea4e5 6802 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6803 DECL_BUILT_IN_CLASS (decl) = class;
6804 DECL_FUNCTION_CODE (decl) = code;
12a22e76 6805
2c73f9f5 6806 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
2c73f9f5 6807
6bcedb4e
MM
6808 /* All builtins that don't begin with an `_' should go in the `std'
6809 namespace. */
5362b086 6810 if (flag_honor_std && name[0] != '_')
6bcedb4e
MM
6811 {
6812 push_namespace (std_identifier);
6813 DECL_CONTEXT (decl) = std_node;
6814 }
6815 pushdecl (decl);
6816 if (flag_honor_std && name[0] != '_')
6817 pop_namespace ();
6818
8d08fdba
MS
6819 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6820 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6821 function in the namespace. */
0c11ada6
JM
6822 if (libname)
6823 DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
8d08fdba 6824 make_function_rtl (decl);
935d1834
ZW
6825
6826 /* Warn if a function in the namespace for users
6827 is used without an occasion to consider it declared. */
6828 if (name[0] != '_' || name[1] != '_')
6829 DECL_ANTICIPATED (decl) = 1;
6830
8d08fdba
MS
6831 return decl;
6832}
7f4edbcb 6833
0c11ada6
JM
6834/* Generate a FUNCTION_DECL with the typical flags for a runtime library
6835 function. Not called directly. */
6836
6837static tree
596ea4e5 6838build_library_fn_1 (name, operator_code, type)
0c11ada6 6839 tree name;
596ea4e5 6840 enum tree_code operator_code;
0c11ada6
JM
6841 tree type;
6842{
6843 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6844 DECL_EXTERNAL (fn) = 1;
6845 TREE_PUBLIC (fn) = 1;
6846 DECL_ARTIFICIAL (fn) = 1;
6847 TREE_NOTHROW (fn) = 1;
596ea4e5 6848 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
0c11ada6
JM
6849 return fn;
6850}
c2a37c55 6851
0c11ada6
JM
6852/* Returns the _DECL for a library function with C linkage.
6853 We assume that such functions never throw; if this is incorrect,
6854 callers should unset TREE_NOTHROW. */
c2a37c55 6855
7f4edbcb 6856tree
0c11ada6
JM
6857build_library_fn (name, type)
6858 tree name;
6859 tree type;
6860{
596ea4e5 6861 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
0c11ada6
JM
6862 make_function_rtl (fn);
6863 return fn;
6864}
6865
6866/* Returns the _DECL for a library function with C++ linkage. */
6867
596ea4e5
AS
6868static tree
6869build_cp_library_fn (name, operator_code, type)
0c11ada6 6870 tree name;
596ea4e5 6871 enum tree_code operator_code;
0c11ada6
JM
6872 tree type;
6873{
596ea4e5 6874 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 6875 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 6876 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
0c11ada6
JM
6877 set_mangled_name_for_decl (fn);
6878 make_function_rtl (fn);
6879 return fn;
6880}
6881
6882/* Like build_library_fn, but takes a C string instead of an
6883 IDENTIFIER_NODE. */
6884
6885tree
6886build_library_fn_ptr (name, type)
7f4edbcb
BS
6887 const char *name;
6888 tree type;
7f4edbcb 6889{
0c11ada6
JM
6890 return build_library_fn (get_identifier (name), type);
6891}
6892
6893/* Like build_cp_library_fn, but takes a C string instead of an
6894 IDENTIFIER_NODE. */
6895
6896tree
6897build_cp_library_fn_ptr (name, type)
6898 const char *name;
6899 tree type;
6900{
596ea4e5 6901 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6902}
6903
6904/* Like build_library_fn, but also pushes the function so that we will
6905 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
6906
6907tree
6908push_library_fn (name, type)
6909 tree name, type;
6910{
6911 tree fn = build_library_fn (name, type);
6912 pushdecl_top_level (fn);
6913 return fn;
6914}
6915
6916/* Like build_cp_library_fn, but also pushes the function so that it
6917 will be found by normal lookup. */
6918
596ea4e5
AS
6919static tree
6920push_cp_library_fn (operator_code, type)
6921 enum tree_code operator_code;
0c11ada6
JM
6922 tree type;
6923{
5362b086 6924 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
6925 operator_code,
6926 type);
0c11ada6
JM
6927 pushdecl (fn);
6928 return fn;
6929}
6930
6931/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6932 a FUNCTION_TYPE. */
6933
6934tree
6935push_void_library_fn (name, parmtypes)
6936 tree name, parmtypes;
6937{
6938 tree type = build_function_type (void_type_node, parmtypes);
6939 return push_library_fn (name, type);
6940}
6941
cf74fb86 6942/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
6943 and does not return. Used for __throw_foo and the like. */
6944
6945tree
cf74fb86
JM
6946push_throw_library_fn (name, type)
6947 tree name, type;
0c11ada6 6948{
cf74fb86 6949 tree fn = push_library_fn (name, type);
0c11ada6
JM
6950 TREE_THIS_VOLATILE (fn) = 1;
6951 TREE_NOTHROW (fn) = 0;
6952 return fn;
7f4edbcb 6953}
8d08fdba 6954\f
61a127b3
MM
6955/* When we call finish_struct for an anonymous union, we create
6956 default copy constructors and such. But, an anonymous union
6957 shouldn't have such things; this function undoes the damage to the
6958 anonymous union type T.
6959
6960 (The reason that we create the synthesized methods is that we don't
6961 distinguish `union { int i; }' from `typedef union { int i; } U'.
6962 The first is an anonymous union; the second is just an ordinary
6963 union type.) */
6964
6965void
6bdb8141 6966fixup_anonymous_aggr (t)
61a127b3
MM
6967 tree t;
6968{
6969 tree *q;
6970
6971 /* Wipe out memory of synthesized methods */
6972 TYPE_HAS_CONSTRUCTOR (t) = 0;
6973 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6974 TYPE_HAS_INIT_REF (t) = 0;
6975 TYPE_HAS_CONST_INIT_REF (t) = 0;
6976 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
6977 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6978
6979 /* Splice the implicitly generated functions out of the TYPE_METHODS
6980 list. */
6981 q = &TYPE_METHODS (t);
6982 while (*q)
6983 {
6984 if (DECL_ARTIFICIAL (*q))
6985 *q = TREE_CHAIN (*q);
6986 else
6987 q = &TREE_CHAIN (*q);
6988 }
6989
cab1f180 6990 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3
MM
6991 if (TYPE_METHODS (t))
6992 error ("an anonymous union cannot have function members");
6993}
6994
72a93143
JM
6995/* Make sure that a declaration with no declarator is well-formed, i.e.
6996 just defines a tagged type or anonymous union.
8d08fdba 6997
72a93143 6998 Returns the type defined, if any. */
8d08fdba 6999
72a93143
JM
7000tree
7001check_tag_decl (declspecs)
8d08fdba
MS
7002 tree declspecs;
7003{
72a93143 7004 int found_type = 0;
2bdb0643 7005 int saw_friend = 0;
2986ae00 7006 tree ob_modifier = NULL_TREE;
8d08fdba 7007 register tree link;
8d08fdba
MS
7008 register tree t = NULL_TREE;
7009
7010 for (link = declspecs; link; link = TREE_CHAIN (link))
7011 {
7012 register tree value = TREE_VALUE (link);
7013
2bdb0643
JM
7014 if (TYPE_P (value)
7015 || (TREE_CODE (value) == IDENTIFIER_NODE
7016 && IDENTIFIER_GLOBAL_VALUE (value)
7017 && TYPE_P (IDENTIFIER_GLOBAL_VALUE (value))))
8d08fdba 7018 {
72a93143 7019 ++found_type;
5566b478 7020
73ae5c34
NS
7021 if ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
7022 || TREE_CODE (value) == ENUMERAL_TYPE)
72a93143
JM
7023 {
7024 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
7025 t = value;
7026 }
8d08fdba 7027 }
83f660b7
JM
7028 else if (value == ridpointers[(int) RID_FRIEND])
7029 {
83f660b7
JM
7030 if (current_class_type == NULL_TREE
7031 || current_scope () != current_class_type)
7032 ob_modifier = value;
2bdb0643
JM
7033 else
7034 saw_friend = 1;
83f660b7 7035 }
8d08fdba 7036 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
7037 || value == ridpointers[(int) RID_EXTERN]
7038 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
7039 || value == ridpointers[(int) RID_REGISTER]
7040 || value == ridpointers[(int) RID_INLINE]
7041 || value == ridpointers[(int) RID_VIRTUAL]
72a93143
JM
7042 || value == ridpointers[(int) RID_CONST]
7043 || value == ridpointers[(int) RID_VOLATILE]
28cbf42c 7044 || value == ridpointers[(int) RID_EXPLICIT])
2986ae00 7045 ob_modifier = value;
8d08fdba
MS
7046 }
7047
72a93143
JM
7048 if (found_type > 1)
7049 error ("multiple types in one declaration");
7e2067ca 7050
2bdb0643 7051 if (t == NULL_TREE && ! saw_friend)
7e2067ca 7052 pedwarn ("declaration does not declare anything");
0dd3962d
JM
7053
7054 /* Check for an anonymous union. We're careful
7055 accessing TYPE_IDENTIFIER because some built-in types, like
7056 pointer-to-member types, do not have TYPE_NAME. */
6bdb8141 7057 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
0dd3962d
JM
7058 && TYPE_NAME (t)
7059 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
7060 {
7061 /* Anonymous unions are objects, so they can have specifiers. */;
6bdb8141
JM
7062 SET_ANON_AGGR_TYPE_P (t);
7063
7064 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
7065 pedwarn ("ISO C++ prohibits anonymous structs");
0dd3962d
JM
7066 }
7067
83f660b7 7068 else if (ob_modifier)
8d08fdba 7069 {
83f660b7
JM
7070 if (ob_modifier == ridpointers[(int) RID_INLINE]
7071 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
7072 cp_error ("`%D' can only be specified for functions", ob_modifier);
7073 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
7074 cp_error ("`%D' can only be specified inside a class", ob_modifier);
7075 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
7076 cp_error ("`%D' can only be specified for constructors",
7077 ob_modifier);
7078 else
7079 cp_error ("`%D' can only be specified for objects and functions",
7080 ob_modifier);
72a93143 7081 }
8d08fdba 7082
72a93143
JM
7083 return t;
7084}
7085
7086/* Called when a declaration is seen that contains no names to declare.
7087 If its type is a reference to a structure, union or enum inherited
7088 from a containing scope, shadow that tag name for the current scope
7089 with a forward reference.
7090 If its type defines a new named structure or union
7091 or defines an enum, it is valid but we need not do anything here.
7092 Otherwise, it is an error.
7093
7094 C++: may have to grok the declspecs to learn about static,
7095 complain for anonymous unions. */
7096
7097void
7098shadow_tag (declspecs)
7099 tree declspecs;
7100{
7101 tree t = check_tag_decl (declspecs);
7102
7103 if (t)
7104 maybe_process_partial_specialization (t);
7105
7106 /* This is where the variables in an anonymous union are
7107 declared. An anonymous union declaration looks like:
7108 union { ... } ;
7109 because there is no declarator after the union, the parser
7110 sends that declaration here. */
6bdb8141 7111 if (t && ANON_AGGR_TYPE_P (t))
72a93143 7112 {
6bdb8141 7113 fixup_anonymous_aggr (t);
72a93143
JM
7114
7115 if (TYPE_FIELDS (t))
7116 {
7117 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
7118 NULL_TREE);
7119 finish_anon_union (decl);
7120 }
8d08fdba
MS
7121 }
7122}
7123\f
7124/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
7125
7126tree
7127groktypename (typename)
7128 tree typename;
7129{
7130 if (TREE_CODE (typename) != TREE_LIST)
7131 return typename;
7132 return grokdeclarator (TREE_VALUE (typename),
7133 TREE_PURPOSE (typename),
c11b6f21 7134 TYPENAME, 0, NULL_TREE);
8d08fdba
MS
7135}
7136
7137/* Decode a declarator in an ordinary declaration or data definition.
7138 This is called as soon as the type information and variable name
7139 have been parsed, before parsing the initializer if any.
7140 Here we create the ..._DECL node, fill in its type,
7141 and put it on the list of decls for the current context.
7142 The ..._DECL node is returned as the value.
7143
7144 Exception: for arrays where the length is not specified,
82580166 7145 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
7146
7147 Function definitions do not come here; they go to start_function
7148 instead. However, external and forward declarations of functions
7149 do go through here. Structure field declarations are done by
7150 grokfield and not through here. */
7151
8d08fdba 7152tree
a1774733 7153start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
8d08fdba
MS
7154 tree declarator, declspecs;
7155 int initialized;
a1774733 7156 tree attributes, prefix_attributes;
8d08fdba
MS
7157{
7158 register tree decl;
7159 register tree type, tem;
7160 tree context;
7161 extern int have_extern_spec;
7162 extern int used_extern_spec;
b17e2870 7163 tree attrlist;
8d08fdba 7164
5566b478
MS
7165#if 0
7166 /* See code below that used this. */
8d08fdba 7167 int init_written = initialized;
5566b478 7168#endif
8d08fdba 7169
e92cc029 7170 /* This should only be done once on the top most decl. */
8d08fdba
MS
7171 if (have_extern_spec && !used_extern_spec)
7172 {
1f8f4a0b
MM
7173 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"),
7174 declspecs);
8d08fdba
MS
7175 used_extern_spec = 1;
7176 }
7177
b17e2870 7178 if (attributes || prefix_attributes)
051e6fd7 7179 attrlist = build_tree_list (attributes, prefix_attributes);
b17e2870
JM
7180 else
7181 attrlist = NULL_TREE;
7182
c11b6f21 7183 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
b17e2870 7184 attrlist);
68642fb6 7185
a1774733 7186 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
7187 return NULL_TREE;
7188
7189 type = TREE_TYPE (decl);
7190
44689c12
ML
7191 if (type == error_mark_node)
7192 return NULL_TREE;
7193
4f1c5b7d 7194 context = DECL_CONTEXT (decl);
8d08fdba 7195
9a68c51f
JM
7196 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7197 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7198 {
7199 /* When parsing the initializer, lookup should use the object's
7200 namespace. */
7201 push_decl_namespace (context);
7202 }
7203
2c73f9f5
ML
7204 /* We are only interested in class contexts, later. */
7205 if (context && TREE_CODE (context) == NAMESPACE_DECL)
7206 context = NULL_TREE;
7207
8d08fdba
MS
7208 if (initialized)
7209 /* Is it valid for this decl to have an initializer at all?
7210 If not, set INITIALIZED to zero, which will indirectly
82580166 7211 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
7212 switch (TREE_CODE (decl))
7213 {
7214 case TYPE_DECL:
7215 /* typedef foo = bar means give foo the same type as bar.
82580166 7216 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
8d08fdba
MS
7217 Any other case of an initialization in a TYPE_DECL is an error. */
7218 if (pedantic || list_length (declspecs) > 1)
7219 {
8251199e 7220 cp_error ("typedef `%D' is initialized", decl);
8d08fdba
MS
7221 initialized = 0;
7222 }
7223 break;
7224
7225 case FUNCTION_DECL:
8251199e 7226 cp_error ("function `%#D' is initialized like a variable", decl);
8d08fdba
MS
7227 initialized = 0;
7228 break;
7229
7230 default:
3e41d13b 7231 break;
8d08fdba
MS
7232 }
7233
8d08fdba
MS
7234 if (initialized)
7235 {
a9aedbc2 7236 if (! toplevel_bindings_p ()
8d08fdba 7237 && DECL_EXTERNAL (decl))
8251199e 7238 cp_warning ("declaration of `%#D' has `extern' and is initialized",
8d08fdba
MS
7239 decl);
7240 DECL_EXTERNAL (decl) = 0;
5566b478 7241 if (toplevel_bindings_p ())
8d08fdba
MS
7242 TREE_STATIC (decl) = 1;
7243
7244 /* Tell `pushdecl' this is an initialized decl
7245 even though we don't yet have the initializer expression.
82580166 7246 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
7247 DECL_INITIAL (decl) = error_mark_node;
7248 }
7249
fa20888b
MK
7250#ifdef SET_DEFAULT_DECL_ATTRIBUTES
7251 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7252#endif
68642fb6 7253
fa20888b
MK
7254 /* Set attributes here so if duplicate decl, will have proper attributes. */
7255 cplus_decl_attributes (decl, attributes, prefix_attributes);
7256
d0f062fb 7257 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68 7258 {
6b400b21 7259 push_nested_class (context, 2);
e97e5263 7260
5b605f68
MS
7261 if (TREE_CODE (decl) == VAR_DECL)
7262 {
7263 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7264 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
8251199e 7265 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
e349ee73
MS
7266 else
7267 {
7268 if (DECL_CONTEXT (field) != context)
f2d773a2 7269 {
cb9a3ff8 7270 cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
f2d773a2
JM
7271 DECL_CONTEXT (field), DECL_NAME (decl),
7272 context, DECL_NAME (decl));
7273 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7274 }
75650646
MM
7275 /* Static data member are tricky; an in-class initialization
7276 still doesn't provide a definition, so the in-class
7277 declaration will have DECL_EXTERNAL set, but will have an
7278 initialization. Thus, duplicate_decls won't warn
7279 about this situation, and so we check here. */
7280 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
8251199e 7281 cp_error ("duplicate initialization of %D", decl);
e349ee73
MS
7282 if (duplicate_decls (decl, field))
7283 decl = field;
7284 }
5b605f68 7285 }
f30432d7
MS
7286 else
7287 {
5566b478 7288 tree field = check_classfn (context, decl);
f30432d7
MS
7289 if (field && duplicate_decls (decl, field))
7290 decl = field;
7291 }
7292
7293 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 7294 DECL_IN_AGGR_P (decl) = 0;
68642fb6 7295 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
1f6e1acc 7296 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
84e6233f
JM
7297 {
7298 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7299 /* [temp.expl.spec] An explicit specialization of a static data
7300 member of a template is a definition if the declaration
7301 includes an initializer; otherwise, it is a declaration.
7302
7303 We check for processing_specialization so this only applies
7304 to the new specialization syntax. */
7305 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7306 DECL_EXTERNAL (decl) = 1;
7307 }
f30432d7 7308
b7698cf0 7309 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
8251199e 7310 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
f30432d7 7311 decl);
5b605f68
MS
7312 }
7313
9188c363
MM
7314 /* Enter this declaration into the symbol table. */
7315 tem = maybe_push_decl (decl);
2ee887f2 7316
5156628f 7317 if (processing_template_decl)
cd9f6678 7318 tem = push_template_decl (tem);
5566b478 7319
2ee887f2 7320#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 7321 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
7322 -fconserve-space, we want this to save .data space, at the expense of
7323 wrong semantics. If we say -fno-conserve-space, we want this to
7324 produce errors about redefs; to do this we force variables into the
7325 data segment. */
a3203465 7326 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
2ee887f2 7327#endif
68642fb6 7328
5156628f 7329 if (! processing_template_decl)
5566b478 7330 start_decl_1 (tem);
8d08fdba 7331
8d08fdba
MS
7332 return tem;
7333}
7334
5566b478
MS
7335void
7336start_decl_1 (decl)
7337 tree decl;
8d08fdba 7338{
5566b478
MS
7339 tree type = TREE_TYPE (decl);
7340 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 7341
44689c12
ML
7342 if (type == error_mark_node)
7343 return;
7344
8f471b0d
MM
7345 /* If this type of object needs a cleanup, but we're not allowed to
7346 add any more objects with cleanups to the current scope, create a
7347 new binding level. */
834c6dff 7348 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5566b478 7349 && current_binding_level->more_cleanups_ok == 0)
8f471b0d
MM
7350 {
7351 keep_next_level (2);
7352 pushlevel (1);
7353 clear_last_expr ();
7354 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
7355 }
5566b478
MS
7356
7357 if (initialized)
7358 /* Is it valid for this decl to have an initializer at all?
7359 If not, set INITIALIZED to zero, which will indirectly
7360 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba 7361 {
5566b478
MS
7362 /* Don't allow initializations for incomplete types except for
7363 arrays which might be completed by the initialization. */
d0f062fb 7364 if (COMPLETE_TYPE_P (complete_type (type)))
5566b478
MS
7365 ; /* A complete type is ok. */
7366 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 7367 {
8251199e 7368 cp_error ("variable `%#D' has initializer but incomplete type",
5566b478
MS
7369 decl);
7370 initialized = 0;
25eb19ff 7371 type = TREE_TYPE (decl) = error_mark_node;
5566b478 7372 }
d0f062fb 7373 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
7374 {
7375 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
8251199e 7376 cp_error ("elements of array `%#D' have incomplete type", decl);
5566b478
MS
7377 /* else we already gave an error in start_decl. */
7378 initialized = 0;
8d08fdba 7379 }
8d08fdba
MS
7380 }
7381
5566b478
MS
7382 if (!initialized
7383 && TREE_CODE (decl) != TYPE_DECL
7384 && TREE_CODE (decl) != TEMPLATE_DECL
07c88314 7385 && type != error_mark_node
5362b086 7386 && IS_AGGR_TYPE (type)
07c88314 7387 && ! DECL_EXTERNAL (decl))
8d08fdba 7388 {
5156628f 7389 if ((! processing_template_decl || ! uses_template_parms (type))
d0f062fb 7390 && !COMPLETE_TYPE_P (complete_type (type)))
5566b478 7391 {
8251199e 7392 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
5566b478
MS
7393 decl);
7394 /* Change the type so that assemble_variable will give
7395 DECL an rtl we can live with: (mem (const_int 0)). */
25eb19ff 7396 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
7397 }
7398 else
7399 {
7400 /* If any base type in the hierarchy of TYPE needs a constructor,
7401 then we set initialized to 1. This way any nodes which are
7402 created for the purposes of initializing this aggregate
7403 will live as long as it does. This is necessary for global
7404 aggregates which do not have their initializers processed until
7405 the end of the file. */
7406 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7407 }
7408 }
7409
5566b478
MS
7410 if (! initialized)
7411 DECL_INITIAL (decl) = NULL_TREE;
7412}
7413
7414/* Handle initialization of references.
38e01259 7415 These three arguments are from `cp_finish_decl', and have the
e92cc029
MS
7416 same meaning here that they do there.
7417
7418 Quotes on semantics can be found in ARM 8.4.3. */
7419
5566b478 7420static void
a703fb38 7421grok_reference_init (decl, type, init)
5566b478 7422 tree decl, type, init;
5566b478
MS
7423{
7424 tree tmp;
7425
7426 if (init == NULL_TREE)
7427 {
7428 if ((DECL_LANG_SPECIFIC (decl) == 0
7429 || DECL_IN_AGGR_P (decl) == 0)
7430 && ! DECL_THIS_EXTERN (decl))
ed5511d9 7431 cp_error ("`%D' declared as reference but not initialized", decl);
5566b478
MS
7432 return;
7433 }
7434
7435 if (init == error_mark_node)
7436 return;
7437
ed5511d9 7438 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 7439 {
cb9a3ff8 7440 cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
8d08fdba
MS
7441 return;
7442 }
7443
7444 if (TREE_CODE (init) == TREE_LIST)
7445 init = build_compound_expr (init);
8d08fdba 7446
8ccc31eb
MS
7447 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7448 init = convert_from_reference (init);
7449
8d08fdba
MS
7450 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7451 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7452 {
a3203465 7453 /* Note: default conversion is only called in very special cases. */
8d08fdba
MS
7454 init = default_conversion (init);
7455 }
68642fb6 7456
24bef158
MM
7457 /* Convert INIT to the reference type TYPE. This may involve the
7458 creation of a temporary, whose lifetime must be the same as that
7459 of the reference. If so, a DECL_STMT for the temporary will be
7460 added just after the DECL_STMT for DECL. That's why we don't set
7461 DECL_INITIAL for local references (instead assigning to them
7462 explicitly); we need to allow the temporary to be initialized
7463 first. */
a3203465 7464 tmp = convert_to_reference
9a3b49ac 7465 (type, init, CONV_IMPLICIT,
ce7715bd
JM
7466 LOOKUP_ONLYCONVERTING|LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND,
7467 decl);
8d08fdba 7468
a3203465 7469 if (tmp == error_mark_node)
ed5511d9 7470 return;
a3203465 7471 else if (tmp != NULL_TREE)
8d08fdba 7472 {
a3203465 7473 init = tmp;
24bef158
MM
7474 tmp = save_expr (tmp);
7475 if (building_stmt_tree ())
7476 {
7477 /* Initialize the declaration. */
7478 tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
24bef158
MM
7479 finish_expr_stmt (tmp);
7480 }
7481 else
7482 DECL_INITIAL (decl) = tmp;
8d08fdba 7483 }
a3203465 7484 else
8d08fdba 7485 {
8251199e 7486 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
ed5511d9 7487 return;
8d08fdba 7488 }
8d08fdba 7489
8d08fdba
MS
7490 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7491 {
7492 expand_static_init (decl, DECL_INITIAL (decl));
7493 DECL_INITIAL (decl) = NULL_TREE;
7494 }
7495 return;
8d08fdba
MS
7496}
7497
6060a796
MS
7498/* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7499 mucking with forces it does not comprehend (i.e. initialization with a
7500 constructor). If we are at global scope and won't go into COMMON, fill
7501 it in with a dummy CONSTRUCTOR to force the variable into .data;
7502 otherwise we can use error_mark_node. */
7503
28cbf42c
MS
7504static tree
7505obscure_complex_init (decl, init)
7506 tree decl, init;
6060a796 7507{
28cbf42c
MS
7508 if (! flag_no_inline && TREE_STATIC (decl))
7509 {
7510 if (extract_init (decl, init))
7511 return NULL_TREE;
7512 }
7513
2ee887f2 7514#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a9aedbc2 7515 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6060a796
MS
7516 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7517 NULL_TREE);
7518 else
2ee887f2 7519#endif
6060a796 7520 DECL_INITIAL (decl) = error_mark_node;
28cbf42c
MS
7521
7522 return init;
6060a796
MS
7523}
7524
27778b73
MM
7525/* When parsing `int a[] = {1, 2};' we don't know the size of the
7526 array until we finish parsing the initializer. If that's the
7527 situation we're in, update DECL accordingly. */
7528
7529static void
7530maybe_deduce_size_from_array_init (decl, init)
7531 tree decl;
7532 tree init;
7533{
7534 tree type = TREE_TYPE (decl);
7535
7536 if (TREE_CODE (type) == ARRAY_TYPE
7537 && TYPE_DOMAIN (type) == NULL_TREE
7538 && TREE_CODE (decl) != TYPE_DECL)
7539 {
f2ae0c45
JM
7540 /* do_default is really a C-ism to deal with tentative definitions.
7541 But let's leave it here to ease the eventual merge. */
7542 int do_default = !DECL_EXTERNAL (decl);
27778b73
MM
7543 tree initializer = init ? init : DECL_INITIAL (decl);
7544 int failure = complete_array_type (type, initializer, do_default);
7545
7546 if (failure == 1)
7547 cp_error ("initializer fails to determine size of `%D'", decl);
7548
7549 if (failure == 2)
7550 {
7551 if (do_default)
7552 cp_error ("array size missing in `%D'", decl);
7553 /* If a `static' var's size isn't known, make it extern as
7554 well as static, so it does not get allocated. If it's not
7555 `static', then don't mark it extern; finish_incomplete_decl
7556 will give it a default size and it will get allocated. */
7557 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7558 DECL_EXTERNAL (decl) = 1;
7559 }
7560
7561 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7562 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7563 integer_zero_node))
7564 cp_error ("zero-size array `%D'", decl);
7565
7566 layout_decl (decl, 0);
7567 }
7568}
7569
7570/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 7571 any appropriate error messages regarding the layout. */
27778b73 7572
57b52417
MM
7573static void
7574layout_var_decl (decl)
27778b73 7575 tree decl;
27778b73 7576{
57b52417 7577 tree type = TREE_TYPE (decl);
c95cd22e 7578#if 0
57b52417 7579 tree ttype = target_type (type);
c95cd22e 7580#endif
57b52417
MM
7581
7582 /* If we haven't already layed out this declaration, do so now.
7583 Note that we must not call complete type for an external object
7584 because it's type might involve templates that we are not
68642fb6 7585 supposed to isntantiate yet. (And it's perfectly legal to say
57b52417
MM
7586 `extern X x' for some incomplete type `X'.) */
7587 if (!DECL_EXTERNAL (decl))
7588 complete_type (type);
d0f062fb 7589 if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
27778b73
MM
7590 layout_decl (decl, 0);
7591
c82dbd95 7592 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
7593 {
7594 /* An automatic variable with an incomplete type: that is an error.
7595 Don't talk about array types here, since we took care of that
7596 message in grokdeclarator. */
7597 cp_error ("storage size of `%D' isn't known", decl);
7598 TREE_TYPE (decl) = error_mark_node;
7599 }
ae673f14
JM
7600#if 0
7601 /* Keep this code around in case we later want to control debug info
7602 based on whether a type is "used". (jason 1999-11-11) */
7603
27778b73
MM
7604 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7605 /* Let debugger know it should output info for this type. */
7606 note_debug_info_needed (ttype);
7607
7608 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7609 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 7610#endif
27778b73
MM
7611
7612 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7613 && DECL_SIZE (decl) != NULL_TREE
7614 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7615 {
7616 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7617 constant_expression_warning (DECL_SIZE (decl));
7618 else
7619 cp_error ("storage size of `%D' isn't constant", decl);
7620 }
7621}
7622
27778b73
MM
7623/* If a local static variable is declared in an inline function, or if
7624 we have a weak definition, we must endeavor to create only one
7625 instance of the variable at link-time. */
7626
7627static void
7628maybe_commonize_var (decl)
7629 tree decl;
7630{
7631 /* Static data in a function with comdat linkage also has comdat
7632 linkage. */
7633 if (TREE_STATIC (decl)
7634 /* Don't mess with __FUNCTION__. */
cf74fb86 7635 && ! DECL_ARTIFICIAL (decl)
27778b73
MM
7636 && current_function_decl
7637 && DECL_CONTEXT (decl) == current_function_decl
7638 && (DECL_THIS_INLINE (current_function_decl)
7639 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7640 && TREE_PUBLIC (current_function_decl))
7641 {
7642 /* Rather than try to get this right with inlining, we suppress
7643 inlining of such functions. */
7644 current_function_cannot_inline
7645 = "function with static variable cannot be inline";
492cca24 7646 DECL_UNINLINABLE (current_function_decl) = 1;
27778b73
MM
7647
7648 /* If flag_weak, we don't need to mess with this, as we can just
7649 make the function weak, and let it refer to its unique local
7650 copy. This works because we don't allow the function to be
7651 inlined. */
7652 if (! flag_weak)
7653 {
7654 if (DECL_INTERFACE_KNOWN (current_function_decl))
7655 {
7656 TREE_PUBLIC (decl) = 1;
7657 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7658 }
7659 else if (DECL_INITIAL (decl) == NULL_TREE
7660 || DECL_INITIAL (decl) == error_mark_node)
7661 {
7662 TREE_PUBLIC (decl) = 1;
7663 DECL_COMMON (decl) = 1;
7664 }
7665 /* else we lose. We can only do this if we can use common,
7666 which we can't if it has been initialized. */
7667
7668 if (TREE_PUBLIC (decl))
669ec2b4
JM
7669 DECL_ASSEMBLER_NAME (decl)
7670 = build_static_name (current_function_decl, DECL_NAME (decl));
cf74fb86 7671 else
27778b73
MM
7672 {
7673 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7674 cp_warning_at (" you can work around this by removing the initializer", decl);
7675 }
7676 }
7677 }
7678 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7679 /* Set it up again; we might have set DECL_INITIAL since the last
7680 time. */
7681 comdat_linkage (decl);
7682}
7683
91063b51
MM
7684/* Issue an error message if DECL is an uninitialized const variable. */
7685
7686static void
7687check_for_uninitialized_const_var (decl)
7688 tree decl;
7689{
7690 tree type = TREE_TYPE (decl);
7691
7692 /* ``Unless explicitly declared extern, a const object does not have
7693 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7694 7.1.6 */
7695 if (TREE_CODE (decl) == VAR_DECL
7696 && TREE_CODE (type) != REFERENCE_TYPE
7697 && CP_TYPE_CONST_P (type)
7698 && !TYPE_NEEDS_CONSTRUCTING (type)
7699 && !DECL_INITIAL (decl))
7700 cp_error ("uninitialized const `%D'", decl);
7701}
7702
c82dbd95
MM
7703/* Verify INIT (the initializer for DECL), and record the
7704 initialization in DECL_INITIAL, if appropriate. Returns a new
7705 value for INIT. */
27778b73 7706
c82dbd95
MM
7707static tree
7708check_initializer (decl, init)
27778b73 7709 tree decl;
c82dbd95 7710 tree init;
27778b73 7711{
27778b73
MM
7712 tree type;
7713
7714 if (TREE_CODE (decl) == FIELD_DECL)
c82dbd95 7715 return init;
27778b73 7716
fc0e7bf5
MM
7717 type = TREE_TYPE (decl);
7718
27778b73
MM
7719 /* If `start_decl' didn't like having an initialization, ignore it now. */
7720 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7721 init = NULL_TREE;
27778b73 7722
c82dbd95 7723 /* Check the initializer. */
27778b73
MM
7724 if (init)
7725 {
c82dbd95
MM
7726 /* Things that are going to be initialized need to have complete
7727 type. */
7728 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7729
7730 if (type == error_mark_node)
7731 /* We will have already complained. */
7732 init = NULL_TREE;
d0f062fb 7733 else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
27778b73
MM
7734 {
7735 cp_error ("variable-sized object `%D' may not be initialized", decl);
7736 init = NULL_TREE;
7737 }
c82dbd95 7738 else if (TREE_CODE (type) == ARRAY_TYPE
d0f062fb 7739 && !COMPLETE_TYPE_P (TREE_TYPE (type)))
27778b73
MM
7740 {
7741 cp_error ("elements of array `%#D' have incomplete type", decl);
7742 init = NULL_TREE;
7743 }
d0f062fb 7744 else if (!COMPLETE_TYPE_P (type))
c82dbd95
MM
7745 {
7746 cp_error ("`%D' has incomplete type", decl);
7747 TREE_TYPE (decl) = error_mark_node;
7748 init = NULL_TREE;
7749 }
27778b73
MM
7750 }
7751
7752 if (TREE_CODE (decl) == CONST_DECL)
7753 {
7754 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7755
7756 DECL_INITIAL (decl) = init;
7757
7758 /* This will keep us from needing to worry about our obstacks. */
7759 my_friendly_assert (init != NULL_TREE, 149);
7760 init = NULL_TREE;
7761 }
c82dbd95
MM
7762 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7763 {
7764 if (TREE_STATIC (decl))
7765 make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7766 grok_reference_init (decl, type, init);
7767 init = NULL_TREE;
7768 }
27778b73
MM
7769 else if (init)
7770 {
7771 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7772 {
7773 if (TREE_CODE (type) == ARRAY_TYPE)
7774 init = digest_init (type, init, (tree *) 0);
7775 else if (TREE_CODE (init) == CONSTRUCTOR
7776 && TREE_HAS_CONSTRUCTOR (init))
7777 {
7778 if (TYPE_NON_AGGREGATE_CLASS (type))
7779 {
7780 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7781 decl);
7782 init = error_mark_node;
7783 }
7784 else
7785 goto dont_use_constructor;
7786 }
7787 }
7788 else
7789 {
7790 dont_use_constructor:
7791 if (TREE_CODE (init) != TREE_VEC)
7792 init = store_init_value (decl, init);
7793 }
7794
7795 if (init)
7796 /* We must hide the initializer so that expand_decl
7797 won't try to do something it does not understand. */
7798 init = obscure_complex_init (decl, init);
7799 }
7800 else if (DECL_EXTERNAL (decl))
7801 ;
2f939d94 7802 else if (TYPE_P (type)
27778b73
MM
7803 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7804 {
7805 tree core_type = strip_array_types (type);
7806
7807 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7808 {
7809 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7810 cp_error ("structure `%D' with uninitialized const members", decl);
7811 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7812 cp_error ("structure `%D' with uninitialized reference members",
7813 decl);
7814 }
7815
7816 check_for_uninitialized_const_var (decl);
7817
d0f062fb 7818 if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
27778b73
MM
7819 init = obscure_complex_init (decl, NULL_TREE);
7820
7821 }
7822 else
7823 check_for_uninitialized_const_var (decl);
68642fb6 7824
c82dbd95 7825 return init;
27778b73
MM
7826}
7827
7828/* If DECL is not a local variable, give it RTL. */
7829
7830static void
7831make_rtl_for_nonlocal_decl (decl, init, asmspec)
7832 tree decl;
7833 tree init;
7834 const char *asmspec;
7835{
95ee998c
MM
7836 int toplev = toplevel_bindings_p ();
7837 int defer_p;
27778b73 7838
f39ee884
MM
7839 /* Handle non-variables up front. */
7840 if (TREE_CODE (decl) != VAR_DECL)
7841 {
7842 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7843 return;
7844 }
7845
95ee998c
MM
7846 /* If we see a class member here, it should be a static data
7847 member. */
7848 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7849 {
7850 my_friendly_assert (TREE_STATIC (decl), 19990828);
7851 /* An in-class declaration of a static data member should be
7852 external; it is only a declaration, and not a definition. */
7853 if (init == NULL_TREE)
7854 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
7855 }
7856
f39ee884
MM
7857 /* Set the DECL_ASSEMBLER_NAME for the variable. */
7858 if (asmspec)
7859 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7860
95ee998c
MM
7861 /* We don't create any RTL for local variables. */
7862 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7863 return;
27778b73 7864
95ee998c
MM
7865 /* We defer emission of local statics until the corresponding
7866 DECL_STMT is expanded. */
7867 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
7868
7869 /* We try to defer namespace-scope static constants so that they are
7870 not emitted into the object file unncessarily. */
7871 if (!DECL_VIRTUAL_P (decl)
7872 && TREE_READONLY (decl)
7873 && DECL_INITIAL (decl) != NULL_TREE
7874 && DECL_INITIAL (decl) != error_mark_node
7875 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
7876 && toplev
7877 && !TREE_PUBLIC (decl))
7878 {
7879 /* Fool with the linkage according to #pragma interface. */
7880 if (!interface_unknown)
27778b73 7881 {
95ee998c
MM
7882 TREE_PUBLIC (decl) = 1;
7883 DECL_EXTERNAL (decl) = interface_only;
27778b73 7884 }
27778b73 7885
95ee998c 7886 defer_p = 1;
27778b73 7887 }
95ee998c
MM
7888
7889 /* If we're deferring the variable, just make RTL. Do not actually
7890 emit the variable. */
7891 if (defer_p)
7892 make_decl_rtl (decl, asmspec, toplev);
7893 /* If we're not deferring, go ahead and assemble the variable. */
7894 else
27778b73 7895 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
27778b73
MM
7896}
7897
7898/* The old ARM scoping rules injected variables declared in the
7899 initialization statement of a for-statement into the surrounding
7900 scope. We support this usage, in order to be backward-compatible.
7901 DECL is a just-declared VAR_DECL; if necessary inject its
7902 declaration into the surrounding scope. */
7903
b7b8bcd2 7904void
27778b73
MM
7905maybe_inject_for_scope_var (decl)
7906 tree decl;
7907{
c3783399
NS
7908 if (!DECL_NAME (decl))
7909 return;
5362b086 7910
27778b73
MM
7911 if (current_binding_level->is_for_scope)
7912 {
68642fb6 7913 struct binding_level *outer
27778b73
MM
7914 = current_binding_level->level_chain;
7915
7916 /* Check to see if the same name is already bound at the outer
7917 level, either because it was directly declared, or because a
7918 dead for-decl got preserved. In either case, the code would
7919 not have been valid under the ARM scope rules, so clear
7920 is_for_scope for the current_binding_level.
7921
7922 Otherwise, we need to preserve the temp slot for decl to last
7923 into the outer binding level. */
7924
68642fb6 7925 tree outer_binding
27778b73 7926 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
68642fb6 7927
27778b73 7928 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
68642fb6 7929 && (TREE_CODE (BINDING_VALUE (outer_binding))
27778b73
MM
7930 == VAR_DECL)
7931 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7932 {
7933 BINDING_VALUE (outer_binding)
7934 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7935 current_binding_level->is_for_scope = 0;
7936 }
7937 else if (DECL_IN_MEMORY_P (decl))
7938 preserve_temp_slots (DECL_RTL (decl));
7939 }
7940}
7941
ed5511d9 7942/* Generate code to initialize DECL (a local variable). */
27778b73 7943
b7b8bcd2
MM
7944void
7945initialize_local_var (decl, init, flags)
27778b73
MM
7946 tree decl;
7947 tree init;
27778b73
MM
7948 int flags;
7949{
9ed9e79a 7950 tree type = TREE_TYPE (decl);
27778b73 7951
9ed9e79a
MM
7952 /* If the type is bogus, don't bother initializing the variable. */
7953 if (type == error_mark_node)
7954 return;
b7b8bcd2 7955
b7b8bcd2
MM
7956 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7957 {
7958 /* If we used it already as memory, it must stay in memory. */
7959 DECL_INITIAL (decl) = NULL_TREE;
7960 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7961 }
7962
9ed9e79a
MM
7963 /* Local statics are handled differently from ordinary automatic
7964 variables. */
7965 if (TREE_STATIC (decl))
7966 {
7967 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 7968 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
7969 expand_static_init (decl, init);
7970 return;
7971 }
7972
27778b73
MM
7973 if (DECL_SIZE (decl) && type != error_mark_node)
7974 {
7975 int already_used;
68642fb6 7976
27778b73 7977 /* Compute and store the initial value. */
27778b73
MM
7978 already_used = TREE_USED (decl) || TREE_USED (type);
7979
7980 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7981 {
24bef158
MM
7982 int saved_stmts_are_full_exprs_p;
7983
3a0d3e1e 7984 my_friendly_assert (building_stmt_tree (), 20000906);
f2c5f623 7985 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
ae499cce 7986 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3a0d3e1e 7987 finish_expr_stmt (build_aggr_init (decl, init, flags));
5362b086 7988 current_stmt_tree ()->stmts_are_full_exprs_p =
ae499cce 7989 saved_stmts_are_full_exprs_p;
27778b73
MM
7990 }
7991
7992 /* Set this to 0 so we can tell whether an aggregate which was
7993 initialized was ever used. Don't do this if it has a
7994 destructor, so we don't complain about the 'resource
b7b8bcd2
MM
7995 allocation is initialization' idiom. Now set
7996 attribute((unused)) on types so decls of that type will be
7997 marked used. (see TREE_USED, above.) */
27778b73
MM
7998 if (TYPE_NEEDS_CONSTRUCTING (type)
7999 && ! already_used
834c6dff 8000 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
27778b73
MM
8001 && DECL_NAME (decl))
8002 TREE_USED (decl) = 0;
b7b8bcd2 8003 else if (already_used)
27778b73
MM
8004 TREE_USED (decl) = 1;
8005 }
24bef158 8006}
27778b73 8007
24bef158
MM
8008/* Generate code to destroy DECL (a local variable). */
8009
68642fb6 8010static void
24bef158
MM
8011destroy_local_var (decl)
8012 tree decl;
8013{
9d85d30c
MM
8014 tree type = TREE_TYPE (decl);
8015 tree cleanup;
8016
8017 /* Only variables get cleaned up. */
8018 if (TREE_CODE (decl) != VAR_DECL)
8019 return;
68642fb6 8020
9d85d30c 8021 /* And only things with destructors need cleaning up. */
655dc6ee
JM
8022 if (type == error_mark_node
8023 || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
9d85d30c
MM
8024 return;
8025
8026 if (TREE_CODE (decl) == VAR_DECL &&
8027 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
8028 /* We don't clean up things that aren't defined in this
8029 translation unit, or that need a static cleanup. The latter
8030 are handled by finish_file. */
8031 return;
68642fb6 8032
9d85d30c
MM
8033 /* Compute the cleanup. */
8034 cleanup = maybe_build_cleanup (decl);
27778b73 8035
b7b8bcd2 8036 /* Record the cleanup required for this declaration. */
24bef158
MM
8037 if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
8038 && cleanup)
8039 finish_decl_cleanup (decl, cleanup);
8040}
8041
8d08fdba
MS
8042/* Finish processing of a declaration;
8043 install its line number and initial value.
8044 If the length of an array type is not known before,
8045 it must be determined now, from the initial value, or it is an error.
8046
8b27e9ef 8047 INIT holds the value of an initializer that should be allowed to escape
8d08fdba
MS
8048 the normal rules.
8049
920f9474 8050 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 8051 if the (init) syntax was used. */
8d08fdba
MS
8052
8053void
cd9f6678 8054cp_finish_decl (decl, init, asmspec_tree, flags)
8d08fdba
MS
8055 tree decl, init;
8056 tree asmspec_tree;
6060a796 8057 int flags;
8d08fdba
MS
8058{
8059 register tree type;
27778b73 8060 tree ttype = NULL_TREE;
9c0758dd 8061 const char *asmspec = NULL;
8d08fdba
MS
8062 int was_readonly = 0;
8063
8d08fdba
MS
8064 if (! decl)
8065 {
8066 if (init)
8251199e 8067 error ("assignment (not initialization) in declaration");
8d08fdba
MS
8068 return;
8069 }
8070
a4443a08 8071 /* If a name was specified, get the string. */
8d08fdba 8072 if (asmspec_tree)
8d08fdba 8073 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 8074
2c73f9f5
ML
8075 if (init && TREE_CODE (init) == NAMESPACE_DECL)
8076 {
920f9474 8077 cp_error ("cannot initialize `%D' to namespace `%D'",
2c73f9f5
ML
8078 decl, init);
8079 init = NULL_TREE;
8080 }
8081
6ba89f8e 8082 if (current_class_type
4f1c5b7d 8083 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
8084 && TYPE_BEING_DEFINED (current_class_type)
8085 && (DECL_INITIAL (decl) || init))
8086 DECL_DEFINED_IN_CLASS_P (decl) = 1;
8087
68642fb6 8088 if (TREE_CODE (decl) == VAR_DECL
9a68c51f
JM
8089 && DECL_CONTEXT (decl)
8090 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
8091 && DECL_CONTEXT (decl) != current_namespace
8092 && init)
8093 {
8094 /* Leave the namespace of the object. */
8095 pop_decl_namespace ();
8096 }
8097
c82dbd95 8098 type = TREE_TYPE (decl);
8d08fdba 8099
f376e137 8100 if (type == error_mark_node)
cd9f6678 8101 return;
5362b086 8102
24bef158 8103 /* Add this declaration to the statement-tree. */
5362b086 8104 if (building_stmt_tree ()
44835fdd
MM
8105 && at_function_scope_p ()
8106 && TREE_CODE (decl) != RESULT_DECL)
24bef158
MM
8107 add_decl_stmt (decl);
8108
a7a7710d
NS
8109 if (TYPE_HAS_MUTABLE_P (type))
8110 TREE_READONLY (decl) = 0;
24bef158 8111
5156628f 8112 if (processing_template_decl)
5566b478
MS
8113 {
8114 if (init && DECL_INITIAL (decl))
2a1e9fdd 8115 DECL_INITIAL (decl) = init;
5566b478
MS
8116 goto finish_end0;
8117 }
3e41d13b 8118
27778b73
MM
8119 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
8120 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
8121
8d08fdba
MS
8122 /* Take care of TYPE_DECLs up front. */
8123 if (TREE_CODE (decl) == TYPE_DECL)
8124 {
8125 if (init && DECL_INITIAL (decl))
8126 {
8127 /* typedef foo = bar; store the type of bar as the type of foo. */
8128 TREE_TYPE (decl) = type = TREE_TYPE (init);
8129 DECL_INITIAL (decl) = init = NULL_TREE;
8130 }
a0a33927
MS
8131 if (type != error_mark_node
8132 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
8133 {
8134 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8251199e 8135 cp_warning ("shadowing previous type declaration of `%#D'", decl);
8d08fdba
MS
8136 set_identifier_type_value (DECL_NAME (decl), type);
8137 CLASSTYPE_GOT_SEMICOLON (type) = 1;
8138 }
8139 GNU_xref_decl (current_function_decl, decl);
cffa8729
MS
8140
8141 /* If we have installed this as the canonical typedef for this
8142 type, and that type has not been defined yet, delay emitting
956d6950 8143 the debug information for it, as we will emit it later. */
d2e5ee5c 8144 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 8145 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
8146 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8147
8d08fdba 8148 rest_of_decl_compilation (decl, NULL_PTR,
5566b478 8149 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
8150 goto finish_end;
8151 }
3e41d13b 8152
8d08fdba 8153 if (TREE_CODE (decl) != FUNCTION_DECL)
3e41d13b 8154 ttype = target_type (type);
8d08fdba
MS
8155
8156 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
8157 && TYPE_NEEDS_CONSTRUCTING (type))
8158 {
8d08fdba
MS
8159 /* Currently, GNU C++ puts constants in text space, making them
8160 impossible to initialize. In the future, one would hope for
8161 an operating system which understood the difference between
8162 initialization and the running of a program. */
8163 was_readonly = 1;
8164 TREE_READONLY (decl) = 0;
8165 }
8166
27778b73 8167 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8d08fdba 8168 {
27778b73
MM
8169 /* This must override the asm specifier which was placed by
8170 grokclassfn. Lay this out fresh. */
8171 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
8172 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8173 make_decl_rtl (decl, asmspec, 0);
8d08fdba
MS
8174 }
8175
c82dbd95
MM
8176 /* Deduce size of array from initialization, if not already known. */
8177 maybe_deduce_size_from_array_init (decl, init);
8178 init = check_initializer (decl, init);
3e41d13b 8179
8d08fdba
MS
8180 GNU_xref_decl (current_function_decl, decl);
8181
8d08fdba 8182 if (TREE_CODE (decl) == VAR_DECL)
57b52417 8183 layout_var_decl (decl);
8d08fdba
MS
8184
8185 /* Output the assembler code and/or RTL code for variables and functions,
8186 unless the type is an undefined structure or union.
8187 If not, it will get done when the type is completed. */
8d08fdba
MS
8188 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8189 || TREE_CODE (decl) == RESULT_DECL)
8190 {
27778b73
MM
8191 if (TREE_CODE (decl) == VAR_DECL)
8192 maybe_commonize_var (decl);
8d08fdba 8193
27778b73 8194 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 8195
68642fb6 8196 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 8197 || TREE_CODE (type) == METHOD_TYPE)
68642fb6 8198 abstract_virtuals_error (decl,
27778b73 8199 strip_array_types (TREE_TYPE (type)));
68642fb6 8200 else
27778b73 8201 abstract_virtuals_error (decl, strip_array_types (type));
8d08fdba 8202
8d08fdba 8203 if (TREE_CODE (decl) == FUNCTION_DECL)
faae18ab 8204 ;
67d743fe
MS
8205 else if (DECL_EXTERNAL (decl)
8206 && ! (DECL_LANG_SPECIFIC (decl)
8207 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
8208 {
8209 if (init)
8210 DECL_INITIAL (decl) = init;
8211 }
b35d4555 8212 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8d08fdba 8213 {
b7b8bcd2 8214 /* This is a local declaration. */
b35d4555
MM
8215 if (doing_semantic_analysis_p ())
8216 maybe_inject_for_scope_var (decl);
b7b8bcd2
MM
8217 /* Initialize the local variable. But, if we're building a
8218 statement-tree, we'll do the initialization when we
8219 expand the tree. */
24bef158
MM
8220 if (processing_template_decl)
8221 {
8222 if (init || DECL_INITIAL (decl) == error_mark_node)
8223 DECL_INITIAL (decl) = init;
8224 }
8225 else
8226 {
b35d4555
MM
8227 /* If we're not building RTL, then we need to do so
8228 now. */
44835fdd 8229 my_friendly_assert (building_stmt_tree (), 20000906);
b35d4555 8230 /* Initialize the variable. */
24bef158
MM
8231 initialize_local_var (decl, init, flags);
8232 /* Clean up the variable. */
8233 destroy_local_var (decl);
8234 }
8d08fdba 8235 }
9ed9e79a
MM
8236 else if (TREE_STATIC (decl) && type != error_mark_node)
8237 {
8238 /* Cleanups for static variables are handled by `finish_file'. */
8239 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 8240 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
8241 expand_static_init (decl, init);
8242 }
8d08fdba
MS
8243 finish_end0:
8244
8245 /* Undo call to `pushclass' that was done in `start_decl'
8246 due to initialization of qualified member variable.
8247 I.e., Foo::x = 10; */
8248 {
4f1c5b7d 8249 tree context = CP_DECL_CONTEXT (decl);
8d08fdba 8250 if (context
2f939d94 8251 && TYPE_P (context)
8d08fdba
MS
8252 && (TREE_CODE (decl) == VAR_DECL
8253 /* We also have a pushclass done that we need to undo here
8254 if we're at top level and declare a method. */
5566b478
MS
8255 || TREE_CODE (decl) == FUNCTION_DECL)
8256 /* If size hasn't been set, we're still defining it,
8257 and therefore inside the class body; don't pop
8258 the binding level.. */
d0f062fb 8259 && COMPLETE_TYPE_P (context)
5566b478 8260 && context == current_class_type)
6b400b21 8261 pop_nested_class ();
8d08fdba
MS
8262 }
8263 }
8264
8265 finish_end:
8266
8d08fdba
MS
8267 if (was_readonly)
8268 TREE_READONLY (decl) = 1;
8d08fdba
MS
8269}
8270
82580166 8271/* This is here for a midend callback from c-common.c */
e92cc029 8272
82580166
MS
8273void
8274finish_decl (decl, init, asmspec_tree)
8275 tree decl, init;
8276 tree asmspec_tree;
8277{
cd9f6678 8278 cp_finish_decl (decl, init, asmspec_tree, 0);
82580166
MS
8279}
8280
db4283a0
MM
8281/* Returns a declaration for a VAR_DECL as if:
8282
8283 extern "C" TYPE NAME;
8284
8285 had been seen. Used to create compiler-generated global
8286 variables. */
8287
8288tree
8289declare_global_var (name, type)
8290 tree name;
8291 tree type;
8292{
8293 tree decl;
8294
8295 push_to_top_level ();
8296 decl = build_decl (VAR_DECL, name, type);
8297 TREE_PUBLIC (decl) = 1;
8298 DECL_EXTERNAL (decl) = 1;
8299 DECL_ARTIFICIAL (decl) = 1;
8300 pushdecl (decl);
8301 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8302 pop_from_top_level ();
8303
8304 return decl;
8305}
8306
8307/* Returns a pointer to the `atexit' function. Note that if
8308 FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8309 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8310
8311static tree
8312get_atexit_node ()
8313{
8314 tree atexit_fndecl;
8315 tree arg_types;
8316 tree fn_type;
8317 tree fn_ptr_type;
8318 const char *name;
8319
8320 if (atexit_node)
8321 return atexit_node;
8322
8323 if (flag_use_cxa_atexit)
8324 {
8325 /* The declaration for `__cxa_atexit' is:
8326
8327 int __cxa_atexit (void (*)(void *), void *, void *)
8328
8329 We build up the argument types and then then function type
8330 itself. */
68642fb6 8331
db4283a0
MM
8332 /* First, build the pointer-to-function type for the first
8333 argument. */
8334 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8335 fn_type = build_function_type (void_type_node, arg_types);
8336 fn_ptr_type = build_pointer_type (fn_type);
8337 /* Then, build the rest of the argument types. */
8338 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8339 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8340 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8341 /* And the final __cxa_atexit type. */
8342 fn_type = build_function_type (integer_type_node, arg_types);
8343 fn_ptr_type = build_pointer_type (fn_type);
8344 name = "__cxa_atexit";
8345 }
8346 else
8347 {
8348 /* The declaration for `atexit' is:
68642fb6 8349
db4283a0
MM
8350 int atexit (void (*)());
8351
8352 We build up the argument types and then then function type
8353 itself. */
8354 fn_type = build_function_type (void_type_node, void_list_node);
8355 fn_ptr_type = build_pointer_type (fn_type);
8356 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8357 /* Build the final atexit type. */
8358 fn_type = build_function_type (integer_type_node, arg_types);
8359 name = "atexit";
8360 }
8361
8362 /* Now, build the function declaration. */
8363 push_lang_context (lang_name_c);
0c11ada6 8364 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
8365 mark_used (atexit_fndecl);
8366 pop_lang_context ();
8367 atexit_node = default_conversion (atexit_fndecl);
8368
8369 return atexit_node;
8370}
8371
8372/* Returns the __dso_handle VAR_DECL. */
8373
8374static tree
8375get_dso_handle_node ()
8376{
8377 if (dso_handle_node)
8378 return dso_handle_node;
8379
8380 /* Declare the variable. */
8381 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8382 ptr_type_node);
8383
8384 return dso_handle_node;
8385}
8386
8387/* Begin a new function with internal linkage whose job will be simply
8388 to destroy some particular variable. */
8389
8390static tree
8391start_cleanup_fn ()
8392{
8393 static int counter = 0;
8394 int old_interface_unknown = interface_unknown;
8395 char name[32];
8396 tree parmtypes;
8397 tree fntype;
8398 tree fndecl;
8399
8400 push_to_top_level ();
8401
8402 /* No need to mangle this. */
8403 push_lang_context (lang_name_c);
8404
8405 interface_unknown = 1;
8406
8407 /* Build the parameter-types. */
8408 parmtypes = void_list_node;
8409 /* Functions passed to __cxa_atexit take an additional parameter.
8410 We'll just ignore it. After we implement the new calling
8411 convention for destructors, we can eliminate the use of
8412 additional cleanup functions entirely in the -fnew-abi case. */
8413 if (flag_use_cxa_atexit)
8414 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8415 /* Build the function type itself. */
8416 fntype = build_function_type (void_type_node, parmtypes);
8417 /* Build the name of the function. */
8418 sprintf (name, "__tcf_%d", counter++);
8419 /* Build the function declaration. */
8420 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8421 /* It's a function with internal linkage, generated by the
8422 compiler. */
8423 TREE_PUBLIC (fndecl) = 0;
8424 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
8425 /* Make the function `inline' so that it is only emitted if it is
8426 actually needed. It is unlikely that it will be inlined, since
8427 it is only called via a function pointer, but we avoid unncessary
8428 emissions this way. */
8429 DECL_INLINE (fndecl) = 1;
db4283a0
MM
8430 /* Build the parameter. */
8431 if (flag_use_cxa_atexit)
8432 {
8433 tree parmdecl;
8434
8435 parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8436 DECL_CONTEXT (parmdecl) = fndecl;
8437 DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8438 TREE_USED (parmdecl) = 1;
8439 DECL_ARGUMENTS (fndecl) = parmdecl;
8440 }
8441
09ed39ad 8442 pushdecl (fndecl);
db4283a0
MM
8443 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8444 do_pushlevel ();
8445
8446 interface_unknown = old_interface_unknown;
8447
8448 pop_lang_context ();
8449
8450 return current_function_decl;
8451}
8452
8453/* Finish the cleanup function begun by start_cleanup_fn. */
8454
8455static void
8456end_cleanup_fn ()
8457{
8458 do_poplevel ();
8459
0acf7199 8460 expand_body (finish_function (0));
db4283a0
MM
8461
8462 pop_from_top_level ();
8463}
8464
bf419747
MM
8465/* Generate code to handle the destruction of DECL, an object with
8466 static storage duration. */
f0105ed3 8467
bf419747
MM
8468void
8469register_dtor_fn (decl)
f0105ed3
MM
8470 tree decl;
8471{
db4283a0 8472 tree cleanup;
f0105ed3 8473 tree compound_stmt;
db4283a0
MM
8474 tree args;
8475 tree fcall;
f0105ed3 8476
db4283a0 8477 int saved_flag_access_control;
f0105ed3 8478
834c6dff 8479 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
bf419747
MM
8480 return;
8481
f0105ed3
MM
8482 /* Call build_cleanup before we enter the anonymous function so that
8483 any access checks will be done relative to the current scope,
8484 rather than the scope of the anonymous function. */
8485 build_cleanup (decl);
8486
8487 /* Now start the function. */
db4283a0 8488 cleanup = start_cleanup_fn ();
f0105ed3
MM
8489
8490 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8491 to the original function, rather than the anonymous one. That
8492 will make the back-end think that nested functions are in use,
8493 which causes confusion. */
8494 saved_flag_access_control = flag_access_control;
8495 flag_access_control = 0;
8496 fcall = build_cleanup (decl);
8497 flag_access_control = saved_flag_access_control;
8498
8499 /* Create the body of the anonymous function. */
8500 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8501 finish_expr_stmt (fcall);
8502 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
db4283a0 8503 end_cleanup_fn ();
f0105ed3
MM
8504
8505 /* Call atexit with the cleanup function. */
8506 mark_addressable (cleanup);
8507 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
db4283a0
MM
8508 if (flag_use_cxa_atexit)
8509 {
8510 args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8511 args = tree_cons (NULL_TREE, null_pointer_node, args);
8512 args = tree_cons (NULL_TREE, cleanup, args);
8513 }
8514 else
8515 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8516 finish_expr_stmt (build_function_call (get_atexit_node (), args));
f0105ed3
MM
8517}
8518
8d08fdba
MS
8519void
8520expand_static_init (decl, init)
8521 tree decl;
8522 tree init;
8523{
8524 tree oldstatic = value_member (decl, static_aggregates);
a4443a08 8525
8d08fdba
MS
8526 if (oldstatic)
8527 {
8528 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8251199e 8529 cp_error ("multiple initializations given for `%D'", decl);
8d08fdba 8530 }
0aafb128 8531 else if (! toplevel_bindings_p ())
8d08fdba
MS
8532 {
8533 /* Emit code to perform this initialization but once. */
b7b8bcd2 8534 tree if_stmt;
f0105ed3 8535 tree then_clause;
f1dedc31 8536 tree assignment;
c395453c
MM
8537 tree guard;
8538 tree guard_init;
8d08fdba 8539
2036a15c
MM
8540 /* Emit code to perform this initialization but once. This code
8541 looks like:
8542
c395453c
MM
8543 static int guard = 0;
8544 if (!guard) {
2036a15c 8545 // Do initialization.
c395453c 8546 guard = 1;
2036a15c
MM
8547 // Register variable for destruction at end of program.
8548 }
8549
8550 Note that the `temp' variable is only set to 1 *after* the
8551 initialization is complete. This ensures that an exception,
8552 thrown during the construction, will cause the variable to
8553 reinitialized when we pass through this code again, as per:
68642fb6 8554
2036a15c
MM
8555 [stmt.dcl]
8556
8557 If the initialization exits by throwing an exception, the
8558 initialization is not complete, so it will be tried again
8559 the next time control enters the declaration.
8560
8561 In theory, this process should be thread-safe, too; multiple
8562 threads should not be able to initialize the variable more
8563 than once. We don't yet attempt to ensure thread-safety. */
c395453c
MM
8564
8565 /* Create the guard variable. */
8566 guard = get_guard (decl);
2036a15c
MM
8567
8568 /* Begin the conditional initialization. */
b7b8bcd2 8569 if_stmt = begin_if_stmt ();
c395453c 8570 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
f0105ed3 8571 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
72b7eeff 8572
2036a15c 8573 /* Do the initialization itself. */
28cbf42c 8574 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
f30432d7 8575 || (init && TREE_CODE (init) == TREE_LIST))
f1dedc31 8576 assignment = build_aggr_init (decl, init, 0);
f30432d7 8577 else if (init)
c557501d
MM
8578 /* The initialization we're doing here is just a bitwise
8579 copy. */
8580 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
f1dedc31
MM
8581 else
8582 assignment = NULL_TREE;
8583
8584 /* Once the assignment is complete, set TEMP to 1. Since the
8585 construction of the static object is complete at this point,
8586 we want to make sure TEMP is set to 1 even if a temporary
8587 constructed during the initialization throws an exception
8588 when it is destroyed. So, we combine the initialization and
8589 the assignment to TEMP into a single expression, ensuring
8590 that when we call finish_expr_stmt the cleanups will not be
8591 run until after TEMP is set to 1. */
c395453c 8592 guard_init = set_guard (guard);
f1dedc31
MM
8593 if (assignment)
8594 {
8595 assignment = tree_cons (NULL_TREE, assignment,
68642fb6 8596 build_tree_list (NULL_TREE,
c395453c 8597 guard_init));
f1dedc31
MM
8598 assignment = build_compound_expr (assignment);
8599 }
8600 else
c395453c 8601 assignment = guard_init;
f1dedc31 8602 finish_expr_stmt (assignment);
72b7eeff 8603
2036a15c
MM
8604 /* Use atexit to register a function for destroying this static
8605 variable. */
bf419747 8606 register_dtor_fn (decl);
72b7eeff 8607
f0105ed3 8608 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
b7b8bcd2
MM
8609 finish_then_clause (if_stmt);
8610 finish_if_stmt ();
8d08fdba
MS
8611 }
8612 else
bbd15aac 8613 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 8614}
3c5c0849
MM
8615
8616/* Finish the declaration of a catch-parameter. */
8617
b35d4555 8618tree
3c5c0849
MM
8619start_handler_parms (declspecs, declarator)
8620 tree declspecs;
8621 tree declarator;
8622{
8623 tree decl;
8624 if (declspecs)
8625 {
8626 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8627 1, NULL_TREE);
8628 if (decl == NULL_TREE)
8629 error ("invalid catch parameter");
8630 }
8631 else
8632 decl = NULL_TREE;
b35d4555
MM
8633
8634 return decl;
3c5c0849
MM
8635}
8636
8d08fdba
MS
8637\f
8638/* Make TYPE a complete type based on INITIAL_VALUE.
8639 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6ab5c740 8640 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8d08fdba
MS
8641
8642int
8643complete_array_type (type, initial_value, do_default)
8644 tree type, initial_value;
8645 int do_default;
8646{
8647 register tree maxindex = NULL_TREE;
8648 int value = 0;
68642fb6 8649
8d08fdba
MS
8650 if (initial_value)
8651 {
7b019c19
MM
8652 /* An array of character type can be initialized from a
8653 brace-enclosed string constant. */
8654 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
8655 && TREE_CODE (initial_value) == CONSTRUCTOR
8656 && CONSTRUCTOR_ELTS (initial_value)
8657 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
8658 == STRING_CST)
8659 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
8660 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
8661
8662 /* Note MAXINDEX is really the maximum index, one less than the
8663 size. */
8d08fdba 8664 if (TREE_CODE (initial_value) == STRING_CST)
e1cd6e56
MS
8665 {
8666 int eltsize
8667 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8668 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8669 / eltsize) - 1, 0);
8670 }
8d08fdba
MS
8671 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8672 {
e1cd6e56 8673 tree elts = CONSTRUCTOR_ELTS (initial_value);
fed3cef0
RK
8674
8675 maxindex = ssize_int (-1);
e1cd6e56
MS
8676 for (; elts; elts = TREE_CHAIN (elts))
8677 {
8678 if (TREE_PURPOSE (elts))
8679 maxindex = TREE_PURPOSE (elts);
8680 else
fed3cef0 8681 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
e1cd6e56
MS
8682 }
8683 maxindex = copy_node (maxindex);
8d08fdba
MS
8684 }
8685 else
8686 {
8687 /* Make an error message unless that happened already. */
8688 if (initial_value != error_mark_node)
8689 value = 1;
0db982be
ML
8690 else
8691 initial_value = NULL_TREE;
8d08fdba
MS
8692
8693 /* Prevent further error messages. */
8694 maxindex = build_int_2 (0, 0);
8695 }
8696 }
8697
8698 if (!maxindex)
8699 {
8700 if (do_default)
8701 maxindex = build_int_2 (0, 0);
8702 value = 2;
8703 }
8704
8705 if (maxindex)
8706 {
51c184be 8707 tree itype;
6ab5c740
NS
8708 tree domain;
8709
8710 domain = build_index_type (maxindex);
8711 TYPE_DOMAIN (type) = domain;
51c184be 8712
dff6b454 8713 if (! TREE_TYPE (maxindex))
6ab5c740 8714 TREE_TYPE (maxindex) = domain;
51c184be
MS
8715 if (initial_value)
8716 itype = TREE_TYPE (initial_value);
8717 else
8718 itype = NULL;
8719 if (itype && !TYPE_DOMAIN (itype))
6ab5c740 8720 TYPE_DOMAIN (itype) = domain;
dff6b454
RK
8721 /* The type of the main variant should never be used for arrays
8722 of different sizes. It should only ever be completed with the
8723 size of the array. */
8724 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
6ab5c740 8725 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8d08fdba
MS
8726 }
8727
8728 /* Lay out the type now that we can get the real answer. */
8729
8730 layout_type (type);
8731
8732 return value;
8733}
8734\f
8735/* Return zero if something is declared to be a member of type
8736 CTYPE when in the context of CUR_TYPE. STRING is the error
8737 message to print in that case. Otherwise, quietly return 1. */
e92cc029 8738
8d08fdba 8739static int
4dacf5bd 8740member_function_or_else (ctype, cur_type, flags)
8d08fdba 8741 tree ctype, cur_type;
4dacf5bd 8742 enum overload_flags flags;
8d08fdba
MS
8743{
8744 if (ctype && ctype != cur_type)
8745 {
4dacf5bd 8746 if (flags == DTOR_FLAG)
2ae7bada
NS
8747 cp_error ("destructor for alien class `%T' cannot be a member",
8748 ctype);
4dacf5bd 8749 else
2ae7bada
NS
8750 cp_error ("constructor for alien class `%T' cannot be a member",
8751 ctype);
8d08fdba
MS
8752 return 0;
8753 }
8754 return 1;
8755}
8756\f
8757/* Subroutine of `grokdeclarator'. */
8758
8759/* Generate errors possibly applicable for a given set of specifiers.
8760 This is for ARM $7.1.2. */
e92cc029 8761
8d08fdba
MS
8762static void
8763bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8764 tree object;
d8e178a0 8765 const char *type;
8d08fdba
MS
8766 int virtualp, quals, friendp, raises, inlinep;
8767{
8768 if (virtualp)
8251199e 8769 cp_error ("`%D' declared as a `virtual' %s", object, type);
8d08fdba 8770 if (inlinep)
8251199e 8771 cp_error ("`%D' declared as an `inline' %s", object, type);
8d08fdba 8772 if (quals)
8251199e 8773 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
a28e3c7f 8774 object, type);
8d08fdba 8775 if (friendp)
f8e55f34 8776 cp_error_at ("`%D' declared as a friend", object);
f3e4d63c 8777 if (raises)
f8e55f34 8778 cp_error_at ("`%D' declared with an exception specification", object);
8d08fdba
MS
8779}
8780
8781/* CTYPE is class type, or null if non-class.
8782 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8783 or METHOD_TYPE.
8784 DECLARATOR is the function's name.
8785 VIRTUALP is truthvalue of whether the function is virtual or not.
8786 FLAGS are to be passed through to `grokclassfn'.
8787 QUALS are qualifiers indicating whether the function is `const'
8788 or `volatile'.
8789 RAISES is a list of exceptions that this function can raise.
8790 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 8791 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 8792
20496fa2 8793 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 8794 applicable error messages. */
e92cc029 8795
8d08fdba 8796static tree
386b8a85 8797grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7a8f9fa9 8798 raises, check, friendp, publicp, inlinep, funcdef_flag,
2c73f9f5 8799 template_count, in_namespace)
8d08fdba
MS
8800 tree ctype, type;
8801 tree declarator;
386b8a85 8802 tree orig_declarator;
8d08fdba
MS
8803 int virtualp;
8804 enum overload_flags flags;
7a8f9fa9 8805 tree quals, raises;
386b8a85 8806 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
2c73f9f5 8807 tree in_namespace;
8d08fdba
MS
8808{
8809 tree cname, decl;
8810 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
856216bb 8811 int has_default_arg = 0;
42976354 8812 tree t;
8d08fdba
MS
8813
8814 if (ctype)
8815 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8816 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8817 else
8818 cname = NULL_TREE;
8819
8820 if (raises)
8821 {
f30432d7 8822 type = build_exception_variant (type, raises);
8d08fdba 8823 }
c11b6f21 8824
8d08fdba 8825 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
2c73f9f5 8826 /* Propagate volatile out from type to decl. */
8d08fdba 8827 if (TYPE_VOLATILE (type))
893de33c 8828 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 8829
79c4d4b7 8830 /* If this decl has namespace scope, set that up. */
2c73f9f5 8831 if (in_namespace)
b262d64c 8832 set_decl_namespace (decl, in_namespace, friendp);
adae082f 8833 else if (!ctype)
79c4d4b7 8834 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 8835
0f8766b8
JM
8836 /* `main' and builtins have implicit 'C' linkage. */
8837 if ((MAIN_NAME_P (declarator)
8838 || (IDENTIFIER_LENGTH (declarator) > 10
8839 && IDENTIFIER_POINTER (declarator)[0] == '_'
8840 && IDENTIFIER_POINTER (declarator)[1] == '_'
8841 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8842 && current_lang_name == lang_name_cplusplus
94706a5c 8843 && ctype == NULL_TREE
79c4d4b7
JM
8844 /* NULL_TREE means global namespace. */
8845 && DECL_CONTEXT (decl) == NULL_TREE)
0f8766b8
JM
8846 DECL_LANGUAGE (decl) = lang_c;
8847
8d08fdba
MS
8848 /* Should probably propagate const out from type to decl I bet (mrs). */
8849 if (staticp)
8850 {
8851 DECL_STATIC_FUNCTION_P (decl) = 1;
8852 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
8853 }
8854
e76a2646 8855 if (ctype)
4f1c5b7d 8856 DECL_CONTEXT (decl) = ctype;
e76a2646 8857
0f8766b8 8858 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 8859 {
848b92e1 8860 if (processing_template_decl)
cb9a3ff8 8861 error ("cannot declare `::main' to be a template");
faae18ab 8862 if (inlinep)
cb9a3ff8 8863 error ("cannot declare `::main' to be inline");
f22967f3 8864 if (!publicp)
cb9a3ff8 8865 error ("cannot declare `::main' to be static");
f22967f3
MM
8866 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8867 integer_type_node))
8868 error ("`main' must return `int'");
faae18ab
MS
8869 inlinep = 0;
8870 publicp = 1;
8871 }
50a6dbd7 8872
59e76fc6
JM
8873 /* Members of anonymous types and local classes have no linkage; make
8874 them internal. */
8875 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
4f1c5b7d 8876 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
8877 publicp = 0;
8878
8879 if (publicp)
8880 {
8881 /* [basic.link]: A name with no linkage (notably, the name of a class
8882 or enumeration declared in a local scope) shall not be used to
8883 declare an entity with linkage.
8884
8885 Only check this for public decls for now. */
8886 t = no_linkage_check (TREE_TYPE (decl));
8887 if (t)
8888 {
7f7c930e
JM
8889 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8890 {
eb68cb58 8891 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
8892 /* Allow this; it's pretty common in C. */;
8893 else
8894 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8895 decl);
8896 }
50a6dbd7 8897 else
8251199e 8898 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
cce2be43 8899 decl, t);
50a6dbd7
JM
8900 }
8901 }
8902
893de33c 8903 TREE_PUBLIC (decl) = publicp;
faae18ab 8904 if (! publicp)
893de33c
JM
8905 {
8906 DECL_INTERFACE_KNOWN (decl) = 1;
8907 DECL_NOT_REALLY_EXTERN (decl) = 1;
8908 }
faae18ab
MS
8909
8910 if (inlinep)
8911 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8d08fdba
MS
8912
8913 DECL_EXTERNAL (decl) = 1;
8914 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8915 {
8251199e 8916 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8d08fdba
MS
8917 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8918 quals = NULL_TREE;
8919 }
8920
596ea4e5 8921 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8d08fdba
MS
8922 grok_op_properties (decl, virtualp, check < 0);
8923
4f1c5b7d 8924 if (ctype && decl_function_context (decl))
893de33c 8925 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 8926
42976354
BK
8927 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8928 if (TREE_PURPOSE (t)
8929 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8930 {
856216bb 8931 has_default_arg = 1;
42976354
BK
8932 break;
8933 }
8934
f9d94ea4
JM
8935 if (friendp
8936 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8937 {
8938 if (funcdef_flag)
8251199e
JM
8939 cp_error
8940 ("defining explicit specialization `%D' in friend declaration",
f9d94ea4
JM
8941 orig_declarator);
8942 else
8943 {
7e2421f7
MM
8944 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8945 {
8946 /* Something like `template <class T> friend void f<T>()'. */
cb9a3ff8 8947 cp_error ("invalid use of template-id `%D' in declaration of primary template",
7e2421f7 8948 orig_declarator);
20496fa2 8949 return NULL_TREE;
7e2421f7
MM
8950 }
8951
856216bb 8952
f9d94ea4
JM
8953 /* A friend declaration of the form friend void f<>(). Record
8954 the information in the TEMPLATE_ID_EXPR. */
8955 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8956 DECL_TEMPLATE_INFO (decl)
e1b3e07d
MM
8957 = tree_cons (TREE_OPERAND (orig_declarator, 0),
8958 TREE_OPERAND (orig_declarator, 1),
8959 NULL_TREE);
856216bb
MM
8960
8961 if (has_default_arg)
8962 {
8963 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8964 decl);
8965 return NULL_TREE;
8966 }
8967
8968 if (inlinep)
8969 {
68642fb6 8970 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
856216bb
MM
8971 decl);
8972 return NULL_TREE;
8973 }
f9d94ea4 8974 }
f84b4be9 8975 }
386b8a85 8976
856216bb
MM
8977 if (has_default_arg)
8978 add_defarg_fn (decl);
8979
0f8766b8 8980 /* Plain overloading: will not be grok'd by grokclassfn. */
669ec2b4 8981 if (! ctype && ! processing_template_decl
eb68cb58 8982 && !DECL_EXTERN_C_P (decl)
669ec2b4 8983 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
0f8766b8
JM
8984 set_mangled_name_for_decl (decl);
8985
1eb0072d
JM
8986 if (funcdef_flag)
8987 /* Make the init_value nonzero so pushdecl knows this is not
8988 tentative. error_mark_node is replaced later with the BLOCK. */
8989 DECL_INITIAL (decl) = error_mark_node;
8990
93ca4ba7 8991 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
8992 TREE_NOTHROW (decl) = 1;
8993
75650646 8994 /* Caller will do the rest of this. */
8d08fdba
MS
8995 if (check < 0)
8996 return decl;
8997
8998 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
74b846e0
MM
8999 DECL_CONSTRUCTOR_P (decl) = 1;
9000
9001 /* Function gets the ugly name, field gets the nice one. This call
9002 may change the type of the function (because of default
9003 parameters)! */
9004 if (ctype != NULL_TREE)
9005 grokclassfn (ctype, decl, flags, quals);
9006
9007 decl = check_explicit_specialization (orig_declarator, decl,
9008 template_count,
9009 2 * (funcdef_flag != 0) +
9010 4 * (friendp != 0));
9011 if (decl == error_mark_node)
9012 return NULL_TREE;
98c1c668 9013
74b846e0
MM
9014 if (ctype != NULL_TREE
9015 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
9016 && check)
8d08fdba 9017 {
74b846e0 9018 tree old_decl;
8d08fdba 9019
74b846e0 9020 old_decl = check_classfn (ctype, decl);
8d08fdba 9021
74b846e0
MM
9022 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
9023 /* Because grokfndecl is always supposed to return a
9024 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9025 here. We depend on our callers to figure out that its
9026 really a template that's being returned. */
9027 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6c30752f 9028
74b846e0
MM
9029 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
9030 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5566b478 9031 {
74b846e0
MM
9032 /* Remove the `this' parm added by grokclassfn.
9033 XXX Isn't this done in start_function, too? */
3afb32a4 9034 revert_static_member_fn (decl);
74b846e0 9035 last_function_parms = TREE_CHAIN (last_function_parms);
5566b478 9036 }
74b846e0
MM
9037 if (old_decl && DECL_ARTIFICIAL (old_decl))
9038 cp_error ("definition of implicitly-declared `%D'", old_decl);
8d08fdba 9039
74b846e0 9040 if (old_decl)
8d08fdba 9041 {
74b846e0
MM
9042 /* Since we've smashed OLD_DECL to its
9043 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9044 if (TREE_CODE (decl) == TEMPLATE_DECL)
9045 decl = DECL_TEMPLATE_RESULT (decl);
9046
9047 /* Attempt to merge the declarations. This can fail, in
9048 the case of some illegal specialization declarations. */
9049 if (!duplicate_decls (decl, old_decl))
9050 cp_error ("no `%#D' member function declared in class `%T'",
9051 decl, ctype);
9052 return old_decl;
8d08fdba
MS
9053 }
9054 }
74b846e0
MM
9055
9056 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9057 return NULL_TREE;
9058
9059 if (ctype == NULL_TREE || check)
9060 return decl;
9061
9062 if (virtualp)
9063 {
9064 DECL_VIRTUAL_P (decl) = 1;
9065 if (DECL_VINDEX (decl) == NULL_TREE)
9066 DECL_VINDEX (decl) = error_mark_node;
9067 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
9068 }
9069
8d08fdba
MS
9070 return decl;
9071}
9072
9073static tree
2c73f9f5 9074grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8d08fdba
MS
9075 tree type;
9076 tree declarator;
d2e5ee5c 9077 RID_BIT_TYPE *specbits_in;
8d08fdba 9078 int initialized;
a9aedbc2 9079 int constp;
2c73f9f5 9080 tree in_namespace;
8d08fdba
MS
9081{
9082 tree decl;
f7da6097
MS
9083 RID_BIT_TYPE specbits;
9084
9085 specbits = *specbits_in;
8d08fdba
MS
9086
9087 if (TREE_CODE (type) == OFFSET_TYPE)
9088 {
9089 /* If you declare a static member so that it
9090 can be initialized, the code will reach here. */
5b605f68
MS
9091 tree basetype = TYPE_OFFSET_BASETYPE (type);
9092 type = TREE_TYPE (type);
4ce3d537 9093 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68 9094 DECL_CONTEXT (decl) = basetype;
1f6e1acc
AS
9095 /* DECL_ASSEMBLER_NAME is needed only for full-instantiated
9096 templates. */
9097 if (!uses_template_parms (decl))
669ec2b4
JM
9098 {
9099 if (flag_new_abi)
9100 DECL_ASSEMBLER_NAME (decl) = mangle_decl (decl);
9101 else
9102 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype,
9103 declarator);
9104 }
8d08fdba
MS
9105 }
9106 else
30394414 9107 {
79c4d4b7
JM
9108 tree context;
9109
9110 if (in_namespace)
9111 context = in_namespace;
9112 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
9113 context = current_namespace;
820fcad8
JM
9114 else
9115 context = NULL_TREE;
79c4d4b7 9116
6dfbb909
MM
9117 if (processing_template_decl && context)
9118 /* For global variables, declared in a template, we need the
9119 full lang_decl. */
cd9f6678 9120 decl = build_lang_decl (VAR_DECL, declarator, type);
9188c363 9121 else
c82dbd95 9122 decl = build_decl (VAR_DECL, declarator, type);
79c4d4b7
JM
9123
9124 if (context)
b262d64c 9125 set_decl_namespace (decl, context, 0);
79c4d4b7
JM
9126
9127 context = DECL_CONTEXT (decl);
5362b086 9128 if (declarator && context && current_lang_name != lang_name_c)
669ec2b4
JM
9129 {
9130 if (flag_new_abi)
9131 DECL_ASSEMBLER_NAME (decl) = mangle_decl (decl);
9132 else
5362b086 9133 DECL_ASSEMBLER_NAME (decl)
669ec2b4
JM
9134 = build_static_name (context, declarator);
9135 }
30394414 9136 }
6060a796 9137
2c73f9f5 9138 if (in_namespace)
b262d64c 9139 set_decl_namespace (decl, in_namespace, 0);
2c73f9f5 9140
8d08fdba
MS
9141 if (RIDBIT_SETP (RID_EXTERN, specbits))
9142 {
9143 DECL_THIS_EXTERN (decl) = 1;
9144 DECL_EXTERNAL (decl) = !initialized;
9145 }
9146
9147 /* In class context, static means one per class,
9148 public access, and static storage. */
2b9dc906 9149 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba
MS
9150 {
9151 TREE_PUBLIC (decl) = 1;
9152 TREE_STATIC (decl) = 1;
5b605f68 9153 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
9154 }
9155 /* At top level, either `static' or no s.c. makes a definition
9156 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 9157 else if (toplevel_bindings_p ())
8d08fdba 9158 {
a9aedbc2 9159 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 9160 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
9161 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9162 }
9163 /* Not at top level, only `static' makes a static definition. */
9164 else
9165 {
9166 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9167 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9168 }
50a6dbd7
JM
9169
9170 if (TREE_PUBLIC (decl))
9171 {
9172 /* [basic.link]: A name with no linkage (notably, the name of a class
9173 or enumeration declared in a local scope) shall not be used to
9174 declare an entity with linkage.
9175
9176 Only check this for public decls for now. */
9177 tree t = no_linkage_check (TREE_TYPE (decl));
9178 if (t)
9179 {
9180 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9181 /* Ignore for now; `enum { foo } e' is pretty common. */;
9182 else
8251199e 9183 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
50a6dbd7
JM
9184 decl, t);
9185 }
9186 }
9187
8d08fdba
MS
9188 return decl;
9189}
9190
d8f8dca1
MM
9191/* Create and return a canonical pointer to member function type, for
9192 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
9193
9194tree
9195build_ptrmemfunc_type (type)
9196 tree type;
9197{
9198 tree fields[4];
9199 tree t;
9200 tree u;
46cbda4a 9201 tree unqualified_variant = NULL_TREE;
8d08fdba 9202
d48ebde1
NS
9203 if (type == error_mark_node)
9204 return type;
9205
8d08fdba
MS
9206 /* If a canonical type already exists for this type, use it. We use
9207 this method instead of type_hash_canon, because it only does a
9208 simple equality check on the list of field members. */
9209
9210 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9211 return t;
9212
46cbda4a
MM
9213 /* Make sure that we always have the unqualified pointer-to-member
9214 type first. */
9215 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
68642fb6 9216 unqualified_variant
46cbda4a
MM
9217 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9218
33848bb0 9219 t = make_aggr_type (RECORD_TYPE);
2c73f9f5 9220 /* Let the front-end know this is a pointer to member function... */
db5ae43f 9221 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 9222 /* ... and not really an aggregate. */
7ddedda4 9223 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 9224
c7e266a6
MM
9225 if (!flag_new_abi)
9226 {
9227 u = make_aggr_type (UNION_TYPE);
9228 SET_IS_AGGR_TYPE (u, 0);
721c3b42
MM
9229 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
9230 fields[1] = build_decl (FIELD_DECL, delta2_identifier,
9231 delta_type_node);
c7e266a6
MM
9232 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9233 TYPE_NAME (u) = NULL_TREE;
9234
721c3b42
MM
9235 fields[0] = build_decl (FIELD_DECL, delta_identifier,
9236 delta_type_node);
9237 fields[1] = build_decl (FIELD_DECL, index_identifier,
9238 delta_type_node);
9239 fields[2] = build_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
c7e266a6
MM
9240 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9241 }
9242 else
9243 {
721c3b42
MM
9244 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
9245 fields[1] = build_decl (FIELD_DECL, delta_identifier,
9246 delta_type_node);
c7e266a6
MM
9247 finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9248 }
8d08fdba 9249
8d08fdba
MS
9250 /* Zap out the name so that the back-end will give us the debugging
9251 information for this anonymous RECORD_TYPE. */
9252 TYPE_NAME (t) = NULL_TREE;
9253
46cbda4a
MM
9254 /* If this is not the unqualified form of this pointer-to-member
9255 type, set the TYPE_MAIN_VARIANT for this type to be the
9256 unqualified type. Since they are actually RECORD_TYPEs that are
9257 not variants of each other, we must do this manually. */
9258 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9259 {
9260 t = build_qualified_type (t, CP_TYPE_QUALS (type));
9261 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9262 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9263 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9264 }
9265
9266 /* Cache this pointer-to-member type so that we can find it again
9267 later. */
8d08fdba
MS
9268 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9269
e92cc029 9270 /* Seems to be wanted. */
8d08fdba 9271 CLASSTYPE_GOT_SEMICOLON (t) = 1;
46cbda4a 9272
8d08fdba
MS
9273 return t;
9274}
9275
b17e2870
JM
9276/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9277 Check to see that the definition is valid. Issue appropriate error
9278 messages. Return 1 if the definition is particularly bad, or 0
9279 otherwise. */
9280
9281int
9282check_static_variable_definition (decl, type)
9283 tree decl;
9284 tree type;
9285{
9286 /* Motion 10 at San Diego: If a static const integral data member is
9287 initialized with an integral constant expression, the initializer
9288 may appear either in the declaration (within the class), or in
9289 the definition, but not both. If it appears in the class, the
9290 member is a member constant. The file-scope definition is always
9291 required. */
9292 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9293 {
cb9a3ff8 9294 cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
b17e2870
JM
9295 type);
9296 /* If we just return the declaration, crashes will sometimes
9297 occur. We therefore return void_type_node, as if this was a
9298 friend declaration, to cause callers to completely ignore
9299 this declaration. */
9300 return 1;
9301 }
9302 else if (!CP_TYPE_CONST_P (type))
cb9a3ff8 9303 cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
b17e2870
JM
9304 decl);
9305 else if (pedantic && !INTEGRAL_TYPE_P (type))
cb9a3ff8 9306 cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
b17e2870
JM
9307
9308 return 0;
9309}
9310
2848ad0f
MM
9311/* Given the SIZE (i.e., number of elements) in an array, compute an
9312 appropriate index type for the array. If non-NULL, NAME is the
9313 name of the thing being declared. */
9314
c95cd22e 9315tree
2848ad0f
MM
9316compute_array_index_type (name, size)
9317 tree name;
9318 tree size;
9319{
9320 tree itype;
9321
9322 /* The size might be the result of a cast. */
9323 STRIP_TYPE_NOPS (size);
9324
9325 /* It might be a const variable or enumeration constant. */
fc611ce0 9326 size = decl_constant_value (size);
2848ad0f
MM
9327
9328 /* If this involves a template parameter, it will be a constant at
9329 instantiation time, but we don't know what the value is yet.
9330 Even if no template parameters are involved, we may an expression
9331 that is not a constant; we don't even simplify `1 + 2' when
9332 processing a template. */
9333 if (processing_template_decl)
9334 {
9335 /* Resolve a qualified reference to an enumerator or static
9336 const data member of ours. */
9337 if (TREE_CODE (size) == SCOPE_REF
9338 && TREE_OPERAND (size, 0) == current_class_type)
9339 {
9340 tree t = lookup_field (current_class_type,
9341 TREE_OPERAND (size, 1), 0, 0);
9342 if (t)
9343 size = t;
9344 }
9345
9346 return build_index_type (build_min (MINUS_EXPR, sizetype,
9347 size, integer_one_node));
9348 }
9349
9350 /* The array bound must be an integer type. */
9351 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9352 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9353 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9354 {
d67cdbc3
JM
9355 if (name)
9356 cp_error ("size of array `%D' has non-integer type", name);
9357 else
9358 cp_error ("size of array has non-integer type");
2848ad0f
MM
9359 size = integer_one_node;
9360 }
9361
9362 /* Normally, the array-bound will be a constant. */
2bb5d995 9363 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
9364 {
9365 /* Check to see if the array bound overflowed. Make that an
9366 error, no matter how generous we're being. */
9367 int old_flag_pedantic_errors = flag_pedantic_errors;
9368 int old_pedantic = pedantic;
9369 pedantic = flag_pedantic_errors = 1;
9370 constant_expression_warning (size);
9371 pedantic = old_pedantic;
9372 flag_pedantic_errors = old_flag_pedantic_errors;
9373
9374 /* An array must have a positive number of elements. */
9375 if (INT_CST_LT (size, integer_zero_node))
9376 {
d67cdbc3
JM
9377 if (name)
9378 cp_error ("size of array `%D' is negative", name);
9379 else
9380 cp_error ("size of array is negative");
2848ad0f
MM
9381 size = integer_one_node;
9382 }
9383 /* Except that an extension we allow zero-sized arrays. We
68642fb6 9384 always allow them in system headers because glibc uses
2848ad0f
MM
9385 them. */
9386 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
9387 {
9388 if (name)
cb9a3ff8 9389 cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
d67cdbc3 9390 else
cb9a3ff8 9391 cp_pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 9392 }
2848ad0f 9393 }
2bb5d995
JM
9394 else if (TREE_CONSTANT (size))
9395 {
9396 /* `(int) &fn' is not a valid array bound. */
9397 if (name)
9398 cp_error ("size of array `%D' is not an integral constant-expression",
9399 name);
9400 else
9401 cp_error ("size of array is not an integral constant-expression");
9402 }
2848ad0f
MM
9403
9404 /* Compute the index of the largest element in the array. It is
9405 one less than the number of elements in the array. */
9406 itype
ab76ca54
MM
9407 = fold (cp_build_binary_op (MINUS_EXPR,
9408 cp_convert (ssizetype, size),
9409 cp_convert (ssizetype,
9410 integer_one_node)));
68642fb6 9411
2848ad0f
MM
9412 /* Check for variable-sized arrays. We allow such things as an
9413 extension, even though they are not allowed in ANSI/ISO C++. */
9414 if (!TREE_CONSTANT (itype))
9415 {
9416 if (pedantic)
9417 {
9418 if (name)
cb9a3ff8 9419 cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
2848ad0f
MM
9420 name);
9421 else
cb9a3ff8 9422 cp_pedwarn ("ISO C++ forbids variable-size array");
2848ad0f
MM
9423 }
9424
9425 /* Create a variable-sized array index type. */
9426 itype = variable_size (itype);
9427 }
9428 /* Make sure that there was no overflow when creating to a signed
9429 index type. (For example, on a 32-bit machine, an array with
9430 size 2^32 - 1 is too big.) */
9431 else if (TREE_OVERFLOW (itype))
9432 {
9433 error ("overflow in array dimension");
9434 TREE_OVERFLOW (itype) = 0;
9435 }
68642fb6 9436
2848ad0f
MM
9437 /* Create and return the appropriate index type. */
9438 return build_index_type (itype);
9439}
9440
9441/* Returns an ARRAY_TYPE for an array with SIZE elements of the
9442 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9443 with this type. */
9444
9445static tree
9446create_array_type_for_decl (name, type, size)
9447 tree name;
9448 tree type;
9449 tree size;
9450{
9451 tree itype = NULL_TREE;
9452 const char* error_msg;
9453
9454 /* If things have already gone awry, bail now. */
9455 if (type == error_mark_node || size == error_mark_node)
9456 return error_mark_node;
9457
9458 /* Assume that everything will go OK. */
9459 error_msg = NULL;
9460
9461 /* There are some types which cannot be array elements. */
9462 switch (TREE_CODE (type))
9463 {
9464 case VOID_TYPE:
9465 error_msg = "array of void";
9466 break;
9467
9468 case FUNCTION_TYPE:
9469 error_msg = "array of functions";
9470 break;
9471
9472 case REFERENCE_TYPE:
9473 error_msg = "array of references";
9474 break;
9475
9476 case OFFSET_TYPE:
9477 error_msg = "array of data members";
9478 break;
9479
9480 case METHOD_TYPE:
9481 error_msg = "array of function members";
9482 break;
9483
9484 default:
9485 break;
9486 }
9487
9488 /* If something went wrong, issue an error-message and return. */
9489 if (error_msg)
9490 {
9491 if (name)
9492 cp_error ("declaration of `%D' as %s", name, error_msg);
9493 else
9494 cp_error ("creating %s", error_msg);
9495
9496 return error_mark_node;
9497 }
9498
9499 /* [dcl.array]
68642fb6 9500
2848ad0f
MM
9501 The constant expressions that specify the bounds of the arrays
9502 can be omitted only for the first member of the sequence. */
9503 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9504 {
cb9a3ff8 9505 cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
2848ad0f 9506 name);
2848ad0f
MM
9507
9508 return error_mark_node;
9509 }
9510
9511 /* Figure out the index type for the array. */
9512 if (size)
9513 itype = compute_array_index_type (name, size);
9514
9515 return build_cplus_array_type (type, itype);
9516}
9517
3dbc07b6
MM
9518/* Check that it's OK to declare a function with the indicated TYPE.
9519 SFK indicates the kind of special function (if any) that this
9520 function is. CTYPE is the class of which this function is a
9521 member. OPTYPE is the type given in a conversion operator
9522 declaration. Returns the actual return type of the function; that
9523 may be different than TYPE if an error occurs, or for certain
9524 special functions. */
9525
9526static tree
9527check_special_function_return_type (sfk, type, ctype, optype)
9528 special_function_kind sfk;
9529 tree type;
9530 tree ctype;
9531 tree optype;
9532{
9533 switch (sfk)
9534 {
9535 case sfk_constructor:
9536 if (type)
9537 cp_error ("return type specification for constructor invalid");
5362b086 9538
3dbc07b6
MM
9539 /* In the old ABI, we return `this'; in the new ABI we don't
9540 bother. */
9541 type = flag_new_abi ? void_type_node : build_pointer_type (ctype);
9542 break;
9543
9544 case sfk_destructor:
9545 if (type)
9546 cp_error ("return type specification for destructor invalid");
9547 type = void_type_node;
9548 break;
9549
9550 case sfk_conversion:
9551 if (type && !same_type_p (type, optype))
9552 cp_error ("operator `%T' declared to return `%T'", optype, type);
9553 else if (type)
9554 cp_pedwarn ("return type specified for `operator %T'", optype);
9555 type = optype;
9556 break;
9557
9558 default:
9559 my_friendly_abort (20000408);
9560 break;
9561 }
9562
9563 return type;
9564}
9565
8d08fdba
MS
9566/* Given declspecs and a declarator,
9567 determine the name and type of the object declared
9568 and construct a ..._DECL node for it.
9569 (In one case we can return a ..._TYPE node instead.
9570 For invalid input we sometimes return 0.)
9571
9572 DECLSPECS is a chain of tree_list nodes whose value fields
9573 are the storage classes and type specifiers.
9574
9575 DECL_CONTEXT says which syntactic context this declaration is in:
9576 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9577 FUNCDEF for a function definition. Like NORMAL but a few different
9578 error messages in each case. Return value may be zero meaning
9579 this definition is too screwy to try to parse.
9580 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9581 handle member functions (which have FIELD context).
9582 Return value may be zero meaning this definition is too screwy to
9583 try to parse.
9584 PARM for a parameter declaration (either within a function prototype
9585 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 9586 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
9587 TYPENAME if for a typename (in a cast or sizeof).
9588 Don't make a DECL node; just return the ..._TYPE node.
9589 FIELD for a struct or union field; make a FIELD_DECL.
9590 BITFIELD for a field with specified width.
9591 INITIALIZED is 1 if the decl has an initializer.
9592
b17e2870
JM
9593 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9594 normal attributes in TREE_PURPOSE, or NULL_TREE.
9595
70adf8a9 9596 In the TYPENAME case, DECLARATOR is really an abstract declarator.
8d08fdba
MS
9597 It may also be so in the PARM case, for a prototype where the
9598 argument type is specified but not the name.
9599
9600 This function is where the complicated C meanings of `static'
9601 and `extern' are interpreted.
9602
9603 For C++, if there is any monkey business to do, the function which
9604 calls this one must do it, i.e., prepending instance variables,
9605 renaming overloaded function names, etc.
9606
9607 Note that for this C++, it is an error to define a method within a class
9608 which does not belong to that class.
9609
9610 Except in the case where SCOPE_REFs are implicitly known (such as
9611 methods within a class being redundantly qualified),
9612 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9613 (class_name::decl_name). The caller must also deal with this.
9614
9615 If a constructor or destructor is seen, and the context is FIELD,
9616 then the type gains the attribute TREE_HAS_x. If such a declaration
9617 is erroneous, NULL_TREE is returned.
9618
9619 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
535233a8
NS
9620 function, these are the qualifiers to give to the `this' pointer. We
9621 apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
8d08fdba
MS
9622
9623 May return void_type_node if the declarator turned out to be a friend.
9624 See grokfield for details. */
9625
8d08fdba 9626tree
c11b6f21 9627grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8d08fdba
MS
9628 tree declspecs;
9629 tree declarator;
9630 enum decl_context decl_context;
9631 int initialized;
c11b6f21 9632 tree attrlist;
8d08fdba
MS
9633{
9634 RID_BIT_TYPE specbits;
9635 int nclasses = 0;
9636 tree spec;
9637 tree type = NULL_TREE;
9638 int longlong = 0;
9639 int constp;
91063b51 9640 int restrictp;
8d08fdba 9641 int volatilep;
91063b51 9642 int type_quals;
db5ae43f 9643 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
9644 int explicit_int = 0;
9645 int explicit_char = 0;
37c46b43 9646 int defaulted_int = 0;
8d08fdba 9647 tree typedef_decl = NULL_TREE;
9c0758dd 9648 const char *name;
8d08fdba
MS
9649 tree typedef_type = NULL_TREE;
9650 int funcdef_flag = 0;
9651 enum tree_code innermost_code = ERROR_MARK;
9652 int bitfield = 0;
6125f3be
DE
9653#if 0
9654 /* See the code below that used this. */
f6abb50a 9655 tree decl_machine_attr = NULL_TREE;
6125f3be 9656#endif
8d08fdba
MS
9657 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9658 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9659 tree init = NULL_TREE;
9660
9661 /* Keep track of what sort of function is being processed
9662 so that we can warn about default return values, or explicit
9663 return values which do not match prescribed defaults. */
3dbc07b6 9664 special_function_kind sfk = sfk_none;
8d08fdba
MS
9665
9666 tree dname = NULL_TREE;
9667 tree ctype = current_class_type;
9668 tree ctor_return_type = NULL_TREE;
9669 enum overload_flags flags = NO_SPECIAL;
8d08fdba 9670 tree quals = NULL_TREE;
c11b6f21 9671 tree raises = NULL_TREE;
386b8a85 9672 int template_count = 0;
2c73f9f5 9673 tree in_namespace = NULL_TREE;
1eab9b56
JM
9674 tree inner_attrs;
9675 int ignore_attrs;
8d08fdba
MS
9676
9677 RIDBIT_RESET_ALL (specbits);
9678 if (decl_context == FUNCDEF)
9679 funcdef_flag = 1, decl_context = NORMAL;
9680 else if (decl_context == MEMFUNCDEF)
9681 funcdef_flag = -1, decl_context = FIELD;
9682 else if (decl_context == BITFIELD)
9683 bitfield = 1, decl_context = FIELD;
9684
8d08fdba
MS
9685 /* Look inside a declarator for the name being declared
9686 and get it as a string, for an error message. */
9687 {
be99da77
MS
9688 tree *next = &declarator;
9689 register tree decl;
8d08fdba
MS
9690 name = NULL;
9691
be99da77
MS
9692 while (next && *next)
9693 {
9694 decl = *next;
9695 switch (TREE_CODE (decl))
8d08fdba 9696 {
52fbc847
JM
9697 case TREE_LIST:
9698 /* For attributes. */
9699 next = &TREE_VALUE (decl);
9700 break;
9701
be99da77
MS
9702 case COND_EXPR:
9703 ctype = NULL_TREE;
9704 next = &TREE_OPERAND (decl, 0);
9705 break;
8d08fdba 9706
2c73f9f5 9707 case BIT_NOT_EXPR: /* For C++ destructors! */
8d08fdba 9708 {
be99da77
MS
9709 tree name = TREE_OPERAND (decl, 0);
9710 tree rename = NULL_TREE;
9711
9712 my_friendly_assert (flags == NO_SPECIAL, 152);
9713 flags = DTOR_FLAG;
3dbc07b6 9714 sfk = sfk_destructor;
5566b478
MS
9715 if (TREE_CODE (name) == TYPE_DECL)
9716 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
9717 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9718 if (ctype == NULL_TREE)
9719 {
9720 if (current_class_type == NULL_TREE)
9721 {
8251199e 9722 error ("destructors must be member functions");
be99da77
MS
9723 flags = NO_SPECIAL;
9724 }
9725 else
9726 {
9727 tree t = constructor_name (current_class_name);
9728 if (t != name)
9729 rename = t;
9730 }
9731 }
8d08fdba 9732 else
be99da77
MS
9733 {
9734 tree t = constructor_name (ctype);
9735 if (t != name)
9736 rename = t;
9737 }
51c184be 9738
be99da77 9739 if (rename)
39211cd5 9740 {
8251199e 9741 cp_error ("destructor `%T' must match class name `%T'",
5566b478 9742 name, rename);
be99da77 9743 TREE_OPERAND (decl, 0) = rename;
39211cd5 9744 }
be99da77 9745 next = &name;
51c184be 9746 }
be99da77 9747 break;
8d08fdba 9748
be99da77 9749 case ADDR_EXPR: /* C++ reference declaration */
2c73f9f5 9750 /* Fall through. */
be99da77
MS
9751 case ARRAY_REF:
9752 case INDIRECT_REF:
9753 ctype = NULL_TREE;
9754 innermost_code = TREE_CODE (decl);
9755 next = &TREE_OPERAND (decl, 0);
9756 break;
8d08fdba 9757
be99da77 9758 case CALL_EXPR:
43f887f9 9759 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8d08fdba 9760 {
b17e2870
JM
9761 /* This is actually a variable declaration using
9762 constructor syntax. We need to call start_decl and
9763 cp_finish_decl so we can get the variable
9764 initialized... */
9765
9766 tree attributes, prefix_attributes;
be99da77
MS
9767
9768 *next = TREE_OPERAND (decl, 0);
43f887f9 9769 init = CALL_DECLARATOR_PARMS (decl);
be99da77 9770
b17e2870
JM
9771 if (attrlist)
9772 {
9773 attributes = TREE_PURPOSE (attrlist);
9774 prefix_attributes = TREE_VALUE (attrlist);
9775 }
9776 else
9777 {
9778 attributes = NULL_TREE;
9779 prefix_attributes = NULL_TREE;
9780 }
9781
9782 decl = start_decl (declarator, declspecs, 1,
9783 attributes, prefix_attributes);
9fc336c7 9784 decl_type_access_control (decl);
1eb0072d
JM
9785 if (decl)
9786 {
9787 /* Look for __unused__ attribute */
9788 if (TREE_USED (TREE_TYPE (decl)))
9789 TREE_USED (decl) = 1;
9790 finish_decl (decl, init, NULL_TREE);
9791 }
9792 else
9793 cp_error ("invalid declarator");
be99da77 9794 return 0;
8d08fdba 9795 }
be99da77
MS
9796 innermost_code = TREE_CODE (decl);
9797 if (decl_context == FIELD && ctype == NULL_TREE)
9798 ctype = current_class_type;
45537677 9799 if (ctype
c11b6f21 9800 && TREE_OPERAND (decl, 0)
45537677
MS
9801 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9802 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9803 == constructor_name_full (ctype))
9804 || (DECL_NAME (TREE_OPERAND (decl, 0))
9805 == constructor_name (ctype)))))
be99da77
MS
9806 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9807 next = &TREE_OPERAND (decl, 0);
9808 decl = *next;
9809 if (ctype != NULL_TREE
9810 && decl != NULL_TREE && flags != DTOR_FLAG
9811 && decl == constructor_name (ctype))
8d08fdba 9812 {
3dbc07b6 9813 sfk = sfk_constructor;
be99da77 9814 ctor_return_type = ctype;
8d08fdba 9815 }
be99da77
MS
9816 ctype = NULL_TREE;
9817 break;
68642fb6 9818
386b8a85
JM
9819 case TEMPLATE_ID_EXPR:
9820 {
9821 tree fns = TREE_OPERAND (decl, 0);
9822
9823 if (TREE_CODE (fns) == LOOKUP_EXPR)
9824 fns = TREE_OPERAND (fns, 0);
9825
8f032717
MM
9826 dname = fns;
9827 if (TREE_CODE (dname) == COMPONENT_REF)
9828 dname = TREE_OPERAND (dname, 1);
9829 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9830 {
9831 my_friendly_assert (is_overloaded_fn (dname),
9832 19990331);
9833 dname = DECL_NAME (get_first_fn (dname));
9834 }
386b8a85 9835 }
2c73f9f5 9836 /* Fall through. */
be99da77
MS
9837
9838 case IDENTIFIER_NODE:
386b8a85
JM
9839 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9840 dname = decl;
9841
be99da77
MS
9842 next = 0;
9843
0e5921e8 9844 if (C_IS_RESERVED_WORD (dname))
8d08fdba 9845 {
8251199e 9846 cp_error ("declarator-id missing; using reserved word `%D'",
be99da77
MS
9847 dname);
9848 name = IDENTIFIER_POINTER (dname);
8d08fdba 9849 }
596ea4e5 9850 else if (!IDENTIFIER_TYPENAME_P (dname))
be99da77 9851 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
9852 else
9853 {
596ea4e5
AS
9854 my_friendly_assert (flags == NO_SPECIAL, 154);
9855 flags = TYPENAME_FLAG;
9856 ctor_return_type = TREE_TYPE (dname);
9857 sfk = sfk_conversion;
9858 if (IDENTIFIER_GLOBAL_VALUE (dname)
5362b086 9859 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (dname))
596ea4e5
AS
9860 == TYPE_DECL))
9861 name = IDENTIFIER_POINTER (dname);
9862 else
9863 name = "<invalid operator>";
8d08fdba 9864 }
be99da77 9865 break;
8d08fdba 9866
be99da77
MS
9867 /* C++ extension */
9868 case SCOPE_REF:
9869 {
9870 /* Perform error checking, and decide on a ctype. */
9871 tree cname = TREE_OPERAND (decl, 0);
9872 if (cname == NULL_TREE)
9873 ctype = NULL_TREE;
2c73f9f5
ML
9874 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9875 {
9876 ctype = NULL_TREE;
9877 in_namespace = TREE_OPERAND (decl, 0);
9878 TREE_OPERAND (decl, 0) = NULL_TREE;
9879 }
be99da77
MS
9880 else if (! is_aggr_type (cname, 1))
9881 TREE_OPERAND (decl, 0) = NULL_TREE;
9882 /* Must test TREE_OPERAND (decl, 1), in case user gives
9883 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9884 else if (TREE_OPERAND (decl, 1)
9885 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9886 ctype = cname;
73b0fce8 9887 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
a1281f45 9888 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
5566b478 9889 {
8251199e 9890 cp_error ("`%T::%D' is not a valid declarator", cname,
5566b478 9891 TREE_OPERAND (decl, 1));
8251199e 9892 cp_error (" perhaps you want `typename %T::%D' to make it a type",
5566b478
MS
9893 cname, TREE_OPERAND (decl, 1));
9894 return void_type_node;
9895 }
be99da77
MS
9896 else if (ctype == NULL_TREE)
9897 ctype = cname;
9898 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9899 TREE_OPERAND (decl, 0) = ctype;
9900 else
9901 {
9902 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9903 {
8251199e 9904 cp_error ("type `%T' is not derived from type `%T'",
be99da77
MS
9905 cname, ctype);
9906 TREE_OPERAND (decl, 0) = NULL_TREE;
9907 }
9908 else
9909 ctype = cname;
9910 }
9911
c91a56d2
MS
9912 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9913 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9914 == constructor_name_full (ctype))
9915 || (DECL_NAME (TREE_OPERAND (decl, 1))
9916 == constructor_name (ctype))))
be99da77
MS
9917 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9918 next = &TREE_OPERAND (decl, 1);
9919 decl = *next;
9920 if (ctype)
9921 {
9922 if (TREE_CODE (decl) == IDENTIFIER_NODE
9923 && constructor_name (ctype) == decl)
9924 {
3dbc07b6 9925 sfk = sfk_constructor;
be99da77
MS
9926 ctor_return_type = ctype;
9927 }
9928 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9929 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9930 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9931 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9932 {
3dbc07b6 9933 sfk = sfk_destructor;
be99da77
MS
9934 ctor_return_type = ctype;
9935 flags = DTOR_FLAG;
9936 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9937 next = &TREE_OPERAND (decl, 0);
9938 }
9939 }
9940 }
9941 break;
9942
9943 case ERROR_MARK:
9944 next = 0;
9945 break;
9946
45537677
MS
9947 case TYPE_DECL:
9948 /* Parse error puts this typespec where
9949 a declarator should go. */
8251199e 9950 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
45537677 9951 if (TREE_TYPE (decl) == current_class_type)
8251199e 9952 cp_error (" perhaps you want `%T' for a constructor",
45537677
MS
9953 current_class_name);
9954 dname = DECL_NAME (decl);
9955 name = IDENTIFIER_POINTER (dname);
9956
e92cc029 9957 /* Avoid giving two errors for this. */
45537677
MS
9958 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9959
58010b57 9960 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
45537677
MS
9961 *next = dname;
9962 next = 0;
9963 break;
9964
be99da77 9965 default:
8251199e 9966 cp_compiler_error ("`%D' as declarator", decl);
be99da77 9967 return 0; /* We used to do a 155 abort here. */
8d08fdba 9968 }
be99da77 9969 }
8d08fdba
MS
9970 }
9971
9972 /* A function definition's declarator must have the form of
9973 a function declarator. */
9974
9975 if (funcdef_flag && innermost_code != CALL_EXPR)
9976 return 0;
9977
e1cd6e56
MS
9978 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9979 && innermost_code != CALL_EXPR
9980 && ! (ctype && declspecs == NULL_TREE))
9981 {
8251199e 9982 cp_error ("declaration of `%D' as non-function", dname);
e1cd6e56
MS
9983 return void_type_node;
9984 }
9985
8d08fdba
MS
9986 /* Anything declared one level down from the top level
9987 must be one of the parameters of a function
9988 (because the body is at least two levels down). */
9989
9990 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9991 by not allowing C++ class definitions to specify their parameters
9992 with xdecls (must be spec.d in the parmlist).
9993
9994 Since we now wait to push a class scope until we are sure that
9995 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
9996 explicitly (since current_class_name is not yet alive).
9997
9998 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 9999
9188c363 10000 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2
MS
10001 {
10002 struct binding_level *b = current_binding_level;
10003 current_binding_level = b->level_chain;
10004 if (current_binding_level != 0 && toplevel_bindings_p ())
10005 decl_context = PARM;
10006 current_binding_level = b;
10007 }
8d08fdba 10008
34fc957d
NS
10009 if (name == NULL)
10010 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 10011
8d08fdba
MS
10012 /* Look through the decl specs and record which ones appear.
10013 Some typespecs are defined as built-in typenames.
10014 Others, the ones that are modifiers of other types,
10015 are represented by bits in SPECBITS: set the bits for
10016 the modifiers that appear. Storage class keywords are also in SPECBITS.
10017
10018 If there is a typedef name or a type, store the type in TYPE.
10019 This includes builtin typedefs such as `int'.
10020
10021 Set EXPLICIT_INT if the type is `int' or `char' and did not
10022 come from a user typedef.
10023
10024 Set LONGLONG if `long' is mentioned twice.
10025
10026 For C++, constructors and destructors have their own fast treatment. */
10027
10028 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
10029 {
10030 register int i;
10031 register tree id;
10032
10033 /* Certain parse errors slip through. For example,
10034 `int class;' is not caught by the parser. Try
10035 weakly to recover here. */
10036 if (TREE_CODE (spec) != TREE_LIST)
10037 return 0;
10038
10039 id = TREE_VALUE (spec);
10040
10041 if (TREE_CODE (id) == IDENTIFIER_NODE)
10042 {
a3203465
MS
10043 if (id == ridpointers[(int) RID_INT]
10044 || id == ridpointers[(int) RID_CHAR]
10045 || id == ridpointers[(int) RID_BOOL]
10046 || id == ridpointers[(int) RID_WCHAR])
8d08fdba
MS
10047 {
10048 if (type)
8ccc31eb
MS
10049 {
10050 if (id == ridpointers[(int) RID_BOOL])
8251199e 10051 error ("`bool' is now a keyword");
8ccc31eb 10052 else
8251199e 10053 cp_error ("extraneous `%T' ignored", id);
8ccc31eb 10054 }
8d08fdba
MS
10055 else
10056 {
a3203465
MS
10057 if (id == ridpointers[(int) RID_INT])
10058 explicit_int = 1;
10059 else if (id == ridpointers[(int) RID_CHAR])
10060 explicit_char = 1;
8d08fdba
MS
10061 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
10062 }
10063 goto found;
10064 }
e92cc029 10065 /* C++ aggregate types. */
8d08fdba
MS
10066 if (IDENTIFIER_HAS_TYPE_VALUE (id))
10067 {
10068 if (type)
8251199e 10069 cp_error ("multiple declarations `%T' and `%T'", type, id);
8d08fdba
MS
10070 else
10071 type = IDENTIFIER_TYPE_VALUE (id);
10072 goto found;
10073 }
10074
f376e137 10075 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
10076 {
10077 if (ridpointers[i] == id)
10078 {
10079 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
10080 {
795add94 10081 if (pedantic && ! in_system_header && warn_long_long)
cb9a3ff8 10082 pedwarn ("ISO C++ does not support `long long'");
9a3b49ac 10083 if (longlong)
8251199e 10084 error ("`long long long' is too long for GCC");
8d08fdba
MS
10085 else
10086 longlong = 1;
10087 }
10088 else if (RIDBIT_SETP (i, specbits))
8251199e 10089 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
8d08fdba
MS
10090 RIDBIT_SET (i, specbits);
10091 goto found;
10092 }
10093 }
10094 }
e92cc029 10095 /* C++ aggregate types. */
1899c3a4 10096 else if (TREE_CODE (id) == TYPE_DECL)
45537677
MS
10097 {
10098 if (type)
8251199e 10099 cp_error ("multiple declarations `%T' and `%T'", type,
45537677
MS
10100 TREE_TYPE (id));
10101 else
5566b478
MS
10102 {
10103 type = TREE_TYPE (id);
10104 TREE_VALUE (spec) = type;
10105 }
45537677
MS
10106 goto found;
10107 }
8d08fdba 10108 if (type)
8251199e 10109 error ("two or more data types in declaration of `%s'", name);
8d08fdba
MS
10110 else if (TREE_CODE (id) == IDENTIFIER_NODE)
10111 {
10112 register tree t = lookup_name (id, 1);
10113 if (!t || TREE_CODE (t) != TYPE_DECL)
8251199e 10114 error ("`%s' fails to be a typedef or built in type",
8d08fdba
MS
10115 IDENTIFIER_POINTER (id));
10116 else
10117 {
10118 type = TREE_TYPE (t);
6125f3be
DE
10119#if 0
10120 /* See the code below that used this. */
f6abb50a 10121 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
6125f3be 10122#endif
8d08fdba
MS
10123 typedef_decl = t;
10124 }
10125 }
bd6dd845 10126 else if (id != error_mark_node)
8d08fdba
MS
10127 /* Can't change CLASS nodes into RECORD nodes here! */
10128 type = id;
10129
10130 found: ;
10131 }
10132
10133 typedef_type = type;
10134
37c46b43 10135 /* No type at all: default to `int', and set DEFAULTED_INT
6eabb241 10136 because it was not a user-defined typedef. */
8d08fdba 10137
a3203465
MS
10138 if (type == NULL_TREE
10139 && (RIDBIT_SETP (RID_SIGNED, specbits)
10140 || RIDBIT_SETP (RID_UNSIGNED, specbits)
10141 || RIDBIT_SETP (RID_LONG, specbits)
10142 || RIDBIT_SETP (RID_SHORT, specbits)))
10143 {
10144 /* These imply 'int'. */
10145 type = integer_type_node;
37c46b43 10146 defaulted_int = 1;
a3203465
MS
10147 }
10148
3dbc07b6
MM
10149 if (sfk != sfk_none)
10150 type = check_special_function_return_type (sfk, type,
10151 ctor_return_type,
10152 ctor_return_type);
10153 else if (type == NULL_TREE)
8d08fdba 10154 {
3dbc07b6
MM
10155 int is_main;
10156
8d08fdba 10157 explicit_int = -1;
3dbc07b6 10158
41eff652
JM
10159 /* We handle `main' specially here, because 'main () { }' is so
10160 common. With no options, it is allowed. With -Wreturn-type,
10161 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6
MM
10162 is_main = (funcdef_flag
10163 && MAIN_NAME_P (dname)
10164 && ctype == NULL_TREE
10165 && in_namespace == NULL_TREE
10166 && current_namespace == global_namespace);
10167
10168 if (in_system_header || flag_ms_extensions)
10169 /* Allow it, sigh. */;
10170 else if (pedantic || ! is_main)
10171 cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
10172 name);
10173 else if (warn_return_type)
10174 cp_warning ("ISO C++ forbids declaration of `%s' with no type",
10175 name);
41eff652 10176
3dbc07b6 10177 type = integer_type_node;
51c184be 10178 }
8d08fdba
MS
10179
10180 ctype = NULL_TREE;
10181
10182 /* Now process the modifiers that were specified
10183 and check for invalid combinations. */
10184
10185 /* Long double is a special combination. */
10186
10187 if (RIDBIT_SETP (RID_LONG, specbits)
10188 && TYPE_MAIN_VARIANT (type) == double_type_node)
10189 {
10190 RIDBIT_RESET (RID_LONG, specbits);
68642fb6 10191 type = build_qualified_type (long_double_type_node,
91063b51 10192 CP_TYPE_QUALS (type));
8d08fdba
MS
10193 }
10194
10195 /* Check all other uses of type modifiers. */
10196
10197 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10198 || RIDBIT_SETP (RID_SIGNED, specbits)
10199 || RIDBIT_SETP (RID_LONG, specbits)
10200 || RIDBIT_SETP (RID_SHORT, specbits))
10201 {
10202 int ok = 0;
10203
10204 if (TREE_CODE (type) == REAL_TYPE)
8251199e 10205 error ("short, signed or unsigned invalid for `%s'", name);
b7484fbe 10206 else if (TREE_CODE (type) != INTEGER_TYPE)
8251199e 10207 error ("long, short, signed or unsigned invalid for `%s'", name);
8d08fdba
MS
10208 else if (RIDBIT_SETP (RID_LONG, specbits)
10209 && RIDBIT_SETP (RID_SHORT, specbits))
8251199e 10210 error ("long and short specified together for `%s'", name);
8d08fdba
MS
10211 else if ((RIDBIT_SETP (RID_LONG, specbits)
10212 || RIDBIT_SETP (RID_SHORT, specbits))
10213 && explicit_char)
8251199e 10214 error ("long or short specified with char for `%s'", name);
8d08fdba
MS
10215 else if ((RIDBIT_SETP (RID_LONG, specbits)
10216 || RIDBIT_SETP (RID_SHORT, specbits))
10217 && TREE_CODE (type) == REAL_TYPE)
8251199e 10218 error ("long or short specified with floating type for `%s'", name);
8d08fdba
MS
10219 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10220 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8251199e 10221 error ("signed and unsigned given together for `%s'", name);
8d08fdba
MS
10222 else
10223 {
10224 ok = 1;
37c46b43 10225 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 10226 {
8251199e 10227 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8d08fdba
MS
10228 name);
10229 if (flag_pedantic_errors)
10230 ok = 0;
10231 }
10232 }
10233
10234 /* Discard the type modifiers if they are invalid. */
10235 if (! ok)
10236 {
10237 RIDBIT_RESET (RID_UNSIGNED, specbits);
10238 RIDBIT_RESET (RID_SIGNED, specbits);
10239 RIDBIT_RESET (RID_LONG, specbits);
10240 RIDBIT_RESET (RID_SHORT, specbits);
10241 longlong = 0;
10242 }
10243 }
10244
37c46b43
MS
10245 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10246 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10247 {
8251199e 10248 error ("complex invalid for `%s'", name);
37c46b43
MS
10249 RIDBIT_RESET (RID_COMPLEX, specbits);
10250 }
10251
8d08fdba
MS
10252 /* Decide whether an integer type is signed or not.
10253 Optionally treat bitfields as signed by default. */
10254 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
b89c5a7b
MM
10255 /* [class.bit]
10256
10257 It is implementation-defined whether a plain (neither
10258 explicitly signed or unsigned) char, short, int, or long
10259 bit-field is signed or unsigned.
68642fb6 10260
b89c5a7b
MM
10261 Naturally, we extend this to long long as well. Note that
10262 this does not include wchar_t. */
10263 || (bitfield && !flag_signed_bitfields
10264 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10265 /* A typedef for plain `int' without `signed' can be
10266 controlled just like plain `int', but a typedef for
10267 `signed int' cannot be so controlled. */
68642fb6 10268 && !(typedef_decl
29bbeb1c 10269 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b89c5a7b
MM
10270 && (TREE_CODE (type) == INTEGER_TYPE
10271 || TREE_CODE (type) == CHAR_TYPE)
29bbeb1c 10272 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
10273 {
10274 if (longlong)
10275 type = long_long_unsigned_type_node;
10276 else if (RIDBIT_SETP (RID_LONG, specbits))
10277 type = long_unsigned_type_node;
10278 else if (RIDBIT_SETP (RID_SHORT, specbits))
10279 type = short_unsigned_type_node;
10280 else if (type == char_type_node)
10281 type = unsigned_char_type_node;
10282 else if (typedef_decl)
10283 type = unsigned_type (type);
10284 else
10285 type = unsigned_type_node;
10286 }
10287 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10288 && type == char_type_node)
10289 type = signed_char_type_node;
10290 else if (longlong)
10291 type = long_long_integer_type_node;
10292 else if (RIDBIT_SETP (RID_LONG, specbits))
10293 type = long_integer_type_node;
10294 else if (RIDBIT_SETP (RID_SHORT, specbits))
10295 type = short_integer_type_node;
10296
37c46b43
MS
10297 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10298 {
10299 /* If we just have "complex", it is equivalent to
10300 "complex double", but if any modifiers at all are specified it is
10301 the complex form of TYPE. E.g, "complex short" is
10302 "complex short int". */
10303
10304 if (defaulted_int && ! longlong
10305 && ! (RIDBIT_SETP (RID_LONG, specbits)
10306 || RIDBIT_SETP (RID_SHORT, specbits)
10307 || RIDBIT_SETP (RID_SIGNED, specbits)
10308 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10309 type = complex_double_type_node;
10310 else if (type == integer_type_node)
10311 type = complex_integer_type_node;
10312 else if (type == float_type_node)
10313 type = complex_float_type_node;
10314 else if (type == double_type_node)
10315 type = complex_double_type_node;
10316 else if (type == long_double_type_node)
10317 type = complex_long_double_type_node;
10318 else
10319 type = build_complex_type (type);
10320 }
10321
3dbc07b6 10322 if (sfk == sfk_conversion
3ac3d9ea 10323 && (RIDBIT_SETP (RID_CONST, specbits)
91063b51
MM
10324 || RIDBIT_SETP (RID_VOLATILE, specbits)
10325 || RIDBIT_SETP (RID_RESTRICT, specbits)))
10326 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
3ac3d9ea
MM
10327 ctor_return_type);
10328
8d08fdba
MS
10329 /* Set CONSTP if this declaration is `const', whether by
10330 explicit specification or via a typedef.
10331 Likewise for VOLATILEP. */
10332
91063b51 10333 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
68642fb6 10334 restrictp =
91063b51 10335 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
68642fb6 10336 volatilep =
91063b51
MM
10337 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10338 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10339 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10340 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10341 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10342 staticp = 0;
10343 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8d08fdba 10344 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
10345 RIDBIT_RESET (RID_VIRTUAL, specbits);
10346 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10347 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 10348
8d08fdba
MS
10349 if (RIDBIT_SETP (RID_STATIC, specbits))
10350 staticp = 1 + (decl_context == FIELD);
10351
10352 if (virtualp && staticp == 2)
10353 {
8251199e 10354 cp_error ("member `%D' cannot be declared both virtual and static",
8d08fdba
MS
10355 dname);
10356 staticp = 0;
10357 }
10358 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8d08fdba
MS
10359 RIDBIT_RESET (RID_FRIEND, specbits);
10360
8d08fdba
MS
10361 /* Warn if two storage classes are given. Default to `auto'. */
10362
10363 if (RIDBIT_ANY_SET (specbits))
10364 {
10365 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10366 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10367 if (decl_context == PARM && nclasses > 0)
8251199e 10368 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
10369 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10370 {
10371 if (decl_context == PARM)
8251199e 10372 error ("typedef declaration invalid in parameter declaration");
8d08fdba
MS
10373 nclasses++;
10374 }
10375 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10376 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10377 }
10378
10379 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
10380 if (virtualp
10381 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 10382 {
8251199e 10383 error ("virtual outside class declaration");
8d08fdba
MS
10384 virtualp = 0;
10385 }
8d08fdba
MS
10386
10387 /* Static anonymous unions are dealt with here. */
10388 if (staticp && decl_context == TYPENAME
10389 && TREE_CODE (declspecs) == TREE_LIST
6bdb8141 10390 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
8d08fdba
MS
10391 decl_context = FIELD;
10392
8d08fdba
MS
10393 /* Warn about storage classes that are invalid for certain
10394 kinds of declarations (parameters, typenames, etc.). */
10395
10396 if (nclasses > 1)
8251199e 10397 error ("multiple storage classes in declaration of `%s'", name);
8d08fdba
MS
10398 else if (decl_context != NORMAL && nclasses > 0)
10399 {
db5ae43f 10400 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
10401 && (RIDBIT_SETP (RID_REGISTER, specbits)
10402 || RIDBIT_SETP (RID_AUTO, specbits)))
10403 ;
fc378698
MS
10404 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10405 ;
8d08fdba 10406 else if (decl_context == FIELD
8d08fdba
MS
10407 /* C++ allows static class elements */
10408 && RIDBIT_SETP (RID_STATIC, specbits))
10409 /* C++ also allows inlines and signed and unsigned elements,
10410 but in those cases we don't come in here. */
10411 ;
10412 else
10413 {
10414 if (decl_context == FIELD)
10415 {
b7484fbe
MS
10416 tree tmp = NULL_TREE;
10417 register int op = 0;
10418
10419 if (declarator)
10420 {
68642fb6 10421 /* Avoid trying to get an operand off an identifier node. */
9e9ff709
MS
10422 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10423 tmp = declarator;
10424 else
10425 tmp = TREE_OPERAND (declarator, 0);
b7484fbe 10426 op = IDENTIFIER_OPNAME_P (tmp);
596ea4e5
AS
10427 if (IDENTIFIER_TYPENAME_P (tmp))
10428 {
10429 if (IDENTIFIER_GLOBAL_VALUE (tmp)
5362b086 10430 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (tmp))
596ea4e5
AS
10431 == TYPE_DECL))
10432 name = IDENTIFIER_POINTER (tmp);
10433 else
10434 name = "<invalid operator>";
10435 }
b7484fbe 10436 }
8251199e 10437 error ("storage class specified for %s `%s'",
6eabb241 10438 op ? "member operator" : "field",
596ea4e5 10439 name);
8d08fdba
MS
10440 }
10441 else
b9d12519
KG
10442 {
10443 if (decl_context == PARM || decl_context == CATCHPARM)
10444 error ("storage class specified for parameter `%s'", name);
10445 else
10446 error ("storage class specified for typename");
10447 }
8d08fdba
MS
10448 RIDBIT_RESET (RID_REGISTER, specbits);
10449 RIDBIT_RESET (RID_AUTO, specbits);
10450 RIDBIT_RESET (RID_EXTERN, specbits);
8d08fdba
MS
10451 }
10452 }
10453 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10454 {
a9aedbc2 10455 if (toplevel_bindings_p ())
8d08fdba 10456 {
59be0cdd 10457 /* It's common practice (and completely valid) to have a const
8d08fdba 10458 be initialized and declared extern. */
950ad3c3 10459 if (!(type_quals & TYPE_QUAL_CONST))
8251199e 10460 warning ("`%s' initialized and declared `extern'", name);
8d08fdba
MS
10461 }
10462 else
8251199e 10463 error ("`%s' has both `extern' and initializer", name);
8d08fdba
MS
10464 }
10465 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
a9aedbc2 10466 && ! toplevel_bindings_p ())
8251199e 10467 error ("nested function `%s' declared `extern'", name);
a9aedbc2 10468 else if (toplevel_bindings_p ())
8d08fdba
MS
10469 {
10470 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 10471 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba
MS
10472 }
10473
909e536a 10474 if (nclasses > 0 && friendp)
8251199e 10475 error ("storage class specifiers invalid in friend function declarations");
909e536a 10476
8d08fdba
MS
10477 /* Now figure out the structure of the declarator proper.
10478 Descend through it, creating more complex types, until we reach
10479 the declared identifier (or NULL_TREE, in an absolute declarator). */
10480
1eab9b56 10481 inner_attrs = NULL_TREE;
68642fb6 10482 ignore_attrs = 0;
1eab9b56 10483
386b8a85
JM
10484 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10485 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
10486 {
10487 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10488 an INDIRECT_REF (for *...),
10489 a CALL_EXPR (for ...(...)),
10490 an identifier (for the name being declared)
10491 or a null pointer (for the place in an absolute declarator
10492 where the name was omitted).
10493 For the last two cases, we have just exited the loop.
10494
10495 For C++ it could also be
10496 a SCOPE_REF (for class :: ...). In this case, we have converted
10497 sensible names to types, and those are the values we use to
10498 qualify the member name.
10499 an ADDR_EXPR (for &...),
10500 a BIT_NOT_EXPR (for destructors)
8d08fdba
MS
10501
10502 At this point, TYPE is the type of elements of an array,
10503 or for a function to return, or for a pointer to point to.
10504 After this sequence of ifs, TYPE is the type of the
10505 array or function or pointer, and DECLARATOR has had its
10506 outermost layer removed. */
10507
bd6dd845 10508 if (type == error_mark_node)
8d08fdba
MS
10509 {
10510 if (TREE_CODE (declarator) == SCOPE_REF)
10511 declarator = TREE_OPERAND (declarator, 1);
10512 else
10513 declarator = TREE_OPERAND (declarator, 0);
10514 continue;
10515 }
10516 if (quals != NULL_TREE
10517 && (declarator == NULL_TREE
10518 || TREE_CODE (declarator) != SCOPE_REF))
10519 {
10520 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10521 ctype = TYPE_METHOD_BASETYPE (type);
10522 if (ctype != NULL_TREE)
10523 {
8d08fdba 10524 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
535233a8 10525 grok_method_quals (ctype, dummy, quals);
8d08fdba 10526 type = TREE_TYPE (dummy);
535233a8 10527 ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
8d08fdba
MS
10528 quals = NULL_TREE;
10529 }
10530 }
1eab9b56
JM
10531
10532 /* See the comment for the TREE_LIST case, below. */
10533 if (ignore_attrs)
10534 ignore_attrs = 0;
10535 else if (inner_attrs)
10536 {
10537 decl_attributes (type, inner_attrs, NULL_TREE);
10538 inner_attrs = NULL_TREE;
10539 }
10540
8d08fdba
MS
10541 switch (TREE_CODE (declarator))
10542 {
52fbc847
JM
10543 case TREE_LIST:
10544 {
10545 /* We encode a declarator with embedded attributes using
1eab9b56
JM
10546 a TREE_LIST. The attributes apply to the declarator
10547 directly inside them, so we have to skip an iteration
10548 before applying them to the type. If the declarator just
10549 inside is the declarator-id, we apply the attrs to the
10550 decl itself. */
10551 inner_attrs = TREE_PURPOSE (declarator);
10552 ignore_attrs = 1;
52fbc847 10553 declarator = TREE_VALUE (declarator);
52fbc847
JM
10554 }
10555 break;
10556
8d08fdba
MS
10557 case ARRAY_REF:
10558 {
2848ad0f 10559 register tree size;
8d08fdba 10560
2848ad0f 10561 size = TREE_OPERAND (declarator, 1);
8d08fdba 10562
f2e2cbd4 10563 /* VC++ spells a zero-sized array with []. */
e8ea7036
MM
10564 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10565 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
f2e2cbd4
JM
10566 size = integer_zero_node;
10567
2848ad0f 10568 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10569
2848ad0f 10570 type = create_array_type_for_decl (dname, type, size);
c1b177ec
ML
10571
10572 /* VLAs never work as fields. */
5362b086 10573 if (decl_context == FIELD && !processing_template_decl
c1b177ec
ML
10574 && TREE_CODE (type) == ARRAY_TYPE
10575 && TYPE_DOMAIN (type) != NULL_TREE
10576 && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
10577 {
10578 cp_error ("size of member `%D' is not constant", dname);
10579 /* Proceed with arbitrary constant size, so that offset
10580 computations don't get confused. */
10581 type = create_array_type_for_decl (dname, TREE_TYPE (type),
10582 integer_one_node);
10583 }
10584
8d08fdba
MS
10585 ctype = NULL_TREE;
10586 }
10587 break;
10588
10589 case CALL_EXPR:
10590 {
10591 tree arg_types;
f376e137 10592 int funcdecl_p;
43f887f9 10593 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
f376e137 10594 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
10595
10596 /* Declaring a function type.
10597 Make sure we have a valid type for the function to return. */
8d08fdba 10598
91063b51 10599 /* We now know that the TYPE_QUALS don't apply to the
14ae7e7d 10600 decl, but to its return type. */
91063b51 10601 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
10602
10603 /* Warn about some types functions can't return. */
10604
10605 if (TREE_CODE (type) == FUNCTION_TYPE)
10606 {
8251199e 10607 error ("`%s' declared as function returning a function", name);
8d08fdba
MS
10608 type = integer_type_node;
10609 }
10610 if (TREE_CODE (type) == ARRAY_TYPE)
10611 {
8251199e 10612 error ("`%s' declared as function returning an array", name);
8d08fdba
MS
10613 type = integer_type_node;
10614 }
10615
f376e137
MS
10616 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10617 inner_decl = TREE_OPERAND (inner_decl, 1);
10618
68642fb6 10619 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
386b8a85
JM
10620 inner_decl = dname;
10621
b7484fbe 10622 /* Pick up type qualifiers which should be applied to `this'. */
43f887f9 10623 quals = CALL_DECLARATOR_QUALS (declarator);
b7484fbe 10624
c11b6f21 10625 /* Pick up the exception specifications. */
43f887f9 10626 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
c11b6f21 10627
f376e137
MS
10628 /* Say it's a definition only for the CALL_EXPR
10629 closest to the identifier. */
beb53fb8 10630 funcdecl_p
68642fb6 10631 = inner_decl
386b8a85 10632 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
68642fb6 10633 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
386b8a85 10634 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
68642fb6 10635
8d08fdba
MS
10636 if (ctype == NULL_TREE
10637 && decl_context == FIELD
f376e137 10638 && funcdecl_p
8d08fdba
MS
10639 && (friendp == 0 || dname == current_class_name))
10640 ctype = current_class_type;
10641
3dbc07b6 10642 if (ctype && sfk == sfk_conversion)
8d08fdba
MS
10643 TYPE_HAS_CONVERSION (ctype) = 1;
10644 if (ctype && constructor_name (ctype) == dname)
10645 {
10646 /* We are within a class's scope. If our declarator name
10647 is the same as the class name, and we are defining
10648 a function, then it is a constructor/destructor, and
10649 therefore returns a void type. */
10650
10651 if (flags == DTOR_FLAG)
10652 {
cab1f180
ML
10653 /* ISO C++ 12.4/2. A destructor may not be
10654 declared const or volatile. A destructor may
10655 not be static. */
8d08fdba 10656 if (staticp == 2)
8251199e 10657 error ("destructor cannot be static member function");
b7484fbe 10658 if (quals)
8d08fdba 10659 {
4f70a846
MM
10660 cp_error ("destructors may not be `%s'",
10661 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10662 quals = NULL_TREE;
8d08fdba
MS
10663 }
10664 if (decl_context == FIELD)
10665 {
4dacf5bd
KG
10666 if (! member_function_or_else (ctype,
10667 current_class_type,
10668 flags))
8d08fdba
MS
10669 return void_type_node;
10670 }
10671 }
2c73f9f5 10672 else /* It's a constructor. */
8d08fdba 10673 {
db5ae43f
MS
10674 if (explicitp == 1)
10675 explicitp = 2;
cab1f180
ML
10676 /* ISO C++ 12.1. A constructor may not be
10677 declared const or volatile. A constructor may
10678 not be virtual. A constructor may not be
10679 static. */
8d08fdba 10680 if (staticp == 2)
8251199e 10681 error ("constructor cannot be static member function");
8d08fdba
MS
10682 if (virtualp)
10683 {
8251199e 10684 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
10685 virtualp = 0;
10686 }
b7484fbe 10687 if (quals)
8d08fdba 10688 {
4f70a846
MM
10689 cp_error ("constructors may not be `%s'",
10690 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10691 quals = NULL_TREE;
8d08fdba 10692 }
8d08fdba 10693 {
51c184be 10694 RID_BIT_TYPE tmp_bits;
4e135bdd 10695 memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
51c184be
MS
10696 RIDBIT_RESET (RID_INLINE, tmp_bits);
10697 RIDBIT_RESET (RID_STATIC, tmp_bits);
10698 if (RIDBIT_ANY_SET (tmp_bits))
8251199e 10699 error ("return value type specifier for constructor ignored");
8d08fdba 10700 }
6eabb241 10701 if (decl_context == FIELD)
8d08fdba 10702 {
4dacf5bd
KG
10703 if (! member_function_or_else (ctype,
10704 current_class_type,
10705 flags))
8d08fdba
MS
10706 return void_type_node;
10707 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
3dbc07b6 10708 if (sfk != sfk_constructor)
8d08fdba
MS
10709 return NULL_TREE;
10710 }
10711 }
10712 if (decl_context == FIELD)
10713 staticp = 0;
10714 }
b7484fbe 10715 else if (friendp)
8d08fdba 10716 {
b7484fbe 10717 if (initialized)
8251199e 10718 error ("can't initialize friend function `%s'", name);
b7484fbe
MS
10719 if (virtualp)
10720 {
10721 /* Cannot be both friend and virtual. */
8251199e 10722 error ("virtual functions cannot be friends");
b7484fbe
MS
10723 RIDBIT_RESET (RID_FRIEND, specbits);
10724 friendp = 0;
10725 }
28cbf42c 10726 if (decl_context == NORMAL)
8251199e 10727 error ("friend declaration not in class definition");
28cbf42c 10728 if (current_function_decl && funcdef_flag)
8251199e 10729 cp_error ("can't define friend function `%s' in a local class definition",
28cbf42c 10730 name);
8d08fdba
MS
10731 }
10732
8d08fdba
MS
10733 /* Construct the function type and go to the next
10734 inner layer of declarator. */
10735
f376e137 10736 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10737
f376e137
MS
10738 /* FIXME: This is where default args should be fully
10739 processed. */
8d08fdba 10740
f376e137 10741 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
8d08fdba 10742
4f70a846 10743 if (declarator && flags == DTOR_FLAG)
8d08fdba 10744 {
4f70a846
MM
10745 /* A destructor declared in the body of a class will
10746 be represented as a BIT_NOT_EXPR. But, we just
10747 want the underlying IDENTIFIER. */
8d08fdba 10748 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
4f70a846 10749 declarator = TREE_OPERAND (declarator, 0);
68642fb6 10750
8b27e9ef 10751 if (arg_types != void_list_node)
8d08fdba 10752 {
4f70a846
MM
10753 cp_error ("destructors may not have parameters");
10754 arg_types = void_list_node;
10755 last_function_parms = NULL_TREE;
8d08fdba
MS
10756 }
10757 }
10758
d22c8596 10759 /* ANSI says that `const int foo ();'
8d08fdba 10760 does not make the function foo const. */
d22c8596 10761 type = build_function_type (type, arg_types);
42976354
BK
10762
10763 {
10764 tree t;
10765 for (t = arg_types; t; t = TREE_CHAIN (t))
10766 if (TREE_PURPOSE (t)
10767 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10768 {
10769 add_defarg_fn (type);
10770 break;
10771 }
10772 }
8d08fdba
MS
10773 }
10774 break;
10775
10776 case ADDR_EXPR:
10777 case INDIRECT_REF:
10778 /* Filter out pointers-to-references and references-to-references.
10779 We can get these if a TYPE_DECL is used. */
10780
10781 if (TREE_CODE (type) == REFERENCE_TYPE)
10782 {
8251199e 10783 error ("cannot declare %s to references",
8d08fdba
MS
10784 TREE_CODE (declarator) == ADDR_EXPR
10785 ? "references" : "pointers");
10786 declarator = TREE_OPERAND (declarator, 0);
10787 continue;
10788 }
10789
a5894242
MS
10790 if (TREE_CODE (type) == OFFSET_TYPE
10791 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10792 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10793 {
8251199e 10794 cp_error ("cannot declare pointer to `%#T' member",
a5894242
MS
10795 TREE_TYPE (type));
10796 type = TREE_TYPE (type);
10797 }
10798
61a127b3
MM
10799 /* Merge any constancy or volatility into the target type
10800 for the pointer. */
10801
91063b51
MM
10802 /* We now know that the TYPE_QUALS don't apply to the decl,
10803 but to the target of the pointer. */
10804 type_quals = TYPE_UNQUALIFIED;
8d08fdba 10805
6eabb241 10806 if (TREE_CODE (declarator) == ADDR_EXPR)
8d08fdba 10807 {
69851283
MM
10808 if (TREE_CODE (type) == VOID_TYPE)
10809 error ("invalid type: `void &'");
8d08fdba 10810 else
69851283 10811 type = build_reference_type (type);
8d08fdba
MS
10812 }
10813 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 10814 type = build_ptrmemfunc_type (build_pointer_type (type));
8d08fdba
MS
10815 else
10816 type = build_pointer_type (type);
10817
10818 /* Process a list of type modifier keywords (such as
10819 const or volatile) that were given inside the `*' or `&'. */
10820
10821 if (TREE_TYPE (declarator))
10822 {
10823 register tree typemodlist;
10824 int erred = 0;
91063b51
MM
10825
10826 constp = 0;
10827 volatilep = 0;
10828 restrictp = 0;
8d08fdba
MS
10829 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10830 typemodlist = TREE_CHAIN (typemodlist))
10831 {
91063b51
MM
10832 tree qualifier = TREE_VALUE (typemodlist);
10833
10834 if (qualifier == ridpointers[(int) RID_CONST])
8d08fdba 10835 constp++;
91063b51 10836 else if (qualifier == ridpointers[(int) RID_VOLATILE])
8d08fdba 10837 volatilep++;
91063b51
MM
10838 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10839 restrictp++;
8d08fdba
MS
10840 else if (!erred)
10841 {
10842 erred = 1;
91063b51 10843 error ("invalid type modifier within pointer declarator");
8d08fdba
MS
10844 }
10845 }
10846 if (constp > 1)
8251199e 10847 pedwarn ("duplicate `const'");
8d08fdba 10848 if (volatilep > 1)
8251199e 10849 pedwarn ("duplicate `volatile'");
91063b51
MM
10850 if (restrictp > 1)
10851 pedwarn ("duplicate `restrict'");
10852
10853 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10854 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10855 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
a0a33927
MS
10856 if (TREE_CODE (declarator) == ADDR_EXPR
10857 && (constp || volatilep))
10858 {
10859 if (constp)
8251199e 10860 pedwarn ("discarding `const' applied to a reference");
a0a33927 10861 if (volatilep)
8251199e 10862 pedwarn ("discarding `volatile' applied to a reference");
91063b51 10863 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
a0a33927 10864 }
91063b51 10865 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10866 }
10867 declarator = TREE_OPERAND (declarator, 0);
10868 ctype = NULL_TREE;
10869 break;
10870
10871 case SCOPE_REF:
10872 {
10873 /* We have converted type names to NULL_TREE if the
10874 name was bogus, or to a _TYPE node, if not.
10875
10876 The variable CTYPE holds the type we will ultimately
10877 resolve to. The code here just needs to build
10878 up appropriate member types. */
10879 tree sname = TREE_OPERAND (declarator, 1);
386b8a85
JM
10880 tree t;
10881
8d08fdba
MS
10882 /* Destructors can have their visibilities changed as well. */
10883 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10884 sname = TREE_OPERAND (sname, 0);
10885
10886 if (TREE_COMPLEXITY (declarator) == 0)
10887 /* This needs to be here, in case we are called
10888 multiple times. */ ;
9a68c51f
JM
10889 else if (TREE_COMPLEXITY (declarator) == -1)
10890 /* Namespace member. */
10891 pop_decl_namespace ();
8d08fdba 10892 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
2c73f9f5 10893 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
5566b478
MS
10894 else if (! IS_AGGR_TYPE_CODE
10895 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10896 ;
8d08fdba
MS
10897 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10898 {
9a3b49ac
MS
10899 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10900 that refer to ctype. They couldn't be resolved earlier
10901 because we hadn't pushed into the class yet.
10902 Example: resolve 'B<T>::type' in
10903 'B<typename B<T>::type> B<T>::f () { }'. */
10904 if (current_template_parms
10905 && uses_template_parms (type)
10906 && uses_template_parms (current_class_type))
10907 {
10908 tree args = current_template_args ();
4393e105 10909 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
9a3b49ac
MS
10910 }
10911
a28e3c7f
MS
10912 /* This pop_nested_class corresponds to the
10913 push_nested_class used to push into class scope for
10914 parsing the argument list of a function decl, in
10915 qualified_id. */
b74a0560 10916 pop_nested_class ();
8d08fdba
MS
10917 TREE_COMPLEXITY (declarator) = current_class_depth;
10918 }
10919 else
10920 my_friendly_abort (16);
10921
10922 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10923 {
10924 /* We had a reference to a global decl, or
10925 perhaps we were given a non-aggregate typedef,
10926 in which case we cleared this out, and should just
10927 keep going as though it wasn't there. */
10928 declarator = sname;
10929 continue;
10930 }
10931 ctype = TREE_OPERAND (declarator, 0);
10932
386b8a85 10933 t = ctype;
68642fb6 10934 while (t != NULL_TREE && CLASS_TYPE_P (t))
386b8a85 10935 {
5362b086 10936 /* You're supposed to have one `template <...>'
da8a7456
MM
10937 for every template class, but you don't need one
10938 for a full specialization. For example:
10939
10940 template <class T> struct S{};
10941 template <> struct S<int> { void f(); };
10942 void S<int>::f () {}
10943
10944 is correct; there shouldn't be a `template <>' for
10945 the definition of `S<int>::f'. */
10946 if (CLASSTYPE_TEMPLATE_INFO (t)
10947 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
10948 || uses_template_parms (CLASSTYPE_TI_ARGS (t))))
386b8a85 10949 template_count += 1;
da8a7456 10950
386b8a85
JM
10951 t = TYPE_MAIN_DECL (t);
10952 if (DECL_LANG_SPECIFIC (t))
4f1c5b7d 10953 t = DECL_CONTEXT (t);
386b8a85
JM
10954 else
10955 t = NULL_TREE;
10956 }
10957
8d08fdba
MS
10958 if (sname == NULL_TREE)
10959 goto done_scoping;
10960
10961 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10962 {
10963 /* This is the `standard' use of the scoping operator:
10964 basetype :: member . */
10965
db5ae43f 10966 if (ctype == current_class_type)
28cbf42c
MS
10967 {
10968 /* class A {
10969 void A::f ();
10970 };
10971
10972 Is this ill-formed? */
10973
10974 if (pedantic)
8251199e 10975 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
28cbf42c
MS
10976 ctype, name);
10977 }
db5ae43f 10978 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba
MS
10979 {
10980 if (current_class_type == NULL_TREE
8d08fdba 10981 || friendp)
14ae7e7d
JM
10982 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10983 TYPE_ARG_TYPES (type));
8d08fdba
MS
10984 else
10985 {
8251199e 10986 cp_error ("cannot declare member function `%T::%s' within `%T'",
a3203465 10987 ctype, name, current_class_type);
8d08fdba
MS
10988 return void_type_node;
10989 }
10990 }
5566b478 10991 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
d0f062fb 10992 || COMPLETE_TYPE_P (complete_type (ctype)))
8d08fdba 10993 {
2c73f9f5 10994 /* Have to move this code elsewhere in this function.
db5ae43f
MS
10995 this code is used for i.e., typedef int A::M; M *pm;
10996
10997 It is? How? jason 10/2/94 */
8d08fdba 10998
8d08fdba
MS
10999 if (current_class_type)
11000 {
8251199e 11001 cp_error ("cannot declare member `%T::%s' within `%T'",
db5ae43f
MS
11002 ctype, name, current_class_type);
11003 return void_type_node;
8d08fdba
MS
11004 }
11005 type = build_offset_type (ctype, type);
11006 }
11007 else if (uses_template_parms (ctype))
11008 {
8d08fdba 11009 if (TREE_CODE (type) == FUNCTION_TYPE)
beb53fb8 11010 type
14ae7e7d 11011 = build_cplus_method_type (ctype, TREE_TYPE (type),
beb53fb8 11012 TYPE_ARG_TYPES (type));
8d08fdba
MS
11013 }
11014 else
11015 {
8251199e 11016 cp_error ("structure `%T' not yet defined", ctype);
8d08fdba
MS
11017 return error_mark_node;
11018 }
11019
11020 declarator = sname;
11021 }
8d08fdba
MS
11022 else if (TREE_CODE (sname) == SCOPE_REF)
11023 my_friendly_abort (17);
11024 else
11025 {
11026 done_scoping:
11027 declarator = TREE_OPERAND (declarator, 1);
11028 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
11029 /* In this case, we will deal with it later. */
11030 ;
11031 else
11032 {
11033 if (TREE_CODE (type) == FUNCTION_TYPE)
14ae7e7d
JM
11034 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11035 TYPE_ARG_TYPES (type));
8d08fdba
MS
11036 else
11037 type = build_offset_type (ctype, type);
11038 }
11039 }
11040 }
11041 break;
11042
11043 case BIT_NOT_EXPR:
11044 declarator = TREE_OPERAND (declarator, 0);
11045 break;
11046
8d08fdba
MS
11047 case RECORD_TYPE:
11048 case UNION_TYPE:
11049 case ENUMERAL_TYPE:
11050 declarator = NULL_TREE;
11051 break;
11052
11053 case ERROR_MARK:
11054 declarator = NULL_TREE;
11055 break;
11056
11057 default:
11058 my_friendly_abort (158);
11059 }
11060 }
11061
1eab9b56
JM
11062 /* See the comment for the TREE_LIST case, above. */
11063 if (inner_attrs)
11064 {
11065 if (! ignore_attrs)
11066 decl_attributes (type, inner_attrs, NULL_TREE);
11067 else if (attrlist)
11068 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
11069 else
1f8f4a0b 11070 attrlist = build_tree_list (NULL_TREE, inner_attrs);
1eab9b56
JM
11071 }
11072
419c6212
JM
11073 /* Now TYPE has the actual type. */
11074
34fc957d 11075 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 11076 {
34fc957d
NS
11077 /* [dcl.fct.spec] The explicit specifier shall only be used in
11078 declarations of constructors within a class definition. */
11079 error ("only declarations of constructors can be `explicit'");
db5ae43f
MS
11080 explicitp = 0;
11081 }
11082
f30432d7
MS
11083 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11084 {
34fc957d
NS
11085 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
11086 {
11087 error ("non-member `%s' cannot be declared `mutable'", name);
11088 RIDBIT_RESET (RID_MUTABLE, specbits);
11089 }
11090 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
f30432d7 11091 {
34fc957d 11092 error ("non-object member `%s' cannot be declared `mutable'", name);
f30432d7
MS
11093 RIDBIT_RESET (RID_MUTABLE, specbits);
11094 }
34fc957d
NS
11095 else if (TREE_CODE (type) == FUNCTION_TYPE
11096 || TREE_CODE (type) == METHOD_TYPE)
11097 {
11098 error ("function `%s' cannot be declared `mutable'", name);
11099 RIDBIT_RESET (RID_MUTABLE, specbits);
11100 }
f30432d7
MS
11101 else if (staticp)
11102 {
8251199e 11103 error ("static `%s' cannot be declared `mutable'", name);
f30432d7
MS
11104 RIDBIT_RESET (RID_MUTABLE, specbits);
11105 }
34fc957d
NS
11106 else if (type_quals & TYPE_QUAL_CONST)
11107 {
11108 error ("const `%s' cannot be declared `mutable'", name);
11109 RIDBIT_RESET (RID_MUTABLE, specbits);
11110 }
f30432d7
MS
11111 }
11112
efe38fab
JM
11113 if (declarator == NULL_TREE
11114 || TREE_CODE (declarator) == IDENTIFIER_NODE
11115 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
11116 && (TREE_CODE (type) == FUNCTION_TYPE
11117 || TREE_CODE (type) == METHOD_TYPE)))
11118 /* OK */;
11119 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11120 {
11121 cp_error ("template-id `%D' used as a declarator", declarator);
11122 declarator = dname;
11123 }
11124 else
419c6212 11125 /* Unexpected declarator format. */
efe38fab
JM
11126 my_friendly_abort (990210);
11127
419c6212
JM
11128 /* If this is declaring a typedef name, return a TYPE_DECL. */
11129
fc378698 11130 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
11131 {
11132 tree decl;
11133
11134 /* Note that the grammar rejects storage classes
11135 in typenames, fields or parameters. */
eff71ab0
PB
11136 if (current_lang_name == lang_name_java)
11137 TYPE_FOR_JAVA (type) = 1;
8d08fdba 11138
d2e5ee5c
MS
11139 if (decl_context == FIELD)
11140 {
094fe153 11141 if (declarator == constructor_name (current_class_type))
cb9a3ff8 11142 cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
d2e5ee5c
MS
11143 declarator);
11144 decl = build_lang_decl (TYPE_DECL, declarator, type);
d2e5ee5c
MS
11145 }
11146 else
6dfbb909 11147 decl = build_decl (TYPE_DECL, declarator, type);
d2e5ee5c 11148
9188c363
MM
11149 /* If the user declares "typedef struct {...} foo" then the
11150 struct will have an anonymous name. Fill that name in now.
11151 Nothing can refer to it, so nothing needs know about the name
11152 change. */
8d08fdba 11153 if (type != error_mark_node
2bdb0643 11154 && declarator
8d08fdba
MS
11155 && TYPE_NAME (type)
11156 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
b537d120
MM
11157 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
11158 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
8d08fdba 11159 {
dcd08efc
JM
11160 tree oldname = TYPE_NAME (type);
11161 tree t;
11162
2c73f9f5 11163 /* Replace the anonymous name with the real name everywhere. */
8d08fdba 11164 lookup_tag_reverse (type, declarator);
dcd08efc
JM
11165 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11166 if (TYPE_NAME (t) == oldname)
11167 TYPE_NAME (t) = decl;
8d08fdba
MS
11168
11169 if (TYPE_LANG_SPECIFIC (type))
11170 TYPE_WAS_ANONYMOUS (type) = 1;
11171
33964bf4
MM
11172 /* If this is a typedef within a template class, the nested
11173 type is a (non-primary) template. The name for the
11174 template needs updating as well. */
11175 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 11176 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
11177 = TYPE_IDENTIFIER (type);
11178
5362b086 11179 if (flag_new_abi)
669ec2b4
JM
11180 DECL_ASSEMBLER_NAME (decl) = mangle_type (type);
11181 else
11182 {
11183 /* XXX Temporarily set the scope.
11184 When returning, start_decl expects it as NULL_TREE,
11185 and will then then set it using pushdecl. */
11186 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
11187 if (current_class_type)
11188 DECL_CONTEXT (decl) = current_class_type;
11189 else
11190 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5362b086 11191
669ec2b4
JM
11192 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
11193 DECL_ASSEMBLER_NAME (decl)
11194 = get_identifier (build_overload_name (type, 1, 1));
11195 DECL_CONTEXT (decl) = NULL_TREE;
11196 }
50a6dbd7
JM
11197
11198 /* FIXME remangle member functions; member functions of a
11199 type with external linkage have external linkage. */
fc378698 11200 }
fc378698 11201
8d08fdba
MS
11202 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
11203 {
8251199e 11204 cp_error_at ("typedef name may not be class-qualified", decl);
a3203465 11205 return NULL_TREE;
8d08fdba
MS
11206 }
11207 else if (quals)
11208 {
11209 if (ctype == NULL_TREE)
11210 {
11211 if (TREE_CODE (type) != METHOD_TYPE)
cb9a3ff8 11212 cp_error_at ("invalid type qualifier for non-member function type", decl);
8d08fdba
MS
11213 else
11214 ctype = TYPE_METHOD_BASETYPE (type);
11215 }
11216 if (ctype != NULL_TREE)
11217 grok_method_quals (ctype, decl, quals);
11218 }
11219
11220 if (RIDBIT_SETP (RID_SIGNED, specbits)
11221 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11222 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11223
c91a56d2
MS
11224 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11225 inlinep, friendp, raises != NULL_TREE);
11226
11227 if (initialized)
8251199e 11228 error ("typedef declaration includes an initializer");
c91a56d2 11229
8d08fdba
MS
11230 return decl;
11231 }
11232
11233 /* Detect the case of an array type of unspecified size
11234 which came, as such, direct from a typedef name.
11235 We must copy the type, so that each identifier gets
11236 a distinct type, so that each identifier's size can be
11237 controlled separately by its own initializer. */
11238
11239 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11240 && TYPE_DOMAIN (type) == NULL_TREE)
11241 {
11242 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11243 }
11244
11245 /* If this is a type name (such as, in a cast or sizeof),
11246 compute the type and return it now. */
11247
11248 if (decl_context == TYPENAME)
11249 {
11250 /* Note that the grammar rejects storage classes
11251 in typenames, fields or parameters. */
91063b51 11252 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 11253 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
11254
11255 /* Special case: "friend class foo" looks like a TYPENAME context. */
11256 if (friendp)
11257 {
91063b51 11258 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 11259 {
91063b51
MM
11260 cp_error ("type qualifiers specified for friend class declaration");
11261 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
11262 }
11263 if (inlinep)
11264 {
8251199e 11265 cp_error ("`inline' specified for friend class declaration");
b7484fbe
MS
11266 inlinep = 0;
11267 }
f2ae0c45
JM
11268
11269 /* Until core issue 180 is resolved, allow 'friend typename A::B'.
11270 But don't allow implicit typenames. */
11271 if (!current_aggr && (TREE_CODE (type) != TYPENAME_TYPE
11272 || IMPLICIT_TYPENAME_P (type)))
4b054b80
NS
11273 {
11274 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
f2ae0c45
JM
11275 cp_pedwarn ("template parameters cannot be friends");
11276 else if (TREE_CODE (type) == TYPENAME_TYPE)
11277 cp_pedwarn ("\
11278friend declaration requires class-key, i.e. `friend class %T::%T'",
11279 constructor_name (current_class_type),
11280 TYPE_IDENTIFIER (type));
4b054b80 11281 else
f2ae0c45
JM
11282 cp_pedwarn ("\
11283friend declaration requires class-key, i.e. `friend %#T'",
11284 type);
4b054b80 11285 }
b7484fbe
MS
11286
11287 /* Only try to do this stuff if we didn't already give up. */
11288 if (type != integer_type_node)
11289 {
11290 /* A friendly class? */
11291 if (current_class_type)
11292 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11293 else
2ae7bada
NS
11294 cp_error ("trying to make class `%T' a friend of global scope",
11295 type);
b7484fbe
MS
11296 type = void_type_node;
11297 }
8d08fdba
MS
11298 }
11299 else if (quals)
11300 {
8d08fdba
MS
11301 if (ctype == NULL_TREE)
11302 {
41cbc04c
NS
11303 if (TREE_CODE (type) != METHOD_TYPE)
11304 cp_error ("invalid qualifiers on non-member function type");
11305 else
11306 ctype = TYPE_METHOD_BASETYPE (type);
11307 }
11308 if (ctype)
11309 {
11310 tree dummy = build_decl (TYPE_DECL, declarator, type);
11311 grok_method_quals (ctype, dummy, quals);
11312 type = TREE_TYPE (dummy);
8d08fdba 11313 }
8d08fdba
MS
11314 }
11315
11316 return type;
11317 }
11318 else if (declarator == NULL_TREE && decl_context != PARM
db5ae43f 11319 && decl_context != CATCHPARM
8d08fdba
MS
11320 && TREE_CODE (type) != UNION_TYPE
11321 && ! bitfield)
11322 {
8251199e 11323 cp_error ("abstract declarator `%T' used as declaration", type);
8d08fdba
MS
11324 declarator = make_anon_name ();
11325 }
11326
11327 /* `void' at top level (not within pointer)
11328 is allowed only in typedefs or type names.
11329 We don't complain about parms either, but that is because
11330 a better error message can be made later. */
11331
a1774733 11332 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
8d08fdba 11333 {
b7484fbe 11334 if (! declarator)
8251199e 11335 error ("unnamed variable or field declared void");
b7484fbe 11336 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
11337 {
11338 if (IDENTIFIER_OPNAME_P (declarator))
8d08fdba 11339 my_friendly_abort (356);
8d08fdba 11340 else
8251199e 11341 error ("variable or field `%s' declared void", name);
8d08fdba
MS
11342 }
11343 else
8251199e 11344 error ("variable or field declared void");
8d08fdba
MS
11345 type = integer_type_node;
11346 }
11347
11348 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11349 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11350
14ae7e7d
JM
11351 if (decl_context == PARM || decl_context == CATCHPARM)
11352 {
11353 if (ctype || in_namespace)
11354 error ("cannot use `::' in parameter declaration");
11355
11356 /* A parameter declared as an array of T is really a pointer to T.
11357 One declared as a function is really a pointer to a function.
11358 One declared as a member is really a pointer to member. */
11359
11360 if (TREE_CODE (type) == ARRAY_TYPE)
11361 {
11362 /* Transfer const-ness of array into that of type pointed to. */
11363 type = build_pointer_type (TREE_TYPE (type));
91063b51 11364 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
11365 }
11366 else if (TREE_CODE (type) == FUNCTION_TYPE)
11367 type = build_pointer_type (type);
11368 else if (TREE_CODE (type) == OFFSET_TYPE)
11369 type = build_pointer_type (type);
11370 else if (TREE_CODE (type) == VOID_TYPE && declarator)
11371 {
11372 error ("declaration of `%s' as void", name);
11373 return NULL_TREE;
11374 }
11375 }
68642fb6 11376
8d08fdba
MS
11377 {
11378 register tree decl;
11379
11380 if (decl_context == PARM)
11381 {
ff350acd 11382 decl = build_decl (PARM_DECL, declarator, type);
8d08fdba
MS
11383
11384 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11385 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
11386
11387 /* Compute the type actually passed in the parmlist,
11388 for the case where there is no prototype.
11389 (For example, shorts and chars are passed as ints.)
11390 When there is a prototype, this is overridden later. */
11391
39211cd5 11392 DECL_ARG_TYPE (decl) = type_promotes_to (type);
8d08fdba
MS
11393 }
11394 else if (decl_context == FIELD)
11395 {
11396 if (type == error_mark_node)
11397 {
11398 /* Happens when declaring arrays of sizes which
11399 are error_mark_node, for example. */
11400 decl = NULL_TREE;
11401 }
997a088c 11402 else if (in_namespace && !friendp)
05008fb9
MM
11403 {
11404 /* Something like struct S { int N::j; }; */
8251199e 11405 cp_error ("invalid use of `::'");
05008fb9
MM
11406 decl = NULL_TREE;
11407 }
8d08fdba
MS
11408 else if (TREE_CODE (type) == FUNCTION_TYPE)
11409 {
11410 int publicp = 0;
e1467ff2 11411 tree function_context;
8d08fdba 11412
72b7eeff
MS
11413 /* We catch the others as conflicts with the builtin
11414 typedefs. */
11415 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11416 {
8251199e 11417 cp_error ("function `%D' cannot be declared friend",
72b7eeff
MS
11418 declarator);
11419 friendp = 0;
11420 }
11421
8d08fdba
MS
11422 if (friendp == 0)
11423 {
11424 if (ctype == NULL_TREE)
11425 ctype = current_class_type;
11426
11427 if (ctype == NULL_TREE)
11428 {
8251199e 11429 cp_error ("can't make `%D' into a method -- not in a class",
8d08fdba
MS
11430 declarator);
11431 return void_type_node;
11432 }
11433
11434 /* ``A union may [ ... ] not [ have ] virtual functions.''
11435 ARM 9.5 */
11436 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11437 {
8251199e 11438 cp_error ("function `%D' declared virtual inside a union",
8d08fdba
MS
11439 declarator);
11440 return void_type_node;
11441 }
11442
596ea4e5
AS
11443 if (declarator == ansi_opname (NEW_EXPR)
11444 || declarator == ansi_opname (VEC_NEW_EXPR)
11445 || declarator == ansi_opname (DELETE_EXPR)
11446 || declarator == ansi_opname (VEC_DELETE_EXPR))
8d08fdba
MS
11447 {
11448 if (virtualp)
11449 {
8251199e 11450 cp_error ("`%D' cannot be declared virtual, since it is always static",
8d08fdba
MS
11451 declarator);
11452 virtualp = 0;
11453 }
11454 }
11455 else if (staticp < 2)
14ae7e7d
JM
11456 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11457 TYPE_ARG_TYPES (type));
8d08fdba
MS
11458 }
11459
11460 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 11461 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 11462 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
11463 publicp = (! friendp || ! staticp)
11464 && function_context == NULL_TREE;
68642fb6 11465 decl = grokfndecl (ctype, type,
386b8a85
JM
11466 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11467 ? declarator : dname,
11468 declarator,
7a8f9fa9 11469 virtualp, flags, quals, raises,
386b8a85 11470 friendp ? -1 : 0, friendp, publicp, inlinep,
2c73f9f5 11471 funcdef_flag, template_count, in_namespace);
20496fa2 11472 if (decl == NULL_TREE)
3ddfb0e6 11473 return decl;
6125f3be
DE
11474#if 0
11475 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11476 /* The decl and setting of decl_machine_attr is also turned off. */
71851aaa 11477 decl = build_decl_attribute_variant (decl, decl_machine_attr);
6125f3be 11478#endif
f0e01782 11479
cc804e51
MM
11480 /* [class.conv.ctor]
11481
11482 A constructor declared without the function-specifier
11483 explicit that can be called with a single parameter
11484 specifies a conversion from the type of its first
11485 parameter to the type of its class. Such a constructor
11486 is called a converting constructor. */
db5ae43f
MS
11487 if (explicitp == 2)
11488 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
11489 else if (DECL_CONSTRUCTOR_P (decl))
11490 {
11491 /* The constructor can be called with exactly one
11492 parameter if there is at least one parameter, and
11493 any subsequent parameters have default arguments.
11494 We don't look at the first parameter, which is
11495 really just the `this' parameter for the new
11496 object. */
68642fb6 11497 tree arg_types =
cc804e51
MM
11498 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11499
11500 /* Skip the `in_chrg' argument too, if present. */
454fa7a7 11501 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
cc804e51
MM
11502 arg_types = TREE_CHAIN (arg_types);
11503
11504 if (arg_types == void_list_node
68642fb6
UD
11505 || (arg_types
11506 && TREE_CHAIN (arg_types)
cc804e51
MM
11507 && TREE_CHAIN (arg_types) != void_list_node
11508 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11509 DECL_NONCONVERTING_P (decl) = 1;
11510 }
8d08fdba
MS
11511 }
11512 else if (TREE_CODE (type) == METHOD_TYPE)
11513 {
faae18ab
MS
11514 /* We only get here for friend declarations of
11515 members of other classes. */
8d08fdba
MS
11516 /* All method decls are public, so tell grokfndecl to set
11517 TREE_PUBLIC, also. */
386b8a85 11518 decl = grokfndecl (ctype, type, declarator, declarator,
7a8f9fa9 11519 virtualp, flags, quals, raises,
386b8a85 11520 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
2c73f9f5 11521 template_count, in_namespace);
f0e01782
MS
11522 if (decl == NULL_TREE)
11523 return NULL_TREE;
8d08fdba 11524 }
5566b478 11525 else if (!staticp && ! processing_template_decl
d0f062fb 11526 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
11527 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11528 {
b7484fbe 11529 if (declarator)
8251199e 11530 cp_error ("field `%D' has incomplete type", declarator);
b7484fbe 11531 else
8251199e 11532 cp_error ("name `%T' has incomplete type", type);
8d08fdba
MS
11533
11534 /* If we're instantiating a template, tell them which
11535 instantiation made the field's type be incomplete. */
11536 if (current_class_type
11537 && TYPE_NAME (current_class_type)
d2e5ee5c 11538 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
11539 && declspecs && TREE_VALUE (declspecs)
11540 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
8251199e 11541 cp_error (" in instantiation of template `%T'",
db5ae43f
MS
11542 current_class_type);
11543
8d08fdba
MS
11544 type = error_mark_node;
11545 decl = NULL_TREE;
11546 }
11547 else
11548 {
11549 if (friendp)
11550 {
cb9a3ff8 11551 error ("`%s' is neither function nor member function; cannot be declared friend",
8d08fdba
MS
11552 IDENTIFIER_POINTER (declarator));
11553 friendp = 0;
11554 }
11555 decl = NULL_TREE;
11556 }
11557
11558 if (friendp)
11559 {
11560 /* Friends are treated specially. */
11561 if (ctype == current_class_type)
8251199e 11562 warning ("member functions are implicitly friends of their class");
8d08fdba
MS
11563 else
11564 {
11565 tree t = NULL_TREE;
11566 if (decl && DECL_NAME (decl))
36a117a5
MM
11567 {
11568 if (template_class_depth (current_class_type) == 0)
6c30752f 11569 {
68642fb6
UD
11570 decl
11571 = check_explicit_specialization
6c30752f
MM
11572 (declarator, decl,
11573 template_count, 2 * (funcdef_flag != 0) + 4);
11574 if (decl == error_mark_node)
11575 return error_mark_node;
11576 }
11577
36a117a5 11578 t = do_friend (ctype, declarator, decl,
7a8f9fa9 11579 last_function_parms, attrlist, flags, quals,
36a117a5
MM
11580 funcdef_flag);
11581 }
8d08fdba
MS
11582 if (t && funcdef_flag)
11583 return t;
68642fb6 11584
8d08fdba
MS
11585 return void_type_node;
11586 }
11587 }
11588
11589 /* Structure field. It may not be a function, except for C++ */
11590
11591 if (decl == NULL_TREE)
11592 {
8d08fdba
MS
11593 if (initialized)
11594 {
3ac3d9ea
MM
11595 if (!staticp)
11596 {
11597 /* An attempt is being made to initialize a non-static
11598 member. But, from [class.mem]:
68642fb6 11599
3ac3d9ea
MM
11600 4 A member-declarator can contain a
11601 constant-initializer only if it declares a static
11602 member (_class.static_) of integral or enumeration
68642fb6 11603 type, see _class.static.data_.
3ac3d9ea
MM
11604
11605 This used to be relatively common practice, but
11606 the rest of the compiler does not correctly
11607 handle the initialization unless the member is
11608 static so we make it static below. */
cab1f180 11609 cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
3ac3d9ea 11610 declarator);
8251199e 11611 cp_pedwarn ("making `%D' static", declarator);
3ac3d9ea
MM
11612 staticp = 1;
11613 }
11614
6ba89f8e
MM
11615 if (uses_template_parms (type))
11616 /* We'll check at instantiation time. */
11617 ;
11618 else if (check_static_variable_definition (declarator,
11619 type))
11620 /* If we just return the declaration, crashes
11621 will sometimes occur. We therefore return
72a93143
JM
11622 void_type_node, as if this was a friend
11623 declaration, to cause callers to completely
11624 ignore this declaration. */
6ba89f8e 11625 return void_type_node;
8d08fdba
MS
11626 }
11627
8ebeee52 11628 /* 9.2p13 [class.mem] */
4d7614e9 11629 if (declarator == constructor_name (current_class_type)
e54930f9
JM
11630 /* The standard does not allow non-static data members
11631 here either, but we agreed at the 10/99 meeting
11632 to change that in TC 1 so that they are allowed in
11633 classes with no user-defined constructors. */
11634 && staticp)
11635 cp_pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
8ebeee52
JM
11636 declarator);
11637
3ac3d9ea 11638 if (staticp)
8d08fdba 11639 {
f18a14bc
MM
11640 /* C++ allows static class members. All other work
11641 for this is done by grokfield. */
4ce3d537 11642 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68
MS
11643 TREE_STATIC (decl) = 1;
11644 /* In class context, 'static' means public access. */
3ac3d9ea 11645 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8d08fdba
MS
11646 }
11647 else
11648 {
721c3b42 11649 decl = build_decl (FIELD_DECL, declarator, type);
2bf105ab 11650 DECL_NONADDRESSABLE_P (decl) = bitfield;
8d08fdba
MS
11651 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11652 {
11653 DECL_MUTABLE_P (decl) = 1;
11654 RIDBIT_RESET (RID_MUTABLE, specbits);
11655 }
11656 }
11657
11658 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11659 inlinep, friendp, raises != NULL_TREE);
11660 }
11661 }
11662 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11663 {
386b8a85 11664 tree original_name;
8d08fdba
MS
11665 int publicp = 0;
11666
11667 if (! declarator)
11668 return NULL_TREE;
11669
386b8a85
JM
11670 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11671 original_name = dname;
11672 else
11673 original_name = declarator;
11674
8926095f 11675 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 11676 error ("storage class `auto' invalid for function `%s'", name);
8926095f 11677 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 11678 error ("storage class `register' invalid for function `%s'", name);
8d08fdba
MS
11679
11680 /* Function declaration not at top level.
11681 Storage classes other than `extern' are not allowed
11682 and `extern' makes no difference. */
a9aedbc2 11683 if (! toplevel_bindings_p ()
8926095f
MS
11684 && (RIDBIT_SETP (RID_STATIC, specbits)
11685 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 11686 && pedantic)
8926095f
MS
11687 {
11688 if (RIDBIT_SETP (RID_STATIC, specbits))
8251199e 11689 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8926095f 11690 else
8251199e 11691 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8926095f 11692 }
68642fb6 11693
8d08fdba
MS
11694 if (ctype == NULL_TREE)
11695 {
11696 if (virtualp)
11697 {
8251199e 11698 error ("virtual non-class function `%s'", name);
8d08fdba
MS
11699 virtualp = 0;
11700 }
8d08fdba
MS
11701 }
11702 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
14ae7e7d
JM
11703 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11704 TYPE_ARG_TYPES (type));
8d08fdba 11705
eb66be0e 11706 /* Record presence of `static'. */
faae18ab 11707 publicp = (ctype != NULL_TREE
a9aedbc2 11708 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 11709 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 11710
386b8a85 11711 decl = grokfndecl (ctype, type, original_name, declarator,
7a8f9fa9 11712 virtualp, flags, quals, raises,
75650646 11713 1, friendp,
68642fb6 11714 publicp, inlinep, funcdef_flag,
2c73f9f5 11715 template_count, in_namespace);
f0e01782
MS
11716 if (decl == NULL_TREE)
11717 return NULL_TREE;
8d08fdba 11718
8d08fdba
MS
11719 if (staticp == 1)
11720 {
11721 int illegal_static = 0;
11722
11723 /* Don't allow a static member function in a class, and forbid
11724 declaring main to be static. */
11725 if (TREE_CODE (type) == METHOD_TYPE)
11726 {
8251199e 11727 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8d08fdba
MS
11728 illegal_static = 1;
11729 }
8d08fdba
MS
11730 else if (current_function_decl)
11731 {
11732 /* FIXME need arm citation */
8251199e 11733 error ("cannot declare static function inside another function");
8d08fdba
MS
11734 illegal_static = 1;
11735 }
11736
11737 if (illegal_static)
11738 {
11739 staticp = 0;
11740 RIDBIT_RESET (RID_STATIC, specbits);
11741 }
11742 }
8d08fdba
MS
11743 }
11744 else
11745 {
11746 /* It's a variable. */
11747
11748 /* An uninitialized decl with `extern' is a reference. */
68642fb6
UD
11749 decl = grokvardecl (type, declarator, &specbits,
11750 initialized,
11751 (type_quals & TYPE_QUAL_CONST) != 0,
950ad3c3 11752 in_namespace);
8d08fdba
MS
11753 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11754 inlinep, friendp, raises != NULL_TREE);
11755
11756 if (ctype)
11757 {
f0e01782 11758 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
11759 if (staticp == 1)
11760 {
8251199e 11761 cp_pedwarn ("static member `%D' re-declared as static", decl);
8d08fdba
MS
11762 staticp = 0;
11763 RIDBIT_RESET (RID_STATIC, specbits);
11764 }
b7484fbe
MS
11765 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11766 {
8251199e 11767 cp_error ("static member `%D' declared `register'", decl);
b7484fbe
MS
11768 RIDBIT_RESET (RID_REGISTER, specbits);
11769 }
f30432d7 11770 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 11771 {
8251199e 11772 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
f30432d7 11773 decl);
8d08fdba
MS
11774 RIDBIT_RESET (RID_EXTERN, specbits);
11775 }
11776 }
11777 }
11778
34fc957d 11779 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8d08fdba
MS
11780
11781 /* Record `register' declaration for warnings on &
11782 and in case doing stupid register allocation. */
11783
11784 if (RIDBIT_SETP (RID_REGISTER, specbits))
11785 DECL_REGISTER (decl) = 1;
11786
8926095f
MS
11787 if (RIDBIT_SETP (RID_EXTERN, specbits))
11788 DECL_THIS_EXTERN (decl) = 1;
11789
faae18ab
MS
11790 if (RIDBIT_SETP (RID_STATIC, specbits))
11791 DECL_THIS_STATIC (decl) = 1;
11792
adecb3f4
MM
11793 /* Record constancy and volatility. There's no need to do this
11794 when processing a template; we'll do this for the instantiated
11795 declaration based on the type of DECL. */
11796 if (!processing_template_decl)
11797 c_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
11798
11799 return decl;
11800 }
11801}
11802\f
11803/* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11804 An empty exprlist is a parmlist. An exprlist which
11805 contains only identifiers at the global level
11806 is a parmlist. Otherwise, it is an exprlist. */
e92cc029 11807
8d08fdba
MS
11808int
11809parmlist_is_exprlist (exprs)
11810 tree exprs;
11811{
11812 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11813 return 0;
11814
a9aedbc2 11815 if (toplevel_bindings_p ())
8d08fdba
MS
11816 {
11817 /* At the global level, if these are all identifiers,
11818 then it is a parmlist. */
11819 while (exprs)
11820 {
11821 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11822 return 1;
11823 exprs = TREE_CHAIN (exprs);
11824 }
11825 return 0;
11826 }
11827 return 1;
11828}
11829
f181d4ae
MM
11830/* Subroutine of start_function. Ensure that each of the parameter
11831 types (as listed in PARMS) is complete, as is required for a
11832 function definition. */
e92cc029 11833
8d08fdba
MS
11834static void
11835require_complete_types_for_parms (parms)
11836 tree parms;
11837{
07c88314 11838 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba
MS
11839 {
11840 tree type = TREE_TYPE (parms);
07c88314
MM
11841
11842 /* Try to complete the TYPE. */
11843 type = complete_type (type);
11844
11845 if (type == error_mark_node)
11846 continue;
11847
d0f062fb 11848 if (!COMPLETE_TYPE_P (type))
8d08fdba
MS
11849 {
11850 if (DECL_NAME (parms))
8251199e 11851 error ("parameter `%s' has incomplete type",
8d08fdba
MS
11852 IDENTIFIER_POINTER (DECL_NAME (parms)));
11853 else
8251199e 11854 error ("parameter has incomplete type");
8d08fdba
MS
11855 TREE_TYPE (parms) = error_mark_node;
11856 }
42f989ff
JM
11857 else
11858 layout_decl (parms, 0);
8d08fdba
MS
11859 }
11860}
11861
46e8c075 11862/* Returns non-zero if T is a local variable. */
297e73d8 11863
46e8c075
MM
11864int
11865local_variable_p (t)
11866 tree t;
297e73d8 11867{
68642fb6 11868 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
11869 /* A VAR_DECL with a context that is a _TYPE is a static data
11870 member. */
11871 && !TYPE_P (CP_DECL_CONTEXT (t))
11872 /* Any other non-local variable must be at namespace scope. */
46e8c075 11873 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 11874 || (TREE_CODE (t) == PARM_DECL))
46e8c075 11875 return 1;
297e73d8 11876
46e8c075
MM
11877 return 0;
11878}
11879
11880/* Returns non-zero if T is an automatic local variable or a label.
11881 (These are the declarations that need to be remapped when the code
11882 containing them is duplicated.) */
11883
11884int
11885nonstatic_local_decl_p (t)
11886 tree t;
11887{
11888 return ((local_variable_p (t) && !TREE_STATIC (t))
11889 || TREE_CODE (t) == LABEL_DECL
11890 || TREE_CODE (t) == RESULT_DECL);
11891}
11892
11893/* Like local_variable_p, but suitable for use as a tree-walking
11894 function. */
11895
11896static tree
11897local_variable_p_walkfn (tp, walk_subtrees, data)
11898 tree *tp;
11899 int *walk_subtrees ATTRIBUTE_UNUSED;
11900 void *data ATTRIBUTE_UNUSED;
11901{
68642fb6 11902 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
46e8c075 11903 ? *tp : NULL_TREE);
297e73d8
MM
11904}
11905
11906/* Check that ARG, which is a default-argument expression for a
11907 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11908 something goes wrong. DECL may also be a _TYPE node, rather than a
11909 DECL, if there is no DECL available. */
11910
11911tree
11912check_default_argument (decl, arg)
11913 tree decl;
11914 tree arg;
11915{
11916 tree var;
11917 tree decl_type;
11918
11919 if (TREE_CODE (arg) == DEFAULT_ARG)
11920 /* We get a DEFAULT_ARG when looking at an in-class declaration
11921 with a default argument. Ignore the argument for now; we'll
11922 deal with it after the class is complete. */
11923 return arg;
11924
11925 if (processing_template_decl || uses_template_parms (arg))
11926 /* We don't do anything checking until instantiation-time. Note
11927 that there may be uninstantiated arguments even for an
11928 instantiated function, since default arguments are not
11929 instantiated until they are needed. */
11930 return arg;
11931
11932 if (TYPE_P (decl))
11933 {
11934 decl_type = decl;
11935 decl = NULL_TREE;
11936 }
11937 else
11938 decl_type = TREE_TYPE (decl);
11939
68642fb6 11940 if (arg == error_mark_node
297e73d8
MM
11941 || decl == error_mark_node
11942 || TREE_TYPE (arg) == error_mark_node
11943 || decl_type == error_mark_node)
11944 /* Something already went wrong. There's no need to check
11945 further. */
11946 return error_mark_node;
11947
11948 /* [dcl.fct.default]
68642fb6 11949
297e73d8
MM
11950 A default argument expression is implicitly converted to the
11951 parameter type. */
11952 if (!TREE_TYPE (arg)
11953 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11954 {
11955 if (decl)
68642fb6 11956 cp_error ("default argument for `%#D' has type `%T'",
297e73d8
MM
11957 decl, TREE_TYPE (arg));
11958 else
8614a1d6 11959 cp_error ("default argument for parameter of type `%T' has type `%T'",
297e73d8
MM
11960 decl_type, TREE_TYPE (arg));
11961
11962 return error_mark_node;
11963 }
11964
11965 /* [dcl.fct.default]
11966
11967 Local variables shall not be used in default argument
68642fb6 11968 expressions.
297e73d8
MM
11969
11970 The keyword `this' shall not be used in a default argument of a
11971 member function. */
5362b086 11972 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
ee94fce6 11973 NULL);
297e73d8
MM
11974 if (var)
11975 {
11976 cp_error ("default argument `%E' uses local variable `%D'",
11977 arg, var);
11978 return error_mark_node;
11979 }
11980
11981 /* All is well. */
11982 return arg;
11983}
11984
8d08fdba
MS
11985/* Decode the list of parameter types for a function type.
11986 Given the list of things declared inside the parens,
11987 return a list of types.
11988
11989 The list we receive can have three kinds of elements:
11990 an IDENTIFIER_NODE for names given without types,
11991 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11992 or void_type_node, to mark the end of an argument list
11993 when additional arguments are not permitted (... was not used).
11994
11995 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11996 a mere declaration. A nonempty identifier-list gets an error message
11997 when FUNCDEF_FLAG is zero.
11998 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11999 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
12000
12001 If all elements of the input list contain types,
12002 we return a list of the types.
12003 If all elements contain no type (except perhaps a void_type_node
12004 at the end), we return a null list.
12005 If some have types and some do not, it is an error, and we
12006 return a null list.
12007
12008 Also set last_function_parms to either
12009 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
12010 A list of names is converted to a chain of PARM_DECLs
12011 by store_parm_decls so that ultimately it is always a chain of decls.
12012
12013 Note that in C++, parameters can take default values. These default
12014 values are in the TREE_PURPOSE field of the TREE_LIST. It is
12015 an error to specify default values which are followed by parameters
12016 that have no default values, or an ELLIPSES. For simplicities sake,
12017 only parameters which are specified with their types can take on
12018 default values. */
12019
12020static tree
12021grokparms (first_parm, funcdef_flag)
12022 tree first_parm;
12023 int funcdef_flag;
12024{
12025 tree result = NULL_TREE;
12026 tree decls = NULL_TREE;
12027
12028 if (first_parm != NULL_TREE
12029 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
12030 {
12031 if (! funcdef_flag)
8251199e 12032 pedwarn ("parameter names (without types) in function declaration");
8d08fdba
MS
12033 last_function_parms = first_parm;
12034 return NULL_TREE;
12035 }
12036 else if (first_parm != NULL_TREE
12037 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
a1774733 12038 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
8d08fdba
MS
12039 my_friendly_abort (145);
12040 else
12041 {
12042 /* Types were specified. This is a list of declarators
12043 each represented as a TREE_LIST node. */
12044 register tree parm, chain;
5566b478 12045 int any_init = 0, any_error = 0;
8d08fdba
MS
12046
12047 if (first_parm != NULL_TREE)
12048 {
12049 tree last_result = NULL_TREE;
12050 tree last_decl = NULL_TREE;
12051
12052 for (parm = first_parm; parm != NULL_TREE; parm = chain)
12053 {
a703fb38 12054 tree type = NULL_TREE, list_node = parm;
8d08fdba
MS
12055 register tree decl = TREE_VALUE (parm);
12056 tree init = TREE_PURPOSE (parm);
12057
12058 chain = TREE_CHAIN (parm);
12059 /* @@ weak defense against parse errors. */
68642fb6 12060 if (TREE_CODE (decl) != VOID_TYPE
a1774733 12061 && TREE_CODE (decl) != TREE_LIST)
8d08fdba
MS
12062 {
12063 /* Give various messages as the need arises. */
12064 if (TREE_CODE (decl) == STRING_CST)
8251199e 12065 cp_error ("invalid string constant `%E'", decl);
8d08fdba 12066 else if (TREE_CODE (decl) == INTEGER_CST)
8251199e 12067 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
8d08fdba
MS
12068 continue;
12069 }
12070
a1774733 12071 if (TREE_CODE (decl) != VOID_TYPE)
8d08fdba 12072 {
8d08fdba
MS
12073 decl = grokdeclarator (TREE_VALUE (decl),
12074 TREE_PURPOSE (decl),
f30432d7 12075 PARM, init != NULL_TREE,
c11b6f21 12076 NULL_TREE);
3bfdc719 12077 if (! decl || TREE_TYPE (decl) == error_mark_node)
8d08fdba 12078 continue;
01240200
MM
12079
12080 /* Top-level qualifiers on the parameters are
12081 ignored for function types. */
12082 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
12083
a1774733 12084 if (TREE_CODE (type) == VOID_TYPE)
8d08fdba
MS
12085 decl = void_type_node;
12086 else if (TREE_CODE (type) == METHOD_TYPE)
12087 {
12088 if (DECL_NAME (decl))
fc378698 12089 /* Cannot use the decl here because
8d08fdba 12090 we don't have DECL_CONTEXT set up yet. */
8251199e 12091 cp_error ("parameter `%D' invalidly declared method type",
fc378698 12092 DECL_NAME (decl));
8d08fdba 12093 else
8251199e 12094 error ("parameter invalidly declared method type");
8d08fdba
MS
12095 type = build_pointer_type (type);
12096 TREE_TYPE (decl) = type;
12097 }
12098 else if (TREE_CODE (type) == OFFSET_TYPE)
12099 {
12100 if (DECL_NAME (decl))
8251199e 12101 cp_error ("parameter `%D' invalidly declared offset type",
fc378698 12102 DECL_NAME (decl));
8d08fdba 12103 else
8251199e 12104 error ("parameter invalidly declared offset type");
8d08fdba
MS
12105 type = build_pointer_type (type);
12106 TREE_TYPE (decl) = type;
12107 }
a7a64a77
MM
12108 else if (abstract_virtuals_error (decl, type))
12109 any_error = 1; /* Seems like a good idea. */
482b883f
JM
12110 else if (POINTER_TYPE_P (type))
12111 {
12112 tree t = type;
12113 while (POINTER_TYPE_P (t)
12114 || (TREE_CODE (t) == ARRAY_TYPE
12115 && TYPE_DOMAIN (t) != NULL_TREE))
12116 t = TREE_TYPE (t);
12117 if (TREE_CODE (t) == ARRAY_TYPE)
57af8358
MM
12118 cp_error ("parameter type `%T' includes %s to array of unknown bound",
12119 type,
12120 TYPE_PTR_P (type) ? "pointer" : "reference");
482b883f 12121 }
8d08fdba
MS
12122 }
12123
a1774733 12124 if (TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
12125 {
12126 if (result == NULL_TREE)
12127 {
12128 result = void_list_node;
12129 last_result = result;
12130 }
12131 else
12132 {
12133 TREE_CHAIN (last_result) = void_list_node;
12134 last_result = void_list_node;
12135 }
8d08fdba
MS
12136 if (chain
12137 && (chain != void_list_node || TREE_CHAIN (chain)))
8251199e 12138 error ("`void' in parameter list must be entire list");
8d08fdba
MS
12139 break;
12140 }
12141
12142 /* Since there is a prototype, args are passed in their own types. */
12143 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
fa56377d
JJ
12144 if (PROMOTE_PROTOTYPES
12145 && (TREE_CODE (type) == INTEGER_TYPE
12146 || TREE_CODE (type) == ENUMERAL_TYPE)
8d08fdba
MS
12147 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
12148 DECL_ARG_TYPE (decl) = integer_type_node;
297e73d8 12149 if (!any_error && init)
8d08fdba 12150 {
297e73d8
MM
12151 any_init++;
12152 init = check_default_argument (decl, init);
8d08fdba
MS
12153 }
12154 else
12155 init = NULL_TREE;
12156
12157 if (decls == NULL_TREE)
12158 {
12159 decls = decl;
12160 last_decl = decls;
12161 }
12162 else
12163 {
12164 TREE_CHAIN (last_decl) = decl;
12165 last_decl = decl;
12166 }
5868eb4e 12167 list_node = tree_cons (init, type, NULL_TREE);
8d08fdba
MS
12168 if (result == NULL_TREE)
12169 {
12170 result = list_node;
12171 last_result = result;
12172 }
12173 else
12174 {
12175 TREE_CHAIN (last_result) = list_node;
12176 last_result = list_node;
12177 }
12178 }
12179 if (last_result)
12180 TREE_CHAIN (last_result) = NULL_TREE;
12181 /* If there are no parameters, and the function does not end
12182 with `...', then last_decl will be NULL_TREE. */
12183 if (last_decl != NULL_TREE)
12184 TREE_CHAIN (last_decl) = NULL_TREE;
12185 }
12186 }
12187
12188 last_function_parms = decls;
12189
8d08fdba
MS
12190 return result;
12191}
42976354
BK
12192
12193/* Called from the parser to update an element of TYPE_ARG_TYPES for some
12194 FUNCTION_TYPE with the newly parsed version of its default argument, which
12195 was previously digested as text. See snarf_defarg et al in lex.c. */
12196
12197void
12198replace_defarg (arg, init)
12199 tree arg, init;
12200{
aa5f3bad 12201 if (! processing_template_decl
42976354 12202 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
8251199e 12203 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
42976354
BK
12204 TREE_TYPE (init), TREE_VALUE (arg));
12205 TREE_PURPOSE (arg) = init;
12206}
8d08fdba 12207\f
4f1c5b7d
MM
12208/* D is a constructor or overloaded `operator='. Returns non-zero if
12209 D's arguments allow it to be a copy constructor, or copy assignment
12210 operator. */
12211
c11b6f21
MS
12212int
12213copy_args_p (d)
12214 tree d;
12215{
4f1c5b7d
MM
12216 tree t;
12217
12218 if (!DECL_FUNCTION_MEMBER_P (d))
12219 return 0;
12220
12221 t = FUNCTION_ARG_CHAIN (d);
454fa7a7 12222 if (DECL_CONSTRUCTOR_P (d) && DECL_HAS_IN_CHARGE_PARM_P (d))
67437d5b 12223 t = TREE_CHAIN (t);
c11b6f21
MS
12224 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
12225 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
4f1c5b7d 12226 == DECL_CONTEXT (d))
c11b6f21
MS
12227 && (TREE_CHAIN (t) == NULL_TREE
12228 || TREE_CHAIN (t) == void_list_node
12229 || TREE_PURPOSE (TREE_CHAIN (t))))
12230 return 1;
12231 return 0;
12232}
12233
8d08fdba
MS
12234/* These memoizing functions keep track of special properties which
12235 a class may have. `grok_ctor_properties' notices whether a class
12236 has a constructor of the form X(X&), and also complains
12237 if the class has a constructor of the form X(X).
12238 `grok_op_properties' takes notice of the various forms of
12239 operator= which are defined, as well as what sorts of type conversion
12240 may apply. Both functions take a FUNCTION_DECL as an argument. */
e92cc029 12241
a0a33927 12242int
8d08fdba
MS
12243grok_ctor_properties (ctype, decl)
12244 tree ctype, decl;
12245{
12246 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
12247 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
12248
12249 /* When a type has virtual baseclasses, a magical first int argument is
12250 added to any ctor so we can tell if the class has been initialized
12251 yet. This could screw things up in this function, so we deliberately
12252 ignore the leading int if we're in that situation. */
454fa7a7 12253 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
8d08fdba 12254 {
711734a9
JM
12255 my_friendly_assert (parmtypes
12256 && TREE_VALUE (parmtypes) == integer_type_node,
12257 980529);
8d08fdba
MS
12258 parmtypes = TREE_CHAIN (parmtypes);
12259 parmtype = TREE_VALUE (parmtypes);
12260 }
12261
f181d4ae
MM
12262 /* [class.copy]
12263
12264 A non-template constructor for class X is a copy constructor if
12265 its first parameter is of type X&, const X&, volatile X& or const
12266 volatile X&, and either there are no other parameters or else all
12267 other parameters have default arguments. */
8d08fdba 12268 if (TREE_CODE (parmtype) == REFERENCE_TYPE
0b41abe6
JM
12269 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12270 && (TREE_CHAIN (parmtypes) == NULL_TREE
8d08fdba 12271 || TREE_CHAIN (parmtypes) == void_list_node
f181d4ae
MM
12272 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12273 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12274 && is_member_template (DECL_TI_TEMPLATE (decl))))
0b41abe6
JM
12275 {
12276 TYPE_HAS_INIT_REF (ctype) = 1;
91063b51 12277 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
0b41abe6 12278 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
8d08fdba 12279 }
f181d4ae
MM
12280 /* [class.copy]
12281
12282 A declaration of a constructor for a class X is ill-formed if its
12283 first parameter is of type (optionally cv-qualified) X and either
12284 there are no other parameters or else all other parameters have
68642fb6 12285 default arguments.
f181d4ae
MM
12286
12287 We *don't* complain about member template instantiations that
12288 have this form, though; they can occur as we try to decide what
12289 constructor to use during overload resolution. Since overload
12290 resolution will never prefer such a constructor to the
12291 non-template copy constructor (which is either explicitly or
12292 implicitly defined), there's no need to worry about their
12293 existence. Theoretically, they should never even be
12294 instantiated, but that's hard to forestall. */
0b41abe6 12295 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
59e76fc6
JM
12296 && (TREE_CHAIN (parmtypes) == NULL_TREE
12297 || TREE_CHAIN (parmtypes) == void_list_node
f181d4ae
MM
12298 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12299 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12300 && is_member_template (DECL_TI_TEMPLATE (decl))))
8d08fdba 12301 {
8251199e 12302 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
0b41abe6
JM
12303 ctype, ctype);
12304 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12305 return 0;
8d08fdba
MS
12306 }
12307 else if (TREE_CODE (parmtype) == VOID_TYPE
12308 || TREE_PURPOSE (parmtypes) != NULL_TREE)
12309 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
a0a33927
MS
12310
12311 return 1;
8d08fdba
MS
12312}
12313
596ea4e5 12314/* An operator with this code is unary, but can also be binary. */
e92cc029 12315
a28e3c7f 12316static int
596ea4e5
AS
12317ambi_op_p (code)
12318 enum tree_code code;
8d08fdba 12319{
596ea4e5
AS
12320 return (code == INDIRECT_REF
12321 || code == ADDR_EXPR
12322 || code == CONVERT_EXPR
12323 || code == NEGATE_EXPR
12324 || code == PREINCREMENT_EXPR
12325 || code == PREDECREMENT_EXPR);
8d08fdba
MS
12326}
12327
12328/* An operator with this name can only be unary. */
e92cc029 12329
a28e3c7f 12330static int
596ea4e5
AS
12331unary_op_p (code)
12332 enum tree_code code;
8d08fdba 12333{
596ea4e5
AS
12334 return (code == TRUTH_NOT_EXPR
12335 || code == BIT_NOT_EXPR
12336 || code == COMPONENT_REF
12337 || code == TYPE_EXPR);
8d08fdba
MS
12338}
12339
12340/* Do a little sanity-checking on how they declared their operator. */
e92cc029 12341
5566b478 12342void
8d08fdba
MS
12343grok_op_properties (decl, virtualp, friendp)
12344 tree decl;
12345 int virtualp, friendp;
12346{
12347 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 12348 tree argtype;
8d08fdba
MS
12349 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12350 tree name = DECL_NAME (decl);
596ea4e5
AS
12351 enum tree_code operator_code;
12352 int arity;
12353
12354 /* Count the number of arguments. */
12355 for (argtype = argtypes, arity = 0;
12356 argtype && argtype != void_list_node;
12357 argtype = TREE_CHAIN (argtype))
12358 ++arity;
8d08fdba 12359
a28e3c7f
MS
12360 if (current_class_type == NULL_TREE)
12361 friendp = 1;
8d08fdba 12362
596ea4e5
AS
12363 if (DECL_CONV_FN_P (decl))
12364 operator_code = TYPE_EXPR;
12365 else
12366 do
12367 {
669ec2b4
JM
12368#define DEF_OPERATOR(NAME, CODE, NEW_MANGLING, OLD_MANGING, ARITY, ASSN_P) \
12369 if (ansi_opname (CODE) == name) \
12370 { \
12371 operator_code = CODE; \
12372 break; \
12373 } \
12374 else if (ansi_assopname (CODE) == name) \
12375 { \
12376 operator_code = CODE; \
12377 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
12378 break; \
596ea4e5
AS
12379 }
12380
12381#include "operators.def"
12382#undef DEF_OPERATOR
12383
12384 my_friendly_abort (20000527);
12385 }
12386 while (0);
12387 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
12388 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12389
a28e3c7f
MS
12390 if (! friendp)
12391 {
596ea4e5
AS
12392 switch (operator_code)
12393 {
12394 case CALL_EXPR:
12395 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12396 break;
5362b086 12397
596ea4e5
AS
12398 case ARRAY_REF:
12399 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12400 break;
f181d4ae 12401
596ea4e5
AS
12402 case COMPONENT_REF:
12403 case MEMBER_REF:
12404 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12405 break;
5362b086 12406
596ea4e5
AS
12407 case NEW_EXPR:
12408 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12409 break;
5362b086 12410
596ea4e5
AS
12411 case DELETE_EXPR:
12412 TYPE_GETS_DELETE (current_class_type) |= 1;
12413 break;
5362b086 12414
596ea4e5
AS
12415 case VEC_NEW_EXPR:
12416 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12417 break;
5362b086 12418
596ea4e5
AS
12419 case VEC_DELETE_EXPR:
12420 TYPE_GETS_DELETE (current_class_type) |= 2;
12421 break;
12422
12423 default:
12424 break;
12425 }
12426 }
12427
12428 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8d08fdba 12429 {
8d08fdba
MS
12430 /* When the compiler encounters the definition of A::operator new, it
12431 doesn't look at the class declaration to find out if it's static. */
a28e3c7f 12432 if (methodp)
3afb32a4 12433 revert_static_member_fn (decl);
68642fb6 12434
36791f1e 12435 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 12436 }
596ea4e5 12437 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8d08fdba 12438 {
a28e3c7f 12439 if (methodp)
3afb32a4 12440 revert_static_member_fn (decl);
68642fb6 12441
36791f1e 12442 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba 12443 }
8d08fdba
MS
12444 else
12445 {
12446 /* An operator function must either be a non-static member function
12447 or have at least one parameter of a class, a reference to a class,
12448 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 12449 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 12450 {
596ea4e5
AS
12451 if (operator_code == TYPE_EXPR
12452 || operator_code == CALL_EXPR
12453 || operator_code == COMPONENT_REF
12454 || operator_code == ARRAY_REF
12455 || operator_code == NOP_EXPR)
8251199e 12456 cp_error ("`%D' must be a nonstatic member function", decl);
8d08fdba
MS
12457 else
12458 {
12459 tree p = argtypes;
12460
700f8a87 12461 if (DECL_STATIC_FUNCTION_P (decl))
8251199e 12462 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
700f8a87 12463
8d08fdba 12464 if (p)
a1774733 12465 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
8d08fdba
MS
12466 {
12467 tree arg = TREE_VALUE (p);
12468 if (TREE_CODE (arg) == REFERENCE_TYPE)
12469 arg = TREE_TYPE (arg);
12470
12471 /* This lets bad template code slip through. */
12472 if (IS_AGGR_TYPE (arg)
12473 || TREE_CODE (arg) == ENUMERAL_TYPE
73b0fce8 12474 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
a1281f45 12475 || TREE_CODE (arg) == BOUND_TEMPLATE_TEMPLATE_PARM)
8d08fdba
MS
12476 goto foundaggr;
12477 }
8251199e
JM
12478 cp_error
12479 ("`%D' must have an argument of class or enumerated type",
8d08fdba
MS
12480 decl);
12481 foundaggr:
12482 ;
12483 }
12484 }
68642fb6 12485
596ea4e5 12486 if (operator_code == CALL_EXPR)
2c73f9f5 12487 return; /* No restrictions on args. */
8d08fdba 12488
9a3b49ac 12489 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
12490 {
12491 tree t = TREE_TYPE (name);
17708e90 12492 if (! friendp)
a0a33927
MS
12493 {
12494 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
d8e178a0 12495 const char *what = 0;
5362b086 12496
a0a33927
MS
12497 if (ref)
12498 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12499
17708e90
NS
12500 if (TREE_CODE (t) == VOID_TYPE)
12501 what = "void";
12502 else if (t == current_class_type)
a0a33927 12503 what = "the same type";
9a3b49ac 12504 /* Don't force t to be complete here. */
a0a33927 12505 else if (IS_AGGR_TYPE (t)
d0f062fb 12506 && COMPLETE_TYPE_P (t)
a0a33927
MS
12507 && DERIVED_FROM_P (t, current_class_type))
12508 what = "a base class";
12509
12510 if (what)
8251199e 12511 warning ("conversion to %s%s will never use a type conversion operator",
a0a33927
MS
12512 ref ? "a reference to " : "", what);
12513 }
12514 }
12515
5362b086 12516 if (DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5 12517 && operator_code == NOP_EXPR)
8d08fdba
MS
12518 {
12519 tree parmtype;
12520
596ea4e5 12521 if (arity != 2 && methodp)
8d08fdba 12522 {
8251199e 12523 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12524 return;
12525 }
12526 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12527
596ea4e5
AS
12528 /* [class.copy]
12529
12530 A user-declared copy assignment operator X::operator= is
12531 a non-static non-template member function of class X with
12532 exactly one parameter of type X, X&, const X&, volatile
12533 X& or const volatile X&. */
f0e01782 12534 if (copy_assignment_arg_p (parmtype, virtualp)
596ea4e5
AS
12535 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12536 && is_member_template (DECL_TI_TEMPLATE (decl)))
a28e3c7f 12537 && ! friendp)
8d08fdba
MS
12538 {
12539 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
f0e01782 12540 if (TREE_CODE (parmtype) != REFERENCE_TYPE
91063b51 12541 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
8d08fdba
MS
12542 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12543 }
12544 }
596ea4e5 12545 else if (operator_code == COND_EXPR)
8d08fdba
MS
12546 {
12547 /* 13.4.0.3 */
cb9a3ff8 12548 cp_error ("ISO C++ prohibits overloading operator ?:");
68642fb6 12549 }
596ea4e5 12550 else if (ambi_op_p (operator_code))
8d08fdba 12551 {
596ea4e5
AS
12552 if (arity == 1)
12553 /* We pick the one-argument operator codes by default, so
12554 we don't have to change anything. */
12555 ;
12556 else if (arity == 2)
8d08fdba 12557 {
596ea4e5
AS
12558 /* If we thought this was a unary operator, we now know
12559 it to be a binary operator. */
12560 switch (operator_code)
12561 {
12562 case INDIRECT_REF:
12563 operator_code = MULT_EXPR;
12564 break;
12565
12566 case ADDR_EXPR:
12567 operator_code = BIT_AND_EXPR;
12568 break;
12569
12570 case CONVERT_EXPR:
12571 operator_code = PLUS_EXPR;
12572 break;
12573
12574 case NEGATE_EXPR:
12575 operator_code = MINUS_EXPR;
12576 break;
12577
12578 case PREINCREMENT_EXPR:
12579 operator_code = POSTINCREMENT_EXPR;
12580 break;
12581
12582 case PREDECREMENT_EXPR:
655dc6ee 12583 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
12584 break;
12585
12586 default:
12587 my_friendly_abort (20000527);
12588 }
12589
12590 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12591
12592 if ((operator_code == POSTINCREMENT_EXPR
12593 || operator_code == POSTDECREMENT_EXPR)
5156628f 12594 && ! processing_template_decl
007e5fea 12595 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
12596 {
12597 if (methodp)
8251199e 12598 cp_error ("postfix `%D' must take `int' as its argument",
8d08fdba
MS
12599 decl);
12600 else
8251199e
JM
12601 cp_error
12602 ("postfix `%D' must take `int' as its second argument",
12603 decl);
8d08fdba
MS
12604 }
12605 }
12606 else
12607 {
12608 if (methodp)
8251199e 12609 cp_error ("`%D' must take either zero or one argument", decl);
8d08fdba 12610 else
8251199e 12611 cp_error ("`%D' must take either one or two arguments", decl);
8d08fdba 12612 }
824b9a4c
MS
12613
12614 /* More Effective C++ rule 6. */
eb448459 12615 if (warn_ecpp
596ea4e5
AS
12616 && (operator_code == POSTINCREMENT_EXPR
12617 || operator_code == POSTDECREMENT_EXPR
12618 || operator_code == PREINCREMENT_EXPR
12619 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
12620 {
12621 tree arg = TREE_VALUE (argtypes);
12622 tree ret = TREE_TYPE (TREE_TYPE (decl));
12623 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12624 arg = TREE_TYPE (arg);
12625 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
12626 if (operator_code == PREINCREMENT_EXPR
12627 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
12628 {
12629 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
12630 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12631 arg))
8251199e 12632 cp_warning ("prefix `%D' should return `%T'", decl,
824b9a4c
MS
12633 build_reference_type (arg));
12634 }
12635 else
12636 {
3bfdc719 12637 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8251199e 12638 cp_warning ("postfix `%D' should return `%T'", decl, arg);
824b9a4c
MS
12639 }
12640 }
8d08fdba 12641 }
596ea4e5 12642 else if (unary_op_p (operator_code))
8d08fdba 12643 {
596ea4e5 12644 if (arity != 1)
8d08fdba
MS
12645 {
12646 if (methodp)
8251199e 12647 cp_error ("`%D' must take `void'", decl);
8d08fdba 12648 else
8251199e 12649 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12650 }
12651 }
596ea4e5 12652 else /* if (binary_op_p (operator_code)) */
8d08fdba 12653 {
596ea4e5 12654 if (arity != 2)
8d08fdba
MS
12655 {
12656 if (methodp)
8251199e 12657 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba 12658 else
8251199e 12659 cp_error ("`%D' must take exactly two arguments", decl);
8d08fdba 12660 }
824b9a4c
MS
12661
12662 /* More Effective C++ rule 7. */
eb448459 12663 if (warn_ecpp
596ea4e5
AS
12664 && (operator_code == TRUTH_ANDIF_EXPR
12665 || operator_code == TRUTH_ORIF_EXPR
12666 || operator_code == COMPOUND_EXPR))
8251199e 12667 cp_warning ("user-defined `%D' always evaluates both arguments",
824b9a4c
MS
12668 decl);
12669 }
12670
12671 /* Effective C++ rule 23. */
eb448459 12672 if (warn_ecpp
596ea4e5
AS
12673 && arity == 2
12674 && (operator_code == PLUS_EXPR
12675 || operator_code == MINUS_EXPR
12676 || operator_code == TRUNC_DIV_EXPR
12677 || operator_code == MULT_EXPR)
824b9a4c 12678 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8251199e 12679 cp_warning ("`%D' should return by value", decl);
8d08fdba
MS
12680
12681 /* 13.4.0.8 */
34332678
CT
12682 for (; argtypes && argtypes != void_list_node;
12683 argtypes = TREE_CHAIN (argtypes))
12684 if (TREE_PURPOSE (argtypes))
12685 {
12686 TREE_PURPOSE (argtypes) = NULL_TREE;
596ea4e5
AS
12687 if (operator_code == POSTINCREMENT_EXPR
12688 || operator_code == POSTDECREMENT_EXPR)
34332678
CT
12689 {
12690 if (pedantic)
12691 cp_pedwarn ("`%D' cannot have default arguments", decl);
12692 }
12693 else
12694 cp_error ("`%D' cannot have default arguments", decl);
12695 }
12696
8d08fdba
MS
12697 }
12698}
12699\f
d8e178a0 12700static const char *
094fe153
JM
12701tag_name (code)
12702 enum tag_types code;
12703{
12704 switch (code)
12705 {
12706 case record_type:
12707 return "struct";
12708 case class_type:
12709 return "class";
12710 case union_type:
12711 return "union ";
12712 case enum_type:
12713 return "enum";
094fe153
JM
12714 default:
12715 my_friendly_abort (981122);
12716 }
12717}
12718
8d08fdba
MS
12719/* Get the struct, enum or union (CODE says which) with tag NAME.
12720 Define the tag as a forward-reference if it is not defined.
12721
12722 C++: If a class derivation is given, process it here, and report
12723 an error if multiple derivation declarations are not identical.
12724
12725 If this is a definition, come in through xref_tag and only look in
12726 the current frame for the name (since C++ allows new names in any
12727 scope.) */
12728
8d08fdba 12729tree
ca107ded 12730xref_tag (code_type_node, name, globalize)
8d08fdba 12731 tree code_type_node;
ca107ded 12732 tree name;
8d08fdba
MS
12733 int globalize;
12734{
12735 enum tag_types tag_code;
12736 enum tree_code code;
8d08fdba 12737 register tree ref, t;
8f032717 12738 struct binding_level *b = current_binding_level;
a80e4195 12739 int got_type = 0;
dc8263bc 12740 tree attributes = NULL_TREE;
25aab5d0 12741 tree context = NULL_TREE;
dc8263bc
JM
12742
12743 /* If we are called from the parser, code_type_node will sometimes be a
12744 TREE_LIST. This indicates that the user wrote
12745 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12746 use them later. */
12747 if (TREE_CODE (code_type_node) == TREE_LIST)
12748 {
12749 attributes = TREE_PURPOSE (code_type_node);
12750 code_type_node = TREE_VALUE (code_type_node);
12751 }
8d08fdba 12752
665f2503 12753 tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8d08fdba
MS
12754 switch (tag_code)
12755 {
12756 case record_type:
12757 case class_type:
8d08fdba 12758 code = RECORD_TYPE;
8d08fdba
MS
12759 break;
12760 case union_type:
12761 code = UNION_TYPE;
8d08fdba
MS
12762 break;
12763 case enum_type:
12764 code = ENUMERAL_TYPE;
12765 break;
12766 default:
12767 my_friendly_abort (18);
12768 }
12769
12770 /* If a cross reference is requested, look up the type
12771 already defined for this tag and return it. */
2f939d94 12772 if (TYPE_P (name))
be99da77
MS
12773 {
12774 t = name;
a80e4195
MS
12775 name = TYPE_IDENTIFIER (t);
12776 got_type = 1;
be99da77
MS
12777 }
12778 else
12779 t = IDENTIFIER_TYPE_VALUE (name);
61a127b3 12780
f2ae0c45
JM
12781 /* Warn about 'friend struct Inherited;' doing the wrong thing. */
12782 if (t && globalize && TREE_CODE (t) == TYPENAME_TYPE)
12783 {
12784 static int explained;
12785
12786 cp_warning ("`%s %T' declares a new type at namespace scope;\n\
12787to refer to the inherited type, say `%s %T::%T'%s",
12788 tag_name (tag_code), name, tag_name (tag_code),
12789 constructor_name (current_class_type), TYPE_IDENTIFIER (t),
12790 (!explained ? "\n\
12791(names from dependent base classes are not visible to unqualified name lookup)"
12792 : ""));
12793
12794 explained = 1;
12795 }
12796
73b0fce8 12797 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
a1281f45 12798 && TREE_CODE (t) != BOUND_TEMPLATE_TEMPLATE_PARM)
a0a33927
MS
12799 t = NULL_TREE;
12800
8ccc31eb 12801 if (! globalize)
8d08fdba 12802 {
f3400fe2
JM
12803 /* If we know we are defining this tag, only look it up in
12804 this scope and don't try to find it as a type. */
12805 ref = lookup_tag (code, name, b, 1);
8d08fdba
MS
12806 }
12807 else
12808 {
25aab5d0 12809 if (t)
36a117a5 12810 {
25aab5d0
MM
12811 /* [dcl.type.elab] If the identifier resolves to a
12812 typedef-name or a template type-parameter, the
12813 elaborated-type-specifier is ill-formed. */
12814 if (t != TYPE_MAIN_VARIANT (t)
12815 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12816 cp_pedwarn ("using typedef-name `%D' after `%s'",
12817 TYPE_NAME (t), tag_name (tag_code));
12818 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12819 cp_error ("using template type parameter `%T' after `%s'",
12820 t, tag_name (tag_code));
12821
12822 ref = t;
12823 }
12824 else
12825 ref = lookup_tag (code, name, b, 0);
68642fb6 12826
25aab5d0
MM
12827 if (! ref)
12828 {
12829 /* Try finding it as a type declaration. If that wins,
68642fb6 12830 use it. */
25aab5d0
MM
12831 ref = lookup_name (name, 1);
12832
12833 if (ref != NULL_TREE
12834 && processing_template_decl
12835 && DECL_CLASS_TEMPLATE_P (ref)
12836 && template_class_depth (current_class_type) == 0)
12837 /* Since GLOBALIZE is true, we're declaring a global
6757edfe 12838 template, so we want this type. */
17aec3eb 12839 ref = DECL_TEMPLATE_RESULT (ref);
6757edfe 12840
25aab5d0
MM
12841 if (ref && TREE_CODE (ref) == TYPE_DECL
12842 && TREE_CODE (TREE_TYPE (ref)) == code)
12843 ref = TREE_TYPE (ref);
12844 else
12845 ref = NULL_TREE;
12846 }
12847
68642fb6
UD
12848 if (ref && current_class_type
12849 && template_class_depth (current_class_type)
12850 && PROCESSING_REAL_TEMPLATE_DECL_P ())
25aab5d0
MM
12851 {
12852 /* Since GLOBALIZE is non-zero, we are not looking at a
12853 definition of this tag. Since, in addition, we are currently
12854 processing a (member) template declaration of a template
12855 class, we must be very careful; consider:
12856
12857 template <class X>
12858 struct S1
12859
12860 template <class U>
12861 struct S2
12862 { template <class V>
12863 friend struct S1; };
12864
12865 Here, the S2::S1 declaration should not be confused with the
12866 outer declaration. In particular, the inner version should
12867 have a template parameter of level 2, not level 1. This
12868 would be particularly important if the member declaration
12869 were instead:
12870
12871 template <class V = U> friend struct S1;
12872
12873 say, when we should tsubst into `U' when instantiating
12874 S2. On the other hand, when presented with:
12875
12876 template <class T>
12877 struct S1 {
12878 template <class U>
12879 struct S2 {};
12880 template <class U>
12881 friend struct S2;
12882 };
12883
12884 we must find the inner binding eventually. We
12885 accomplish this by making sure that the new type we
12886 create to represent this declaration has the right
12887 TYPE_CONTEXT. */
12888 context = TYPE_CONTEXT (ref);
12889 ref = NULL_TREE;
8d08fdba
MS
12890 }
12891 }
12892
8d08fdba
MS
12893 if (! ref)
12894 {
12895 /* If no such tag is yet defined, create a forward-reference node
12896 and record it as the "definition".
12897 When a real declaration of this type is found,
12898 the forward-reference will be altered into a real type. */
8d08fdba
MS
12899 if (code == ENUMERAL_TYPE)
12900 {
8251199e 12901 cp_error ("use of enum `%#D' without previous declaration", name);
fc378698 12902
8d08fdba
MS
12903 ref = make_node (ENUMERAL_TYPE);
12904
12905 /* Give the type a default layout like unsigned int
12906 to avoid crashing if it does not get defined. */
12907 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12908 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
11cf4d18 12909 TYPE_USER_ALIGN (ref) = 0;
8d08fdba
MS
12910 TREE_UNSIGNED (ref) = 1;
12911 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12912 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12913 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12914
12915 /* Enable us to recognize when a type is created in class context.
12916 To do nested classes correctly, this should probably be cleared
12917 out when we leave this classes scope. Currently this in only
12918 done in `start_enum'. */
12919
12920 pushtag (name, ref, globalize);
8d08fdba 12921 }
8d08fdba
MS
12922 else
12923 {
8d08fdba 12924 struct binding_level *old_b = class_binding_level;
8d08fdba 12925
33848bb0 12926 ref = make_aggr_type (code);
25aab5d0 12927 TYPE_CONTEXT (ref) = context;
8d08fdba 12928
8d08fdba
MS
12929#ifdef NONNESTED_CLASSES
12930 /* Class types don't nest the way enums do. */
12931 class_binding_level = (struct binding_level *)0;
12932#endif
12933 pushtag (name, ref, globalize);
12934 class_binding_level = old_b;
8d08fdba
MS
12935 }
12936 }
12937 else
12938 {
7fe6899f 12939 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
6757edfe 12940 redeclare_class_template (ref, current_template_parms);
8d08fdba
MS
12941 }
12942
8d08fdba
MS
12943 /* Until the type is defined, tentatively accept whatever
12944 structure tag the user hands us. */
d0f062fb 12945 if (!COMPLETE_TYPE_P (ref)
8d08fdba
MS
12946 && ref != current_class_type
12947 /* Have to check this, in case we have contradictory tag info. */
12948 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12949 {
12950 if (tag_code == class_type)
12951 CLASSTYPE_DECLARED_CLASS (ref) = 1;
6eabb241 12952 else if (tag_code == record_type)
8d08fdba
MS
12953 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12954 }
12955
dc8263bc
JM
12956 TREE_TYPE (ref) = attributes;
12957
8d08fdba
MS
12958 return ref;
12959}
8ccc31eb 12960
fc378698
MS
12961tree
12962xref_tag_from_type (old, id, globalize)
12963 tree old, id;
12964 int globalize;
12965{
12966 tree code_type_node;
12967
12968 if (TREE_CODE (old) == RECORD_TYPE)
12969 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12970 ? class_type_node : record_type_node);
12971 else
12972 code_type_node = union_type_node;
12973
12974 if (id == NULL_TREE)
12975 id = TYPE_IDENTIFIER (old);
12976
ca107ded 12977 return xref_tag (code_type_node, id, globalize);
fc378698
MS
12978}
12979
3fd71a52
MM
12980/* REF is a type (named NAME), for which we have just seen some
12981 baseclasses. BINFO is a list of those baseclasses; the
12982 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12983 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12984 struct, or union. */
12985
8ccc31eb
MS
12986void
12987xref_basetypes (code_type_node, name, ref, binfo)
12988 tree code_type_node;
12989 tree name, ref;
12990 tree binfo;
12991{
12992 /* In the declaration `A : X, Y, ... Z' we mark all the types
12993 (A, X, Y, ..., Z) so we can check for duplicates. */
12994 tree binfos;
d6479fe7
MM
12995 tree base;
12996
8ccc31eb 12997 int i, len;
665f2503 12998 enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8ccc31eb
MS
12999
13000 if (tag_code == union_type)
13001 {
8251199e 13002 cp_error ("derived union `%T' invalid", ref);
8ccc31eb
MS
13003 return;
13004 }
13005
13006 len = list_length (binfo);
8ccc31eb 13007
d6479fe7
MM
13008 /* First, make sure that any templates in base-classes are
13009 instantiated. This ensures that if we call ourselves recursively
13010 we do not get confused about which classes are marked and which
13011 are not. */
13012 for (base = binfo; base; base = TREE_CHAIN (base))
13013 complete_type (TREE_VALUE (base));
13014
8ccc31eb
MS
13015 SET_CLASSTYPE_MARKED (ref);
13016 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
13017
13018 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
13019 {
13020 /* The base of a derived struct is public by default. */
13021 int via_public
be99da77
MS
13022 = (TREE_PURPOSE (binfo) == access_public_node
13023 || TREE_PURPOSE (binfo) == access_public_virtual_node
8ccc31eb 13024 || (tag_code != class_type
be99da77
MS
13025 && (TREE_PURPOSE (binfo) == access_default_node
13026 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
d8b55a76
JM
13027 int via_protected
13028 = (TREE_PURPOSE (binfo) == access_protected_node
13029 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
8ccc31eb 13030 int via_virtual
be99da77 13031 = (TREE_PURPOSE (binfo) == access_private_virtual_node
d8b55a76 13032 || TREE_PURPOSE (binfo) == access_protected_virtual_node
be99da77
MS
13033 || TREE_PURPOSE (binfo) == access_public_virtual_node
13034 || TREE_PURPOSE (binfo) == access_default_virtual_node);
13035 tree basetype = TREE_VALUE (binfo);
8ccc31eb
MS
13036 tree base_binfo;
13037
8ccc31eb
MS
13038 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
13039 basetype = TREE_TYPE (basetype);
5566b478
MS
13040 if (!basetype
13041 || (TREE_CODE (basetype) != RECORD_TYPE
a80e4195 13042 && TREE_CODE (basetype) != TYPENAME_TYPE
73b0fce8 13043 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
a1281f45 13044 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
8ccc31eb 13045 {
8251199e 13046 cp_error ("base type `%T' fails to be a struct or class type",
8ccc31eb
MS
13047 TREE_VALUE (binfo));
13048 continue;
13049 }
2b9dc906 13050
11b5139c 13051 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
2b9dc906 13052
8adf5b5e
JM
13053 /* This code replaces similar code in layout_basetypes.
13054 We put the complete_type first for implicit `typename'. */
d0f062fb 13055 if (!COMPLETE_TYPE_P (basetype)
2b9dc906 13056 && ! (current_template_parms && uses_template_parms (basetype)))
8ccc31eb 13057 {
8251199e 13058 cp_error ("base class `%T' has incomplete type", basetype);
8ccc31eb
MS
13059 continue;
13060 }
8ccc31eb
MS
13061 else
13062 {
13063 if (CLASSTYPE_MARKED (basetype))
13064 {
13065 if (basetype == ref)
8251199e 13066 cp_error ("recursive type `%T' undefined", basetype);
8ccc31eb 13067 else
8251199e 13068 cp_error ("duplicate base type `%T' invalid", basetype);
8ccc31eb
MS
13069 continue;
13070 }
13071
eff71ab0 13072 if (TYPE_FOR_JAVA (basetype)
68642fb6 13073 && (current_lang_stack
9cd64686 13074 == &VARRAY_TREE (current_lang_base, 0)))
eff71ab0
PB
13075 TYPE_FOR_JAVA (ref) = 1;
13076
8ccc31eb
MS
13077 /* Note that the BINFO records which describe individual
13078 inheritances are *not* shared in the lattice! They
13079 cannot be shared because a given baseclass may be
13080 inherited with different `accessibility' by different
13081 derived classes. (Each BINFO record describing an
13082 individual inheritance contains flags which say what
13083 the `accessibility' of that particular inheritance is.) */
68642fb6
UD
13084
13085 base_binfo
fed3cef0 13086 = make_binfo (size_zero_node, basetype,
7ddedda4
MM
13087 CLASS_TYPE_P (basetype)
13088 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
13089 CLASS_TYPE_P (basetype)
13090 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
68642fb6 13091
8ccc31eb
MS
13092 TREE_VEC_ELT (binfos, i) = base_binfo;
13093 TREE_VIA_PUBLIC (base_binfo) = via_public;
13094 TREE_VIA_PROTECTED (base_binfo) = via_protected;
13095 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
13096 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
13097
dfbcd65a
JM
13098 /* We need to unshare the binfos now so that lookups during class
13099 definition work. */
13100 unshare_base_binfos (base_binfo);
13101
8ccc31eb 13102 SET_CLASSTYPE_MARKED (basetype);
9e9ff709 13103
8ccc31eb
MS
13104 /* We are free to modify these bits because they are meaningless
13105 at top level, and BASETYPE is a top-level type. */
13106 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
13107 {
13108 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
4c6b7393
MM
13109 /* Converting to a virtual base class requires looking
13110 up the offset of the virtual base. */
13111 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
8ccc31eb
MS
13112 }
13113
7ddedda4
MM
13114 if (CLASS_TYPE_P (basetype))
13115 {
5362b086 13116 TYPE_HAS_NEW_OPERATOR (ref)
834c6dff 13117 |= TYPE_HAS_NEW_OPERATOR (basetype);
5362b086 13118 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
834c6dff 13119 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
7ddedda4 13120 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
4c6b7393 13121 /* If the base-class uses multiple inheritance, so do we. */
68642fb6 13122 TYPE_USES_MULTIPLE_INHERITANCE (ref)
4c6b7393
MM
13123 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
13124 /* Likewise, if converting to a base of the base may require
13125 code, then we may need to generate code to convert to a
13126 base as well. */
68642fb6 13127 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
4c6b7393 13128 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
7ddedda4
MM
13129 }
13130
8ccc31eb
MS
13131 i += 1;
13132 }
13133 }
13134 if (i)
13135 TREE_VEC_LENGTH (binfos) = i;
13136 else
13137 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
13138
13139 if (i > 1)
7ddedda4 13140 {
4c6b7393
MM
13141 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
13142 /* If there is more than one non-empty they cannot be at the same
13143 address. */
13144 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
7ddedda4
MM
13145 }
13146
8ccc31eb
MS
13147 /* Unmark all the types. */
13148 while (--i >= 0)
13149 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
13150 CLEAR_CLASSTYPE_MARKED (ref);
13151
70c532b5
MM
13152 /* Now that we know all the base-classes, set up the list of virtual
13153 bases. */
23381155 13154 get_vbase_types (ref);
8ccc31eb 13155}
68642fb6 13156
8d08fdba 13157\f
8d08fdba
MS
13158/* Begin compiling the definition of an enumeration type.
13159 NAME is its name (or null if anonymous).
13160 Returns the type object, as yet incomplete.
13161 Also records info about it so that build_enumerator
13162 may be used to declare the individual values as they are read. */
13163
13164tree
13165start_enum (name)
13166 tree name;
13167{
13168 register tree enumtype = NULL_TREE;
8f032717 13169 struct binding_level *b = current_binding_level;
8d08fdba
MS
13170
13171 /* If this is the real definition for a previous forward reference,
13172 fill in the contents in the same object that used to be the
13173 forward reference. */
13174
13175 if (name != NULL_TREE)
13176 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
13177
13178 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252
NS
13179 {
13180 cp_error ("multiple definition of `%#T'", enumtype);
13181 cp_error_at ("previous definition here", enumtype);
58595203
MM
13182 /* Clear out TYPE_VALUES, and start again. */
13183 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 13184 }
8d08fdba
MS
13185 else
13186 {
13187 enumtype = make_node (ENUMERAL_TYPE);
13188 pushtag (name, enumtype, 0);
13189 }
13190
13191 if (current_class_type)
13192 TREE_ADDRESSABLE (b->tags) = 1;
c91a56d2 13193
8d08fdba
MS
13194 GNU_xref_decl (current_function_decl, enumtype);
13195 return enumtype;
13196}
13197
13198/* After processing and defining all the values of an enumeration type,
13199 install their decls in the enumeration type and finish it off.
13200 ENUMTYPE is the type object and VALUES a list of name-value pairs.
13201 Returns ENUMTYPE. */
13202
13203tree
dbfe2124
MM
13204finish_enum (enumtype)
13205 tree enumtype;
8d08fdba 13206{
a703fb38 13207 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
8d08fdba
MS
13208 /* Calculate the maximum value of any enumerator in this type. */
13209
dbfe2124 13210 tree values = TYPE_VALUES (enumtype);
8d08fdba
MS
13211 if (values)
13212 {
ed44da02 13213 tree pair;
5566b478 13214
ed44da02 13215 for (pair = values; pair; pair = TREE_CHAIN (pair))
8d08fdba 13216 {
ed44da02
MM
13217 tree decl;
13218 tree value;
13219
13220 /* The TREE_VALUE is a CONST_DECL for this enumeration
13221 constant. */
13222 decl = TREE_VALUE (pair);
13223
58595203
MM
13224 /* [dcl.enum]
13225
13226 Following the closing brace of an enum-specifier, each
13227 enumerator has the type of its enumeration. Prior to the
13228 closing brace, the type of each enumerator is the type of
13229 its initializing value. */
13230 TREE_TYPE (decl) = enumtype;
13231
ed44da02
MM
13232 /* The DECL_INITIAL will be NULL if we are processing a
13233 template declaration and this enumeration constant had no
13234 explicit initializer. */
13235 value = DECL_INITIAL (decl);
079e1098 13236 if (value && !processing_template_decl)
5566b478 13237 {
079e1098
MM
13238 /* Set the TREE_TYPE for the VALUE as well. That's so
13239 that when we call decl_constant_value we get an
13240 entity of the right type (but with the constant
13241 value). Since we shouldn't ever call
13242 decl_constant_value on a template type, there's no
13243 reason to do that when processing_template_decl.
13244 And, if the expression is something like a
13245 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
68642fb6 13246 wreak havoc on the intended type of the expression.
079e1098
MM
13247
13248 Of course, there's also no point in trying to compute
13249 minimum or maximum values if we're in a template. */
5566b478 13250 TREE_TYPE (value) = enumtype;
ed44da02 13251
079e1098
MM
13252 if (!minnode)
13253 minnode = maxnode = value;
13254 else if (tree_int_cst_lt (maxnode, value))
13255 maxnode = value;
13256 else if (tree_int_cst_lt (value, minnode))
13257 minnode = value;
5566b478 13258 }
ed44da02 13259
68642fb6 13260 if (processing_template_decl)
72f2bd78
MM
13261 /* If this is just a template, leave the CONST_DECL
13262 alone. That way tsubst_copy will find CONST_DECLs for
13263 CONST_DECLs, and not INTEGER_CSTs. */
13264 ;
13265 else
13266 /* In the list we're building up, we want the enumeration
13267 values, not the CONST_DECLs. */
13268 TREE_VALUE (pair) = value;
8d08fdba
MS
13269 }
13270 }
f376e137
MS
13271 else
13272 maxnode = minnode = integer_zero_node;
8d08fdba 13273
de22184b 13274 TYPE_VALUES (enumtype) = nreverse (values);
2986ae00 13275
5156628f 13276 if (processing_template_decl)
b87692e5 13277 {
9360ac70
MM
13278 tree scope = current_scope ();
13279 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
ae499cce 13280 add_stmt (build_min (TAG_DEFN, enumtype));
b87692e5 13281 }
cbf882af
MM
13282 else
13283 {
13284 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
13285 int lowprec = min_precision (minnode, unsignedp);
13286 int highprec = min_precision (maxnode, unsignedp);
13287 int precision = MAX (lowprec, highprec);
13288 tree tem;
5566b478 13289
cbf882af 13290 TYPE_SIZE (enumtype) = NULL_TREE;
8d08fdba 13291
cbf882af 13292 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
8ccc31eb 13293
cbf882af
MM
13294 TYPE_PRECISION (enumtype) = precision;
13295 if (unsignedp)
13296 fixup_unsigned_type (enumtype);
13297 else
13298 fixup_signed_type (enumtype);
8ccc31eb 13299
cbf882af
MM
13300 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13301 /* Use the width of the narrowest normal C type which is wide
68642fb6 13302 enough. */
cbf882af
MM
13303 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
13304 (precision, 1));
13305 else
13306 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
8d08fdba 13307
cbf882af
MM
13308 TYPE_SIZE (enumtype) = 0;
13309 layout_type (enumtype);
68642fb6 13310
cbf882af
MM
13311 /* Fix up all variant types of this enum type. */
13312 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
13313 tem = TYPE_NEXT_VARIANT (tem))
13314 {
13315 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
13316 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
13317 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
13318 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
13319 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
13320 TYPE_MODE (tem) = TYPE_MODE (enumtype);
13321 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
13322 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
11cf4d18 13323 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
cbf882af
MM
13324 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
13325 }
8d08fdba 13326
cbf882af
MM
13327 /* Finish debugging output for this type. */
13328 rest_of_type_compilation (enumtype, namespace_bindings_p ());
13329 }
13330
8d08fdba
MS
13331 return enumtype;
13332}
13333
079e1098 13334/* Build and install a CONST_DECL for an enumeration constant of the
58595203 13335 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
13336 Assignment of sequential values by default is handled here. */
13337
58595203
MM
13338void
13339build_enumerator (name, value, enumtype)
079e1098
MM
13340 tree name;
13341 tree value;
58595203 13342 tree enumtype;
8d08fdba 13343{
58595203 13344 tree decl;
e8bd800e 13345 tree context;
58595203
MM
13346 tree type;
13347 tree values;
8d08fdba
MS
13348
13349 /* Remove no-op casts from the value. */
13350 if (value)
13351 STRIP_TYPE_NOPS (value);
13352
58595203
MM
13353 if (! processing_template_decl)
13354 {
13355 /* Validate and default VALUE. */
13356 if (value != NULL_TREE)
13357 {
fc611ce0 13358 value = decl_constant_value (value);
58595203
MM
13359
13360 if (TREE_CODE (value) == INTEGER_CST)
13361 {
13362 value = default_conversion (value);
13363 constant_expression_warning (value);
13364 }
13365 else
13366 {
13367 cp_error ("enumerator value for `%D' not integer constant", name);
13368 value = NULL_TREE;
13369 }
13370 }
13371
13372 /* Default based on previous value. */
13373 if (value == NULL_TREE && ! processing_template_decl)
13374 {
13375 tree prev_value;
13376
13377 if (TYPE_VALUES (enumtype))
13378 {
13379 /* The next value is the previous value ... */
13380 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13381 /* ... plus one. */
ab76ca54
MM
13382 value = cp_build_binary_op (PLUS_EXPR,
13383 prev_value,
13384 integer_one_node);
68642fb6 13385
58595203
MM
13386 if (tree_int_cst_lt (value, prev_value))
13387 cp_error ("overflow in enumeration values at `%D'", name);
13388 }
13389 else
13390 value = integer_zero_node;
13391 }
13392
13393 /* Remove no-op casts from the value. */
13394 if (value)
13395 STRIP_TYPE_NOPS (value);
013bc8af 13396#if 0
58595203
MM
13397 /* To fix MAX_VAL enum consts. (bkoz) */
13398 TREE_TYPE (value) = integer_type_node;
013bc8af 13399#endif
58595203 13400 }
8d08fdba 13401
58595203
MM
13402 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13403 Even in other cases, we will later (in finish_enum) be setting
13404 the type of VALUE. But, we don't need to make a copy if this
13405 VALUE is one of the enumeration constants for this same
13406 enumeration type. */
13407 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13408 if (TREE_VALUE (values) == value)
13409 break;
13410 /* If we didn't break out of the loop, then we do need a copy. */
13411 if (!values && value)
13412 value = copy_node (value);
ed44da02 13413
8d08fdba 13414 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
13415 context = current_scope ();
13416
13417 /* Build the actual enumeration constant. Note that the enumeration
13418 constants have the type of their initializers until the
13419 enumeration is complete:
13420
13421 [ dcl.enum ]
13422
13423 Following the closing brace of an enum-specifier, each enumer-
13424 ator has the type of its enumeration. Prior to the closing
13425 brace, the type of each enumerator is the type of its
13426 initializing value.
13427
13428 In finish_enum we will reset the type. Of course, if we're
13429 processing a template, there may be no value. */
13430 type = value ? TREE_TYPE (value) : NULL_TREE;
13431
13432 if (context && context == current_class_type)
13433 /* This enum declaration is local to the class. We need the full
8f17b5c5 13434 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
13435 decl = build_lang_decl (CONST_DECL, name, type);
13436 else
13437 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 13438 a function could mean local to a class method. */
58595203 13439 decl = build_decl (CONST_DECL, name, type);
e8bd800e 13440
58595203
MM
13441 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13442 DECL_INITIAL (decl) = value;
13443 TREE_READONLY (decl) = 1;
e8bd800e 13444
58595203
MM
13445 if (context && context == current_class_type)
13446 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
8f032717
MM
13447 on the TYPE_FIELDS list for `S'. (That's so that you can say
13448 things like `S::i' later.) */
58595203
MM
13449 finish_member_declaration (decl);
13450 else
13451 {
13452 pushdecl (decl);
13453 GNU_xref_decl (current_function_decl, decl);
13454 }
13455
13456 /* Add this enumeration constant to the list for this type. */
13457 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
13458}
13459
8d08fdba 13460\f
a8f73d4b
MM
13461/* We're defining DECL. Make sure that it's type is OK. */
13462
13463static void
f444e36b 13464check_function_type (decl, current_function_parms)
a8f73d4b 13465 tree decl;
f444e36b 13466 tree current_function_parms;
a8f73d4b
MM
13467{
13468 tree fntype = TREE_TYPE (decl);
d0f062fb 13469 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
13470
13471 /* In a function definition, arg types must be complete. */
13472 require_complete_types_for_parms (current_function_parms);
13473
d0f062fb 13474 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b
MM
13475 {
13476 cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13477
13478 /* Make it return void instead, but don't change the
13479 type of the DECL_RESULT, in case we have a named return value. */
13480 if (TREE_CODE (fntype) == METHOD_TYPE)
13481 {
13482 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13483 TREE_TYPE (decl)
13484 = build_cplus_method_type (ctype,
13485 void_type_node,
13486 FUNCTION_ARG_CHAIN (decl));
13487 }
13488 else
13489 TREE_TYPE (decl)
13490 = build_function_type (void_type_node,
13491 TYPE_ARG_TYPES (TREE_TYPE (decl)));
68642fb6 13492 TREE_TYPE (decl)
a8f73d4b
MM
13493 = build_exception_variant (fntype,
13494 TYPE_RAISES_EXCEPTIONS (fntype));
13495 }
13496 else
13497 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13498}
13499
8d08fdba
MS
13500/* Create the FUNCTION_DECL for a function definition.
13501 DECLSPECS and DECLARATOR are the parts of the declaration;
13502 they describe the function's name and the type it returns,
13503 but twisted together in a fashion that parallels the syntax of C.
13504
a8f73d4b
MM
13505 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13506 DECLARATOR is really the DECL for the function we are about to
13507 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 13508 indicating that the function is an inline defined in-class.
68642fb6 13509
8d08fdba
MS
13510 This function creates a binding context for the function body
13511 as well as setting up the FUNCTION_DECL in current_function_decl.
13512
13513 Returns 1 on success. If the DECLARATOR is not suitable for a function
13514 (it defines a datum instead), we return 0, which tells
13515 yyparse to report a parse error.
13516
13517 For C++, we must first check whether that datum makes any sense.
13518 For example, "class A local_a(1,2);" means that variable local_a
13519 is an aggregate of type A, which should have a constructor
87e3dbc9 13520 applied to it with the argument list [1, 2]. */
8d08fdba
MS
13521
13522int
a8f73d4b 13523start_function (declspecs, declarator, attrs, flags)
c11b6f21 13524 tree declspecs, declarator, attrs;
a8f73d4b 13525 int flags;
8d08fdba 13526{
5566b478 13527 tree decl1;
8d08fdba
MS
13528 tree ctype = NULL_TREE;
13529 tree fntype;
13530 tree restype;
13531 extern int have_extern_spec;
13532 extern int used_extern_spec;
13533 int doing_friend = 0;
a8f73d4b 13534 struct binding_level *bl;
f444e36b 13535 tree current_function_parms;
8d08fdba 13536
8d08fdba 13537 /* Sanity check. */
a1774733 13538 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
8d08fdba
MS
13539 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13540
e92cc029 13541 /* This should only be done once on the top most decl. */
8d08fdba
MS
13542 if (have_extern_spec && !used_extern_spec)
13543 {
1f8f4a0b 13544 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
8d08fdba
MS
13545 used_extern_spec = 1;
13546 }
13547
a8f73d4b 13548 if (flags & SF_PRE_PARSED)
8d08fdba
MS
13549 {
13550 decl1 = declarator;
13551
8d08fdba
MS
13552 fntype = TREE_TYPE (decl1);
13553 if (TREE_CODE (fntype) == METHOD_TYPE)
13554 ctype = TYPE_METHOD_BASETYPE (fntype);
13555
cab1f180
ML
13556 /* ISO C++ 11.4/5. A friend function defined in a class is in
13557 the (lexical) scope of the class in which it is defined. */
8d08fdba
MS
13558 if (!ctype && DECL_FRIEND_P (decl1))
13559 {
4f1c5b7d 13560 ctype = DECL_FRIEND_CONTEXT (decl1);
8d08fdba
MS
13561
13562 /* CTYPE could be null here if we're dealing with a template;
13563 for example, `inline friend float foo()' inside a template
13564 will have no CTYPE set. */
13565 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13566 ctype = NULL_TREE;
13567 else
13568 doing_friend = 1;
13569 }
13570
5566b478
MS
13571 last_function_parms = DECL_ARGUMENTS (decl1);
13572 last_function_parm_tags = NULL_TREE;
8d08fdba
MS
13573 }
13574 else
13575 {
c11b6f21 13576 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
8d08fdba
MS
13577 /* If the declarator is not suitable for a function definition,
13578 cause a syntax error. */
13579 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13580
13581 fntype = TREE_TYPE (decl1);
13582
13583 restype = TREE_TYPE (fntype);
7ddedda4 13584 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
8d08fdba 13585 {
8251199e 13586 cp_error ("semicolon missing after declaration of `%#T'", restype);
051e6fd7 13587 shadow_tag (build_tree_list (NULL_TREE, restype));
8d08fdba
MS
13588 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13589 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13590 fntype = build_function_type (integer_type_node,
13591 TYPE_ARG_TYPES (fntype));
13592 else
13593 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13594 integer_type_node,
13595 TYPE_ARG_TYPES (fntype));
13596 TREE_TYPE (decl1) = fntype;
13597 }
13598
13599 if (TREE_CODE (fntype) == METHOD_TYPE)
13600 ctype = TYPE_METHOD_BASETYPE (fntype);
35680744 13601 else if (DECL_MAIN_P (decl1))
8d08fdba
MS
13602 {
13603 /* If this doesn't return integer_type, complain. */
13604 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13605 {
a28e3c7f 13606 if (pedantic || warn_return_type)
8251199e 13607 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
13608 TREE_TYPE (decl1) = fntype = default_function_type;
13609 }
8d08fdba
MS
13610 }
13611 }
68642fb6 13612
b35d4555
MM
13613 /* Sometimes we don't notice that a function is a static member, and
13614 build a METHOD_TYPE for it. Fix that up now. */
13615 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13616 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13617 {
3afb32a4 13618 revert_static_member_fn (decl1);
b35d4555
MM
13619 last_function_parms = TREE_CHAIN (last_function_parms);
13620 ctype = NULL_TREE;
13621 }
8d08fdba
MS
13622
13623 /* Warn if function was previously implicitly declared
13624 (but not if we warned then). */
13625 if (! warn_implicit
13626 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
8251199e 13627 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
8d08fdba 13628
f181d4ae
MM
13629 /* Set up current_class_type, and enter the scope of the class, if
13630 appropriate. */
13631 if (ctype)
13632 push_nested_class (ctype, 1);
13633 else if (DECL_STATIC_FUNCTION_P (decl1))
13634 push_nested_class (DECL_CONTEXT (decl1), 2);
13635
13636 /* Now that we have entered the scope of the class, we must restore
13637 the bindings for any template parameters surrounding DECL1, if it
13638 is an inline member template. (Order is important; consider the
13639 case where a template parameter has the same name as a field of
13640 the class.) It is not until after this point that
13641 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 13642 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
13643 maybe_begin_member_template_processing (decl1);
13644
56cb9733 13645 /* Effective C++ rule 15. */
9188c363 13646 if (warn_ecpp
596ea4e5 13647 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363
MM
13648 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13649 cp_warning ("`operator=' should return a reference to `*this'");
13650
13651 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13652 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
13653 if (!DECL_INITIAL (decl1))
13654 DECL_INITIAL (decl1) = error_mark_node;
9188c363
MM
13655
13656#ifdef SET_DEFAULT_DECL_ATTRIBUTES
13657 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13658#endif
68642fb6 13659
9188c363
MM
13660 /* This function exists in static storage.
13661 (This does not mean `static' in the C sense!) */
13662 TREE_STATIC (decl1) = 1;
13663
13664 /* We must call push_template_decl after current_class_type is set
13665 up. (If we are processing inline definitions after exiting a
13666 class scope, current_class_type will be NULL_TREE until set above
13667 by push_nested_class.) */
13668 if (processing_template_decl)
13669 decl1 = push_template_decl (decl1);
13670
f181d4ae 13671 /* We are now in the scope of the function being defined. */
8d08fdba 13672 current_function_decl = decl1;
f181d4ae 13673
5566b478
MS
13674 /* Save the parm names or decls from this function's declarator
13675 where store_parm_decls will find them. */
13676 current_function_parms = last_function_parms;
13677 current_function_parm_tags = last_function_parm_tags;
8d08fdba 13678
a8f73d4b
MM
13679 /* Make sure the parameter and return types are reasonable. When
13680 you declare a function, these types can be incomplete, but they
13681 must be complete when you define the function. */
5156628f 13682 if (! processing_template_decl)
f444e36b 13683 check_function_type (decl1, current_function_parms);
f181d4ae 13684
a8f73d4b
MM
13685 /* Build the return declaration for the function. */
13686 restype = TREE_TYPE (fntype);
13687 if (!processing_template_decl)
13688 {
13689 if (!DECL_RESULT (decl1))
5566b478 13690 {
5566b478 13691 DECL_RESULT (decl1)
a8f73d4b 13692 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
68642fb6
UD
13693 c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13694 DECL_RESULT (decl1));
5566b478 13695 }
5566b478 13696 }
a8f73d4b
MM
13697 else
13698 /* Just use `void'. Nobody will ever look at this anyhow. */
13699 DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13700
13701 /* Initialize RTL machinery. We cannot do this until
13702 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13703 even when processing a template; this is how we get
01d939e8 13704 CFUN set up, and our per-function variables initialized. */
a8f73d4b
MM
13705 bl = current_binding_level;
13706 init_function_start (decl1, input_filename, lineno);
13707 current_binding_level = bl;
a8f73d4b
MM
13708
13709 /* Even though we're inside a function body, we still don't want to
13710 call expand_expr to calculate the size of a variable-sized array.
13711 We haven't necessarily assigned RTL to all variables yet, so it's
13712 not safe to try to expand expressions involving them. */
13713 immediate_size_expand = 0;
01d939e8 13714 cfun->x_dont_save_pending_sizes_p = 1;
a8f73d4b 13715
f444e36b
MM
13716 /* Start the statement-tree, start the tree now. */
13717 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
6f80451c 13718
a8f73d4b 13719 /* Let the user know we're compiling this function. */
ea11ca7e 13720 announce_function (decl1);
b7484fbe 13721
878cd289
MS
13722 /* Record the decl so that the function name is defined.
13723 If we already have a decl for this name, and it is a FUNCTION_DECL,
13724 use the old decl. */
a8f73d4b 13725 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 13726 {
75650646 13727 /* A specialization is not used to guide overload resolution. */
2228d450 13728 if (!DECL_TEMPLATE_SPECIALIZATION (decl1)
959d8796 13729 && ! DECL_FUNCTION_MEMBER_P (decl1))
75650646 13730 decl1 = pushdecl (decl1);
2c73f9f5 13731 else
b7698cf0
JM
13732 {
13733 /* We need to set the DECL_CONTEXT. */
13734 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13735 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13736 /* And make sure we have enough default args. */
13737 check_default_args (decl1);
13738 }
878cd289
MS
13739 fntype = TREE_TYPE (decl1);
13740 }
5566b478 13741
a8f73d4b 13742 /* Reset these in case the call to pushdecl changed them. */
5566b478 13743 current_function_decl = decl1;
01d939e8 13744 cfun->decl = decl1;
878cd289 13745
78c120b5
MM
13746 /* If we are (erroneously) defining a function that we have already
13747 defined before, wipe out what we knew before. */
5362b086 13748 if (!DECL_PENDING_INLINE_P (decl1)
78c120b5
MM
13749 && DECL_SAVED_FUNCTION_DATA (decl1))
13750 {
13751 free (DECL_SAVED_FUNCTION_DATA (decl1));
13752 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13753 }
b35d4555 13754
f444e36b 13755 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
13756 {
13757 /* We know that this was set up by `grokclassfn'. We do not
13758 wait until `store_parm_decls', since evil parse errors may
13759 never get us to that point. Here we keep the consistency
13760 between `current_class_type' and `current_class_ptr'. */
13761 tree t = DECL_ARGUMENTS (decl1);
68642fb6
UD
13762
13763 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
b35d4555
MM
13764 162);
13765 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13766 19990811);
68642fb6
UD
13767
13768 cp_function_chain->x_current_class_ref
b35d4555
MM
13769 = build_indirect_ref (t, NULL_PTR);
13770 cp_function_chain->x_current_class_ptr = t;
13771
018fc244
MM
13772 /* Constructors and destructors need to know whether they're "in
13773 charge" of initializing virtual base classes. */
454fa7a7 13774 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
018fc244 13775 current_in_charge_parm = TREE_CHAIN (t);
b35d4555
MM
13776 }
13777
db5ae43f 13778 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 13779 {
4f1c5b7d 13780 tree ctx = decl_function_context (decl1);
86052cc3 13781
faae18ab
MS
13782 if (DECL_NOT_REALLY_EXTERN (decl1))
13783 DECL_EXTERNAL (decl1) = 0;
86052cc3 13784
68642fb6 13785 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
86052cc3
JM
13786 && TREE_PUBLIC (ctx))
13787 /* This is a function in a local class in an extern inline
13788 function. */
13789 comdat_linkage (decl1);
faae18ab 13790 }
8d08fdba
MS
13791 /* If this function belongs to an interface, it is public.
13792 If it belongs to someone else's interface, it is also external.
1f901793 13793 This only affects inlines and template instantiations. */
5566b478
MS
13794 else if (interface_unknown == 0
13795 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
d11ad92e 13796 || flag_alt_external_templates))
8d08fdba 13797 {
5566b478 13798 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 13799 || processing_template_decl)
1f901793
JM
13800 {
13801 DECL_EXTERNAL (decl1)
13802 = (interface_only
9c73ec84
MS
13803 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13804 && !DECL_VINDEX (decl1)));
1f901793
JM
13805
13806 /* For WIN32 we also want to put these in linkonce sections. */
13807 maybe_make_one_only (decl1);
13808 }
db5ae43f 13809 else
893de33c 13810 DECL_EXTERNAL (decl1) = 0;
e8abc66f 13811 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 13812 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba 13813 }
c16c47fb
JM
13814 else if (interface_unknown && interface_only
13815 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13816 || flag_alt_external_templates))
13817 {
13818 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13819 interface, we will have interface_only set but not
13820 interface_known. In that case, we don't want to use the normal
13821 heuristics because someone will supply a #pragma implementation
13822 elsewhere, and deducing it here would produce a conflict. */
13823 comdat_linkage (decl1);
13824 DECL_EXTERNAL (decl1) = 0;
13825 DECL_INTERFACE_KNOWN (decl1) = 1;
13826 DECL_DEFER_OUTPUT (decl1) = 1;
13827 }
8d08fdba 13828 else
a0a33927
MS
13829 {
13830 /* This is a definition, not a reference.
b7484fbe
MS
13831 So clear DECL_EXTERNAL. */
13832 DECL_EXTERNAL (decl1) = 0;
faae18ab 13833
5566b478
MS
13834 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13835 && ! DECL_INTERFACE_KNOWN (decl1)
13836 /* Don't try to defer nested functions for now. */
4f1c5b7d 13837 && ! decl_function_context (decl1))
878cd289
MS
13838 DECL_DEFER_OUTPUT (decl1) = 1;
13839 else
893de33c 13840 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 13841 }
a9aedbc2 13842
f444e36b
MM
13843 pushlevel (0);
13844 current_binding_level->parm_flag = 1;
8d08fdba 13845
f30432d7
MS
13846 if (attrs)
13847 cplus_decl_attributes (decl1, NULL_TREE, attrs);
68642fb6 13848
495d26d6
JM
13849 /* We need to do this even if we aren't expanding yet so that
13850 assemble_external works. */
13851 make_function_rtl (decl1);
db5ae43f 13852
8d08fdba
MS
13853 /* Promote the value to int before returning it. */
13854 if (C_PROMOTING_INTEGER_TYPE_P (restype))
5566b478
MS
13855 restype = type_promotes_to (restype);
13856
13857 /* If this fcn was already referenced via a block-scope `extern' decl
13858 (or an implicit decl), propagate certain information about the usage. */
13859 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13860 TREE_ADDRESSABLE (decl1) = 1;
13861
8d08fdba 13862 if (DECL_RESULT (decl1) == NULL_TREE)
f30432d7
MS
13863 {
13864 DECL_RESULT (decl1)
13865 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
91063b51
MM
13866 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13867 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
f30432d7 13868 }
8d08fdba 13869
5566b478
MS
13870 ++function_depth;
13871
0d9eb3ba 13872 if (DECL_DESTRUCTOR_P (decl1))
46e8c075
MM
13873 {
13874 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13875 DECL_CONTEXT (dtor_label) = current_function_decl;
13876 }
3dbc07b6
MM
13877 /* Under the old ABI we return `this' from constructors, so we make
13878 ordinary `return' statements in constructors jump to CTOR_LABEL;
13879 from there we return `this'. Under the new ABI, we don't bother
13880 with any of this. By not setting CTOR_LABEL the remainder of the
13881 machinery is automatically disabled. */
13882 else if (!flag_new_abi && DECL_CONSTRUCTOR_P (decl1))
46e8c075
MM
13883 {
13884 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13885 DECL_CONTEXT (ctor_label) = current_function_decl;
13886 }
8d08fdba 13887
f444e36b
MM
13888 store_parm_decls (current_function_parms);
13889
8d08fdba
MS
13890 return 1;
13891}
13892\f
13893/* Store the parameter declarations into the current function declaration.
13894 This is called after parsing the parameter declarations, before
13895 digesting the body of the function.
13896
13897 Also install to binding contour return value identifier, if any. */
13898
f444e36b
MM
13899static void
13900store_parm_decls (current_function_parms)
13901 tree current_function_parms;
8d08fdba
MS
13902{
13903 register tree fndecl = current_function_decl;
13904 register tree parm;
13905 int parms_have_cleanups = 0;
eb66be0e 13906 tree cleanups = NULL_TREE;
8d08fdba 13907
8d08fdba
MS
13908 /* This is a list of types declared among parms in a prototype. */
13909 tree parmtags = current_function_parm_tags;
13910
13911 /* This is a chain of any other decls that came in among the parm
13912 declarations. If a parm is declared with enum {foo, bar} x;
13913 then CONST_DECLs for foo and bar are put here. */
13914 tree nonparms = NULL_TREE;
13915
b35d4555 13916 if (current_function_parms)
8d08fdba
MS
13917 {
13918 /* This case is when the function was defined with an ANSI prototype.
13919 The parms already have decls, so we need not do anything here
13920 except record them as in effect
13921 and complain if any redundant old-style parm decls were written. */
13922
b35d4555
MM
13923 tree specparms = current_function_parms;
13924 tree next;
13925
f444e36b 13926 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 13927 at class level. */
f444e36b 13928 storedecls (NULL_TREE);
8d08fdba 13929
f444e36b 13930 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
13931 for each of these. We must do them in reverse order so that
13932 they end in the correct forward order. */
f444e36b 13933 specparms = nreverse (specparms);
5566b478 13934
b35d4555 13935 for (parm = specparms; parm; parm = next)
8d08fdba
MS
13936 {
13937 next = TREE_CHAIN (parm);
13938 if (TREE_CODE (parm) == PARM_DECL)
13939 {
f444e36b 13940 tree cleanup;
fe1b3b96 13941
f444e36b
MM
13942 if (DECL_NAME (parm) == NULL_TREE
13943 || TREE_CODE (parm) != VOID_TYPE)
13944 pushdecl (parm);
13945 else
13946 cp_error ("parameter `%D' declared void", parm);
eb66be0e 13947
5362b086 13948 cleanup = (processing_template_decl
f444e36b
MM
13949 ? NULL_TREE
13950 : maybe_build_cleanup (parm));
68642fb6 13951
f444e36b
MM
13952 if (cleanup)
13953 cleanups = tree_cons (parm, cleanup, cleanups);
8d08fdba
MS
13954 }
13955 else
13956 {
13957 /* If we find an enum constant or a type tag,
13958 put it aside for the moment. */
13959 TREE_CHAIN (parm) = NULL_TREE;
13960 nonparms = chainon (nonparms, parm);
13961 }
13962 }
13963
f444e36b
MM
13964 /* Get the decls in their original chain order and record in the
13965 function. This is all and only the PARM_DECLs that were
13966 pushed into scope by the loop above. */
13967 DECL_ARGUMENTS (fndecl) = getdecls ();
13968 storetags (chainon (parmtags, gettags ()));
8d08fdba
MS
13969 }
13970 else
13971 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13972
13973 /* Now store the final chain of decls for the arguments
13974 as the decl-chain of the current lexical scope.
13975 Put the enumerators in as well, at the front so that
13976 DECL_ARGUMENTS is not modified. */
f444e36b 13977 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
eb448459 13978
eb66be0e
MS
13979 /* Now that we have initialized the parms, we can start their
13980 cleanups. We cannot do this before, since expand_decl_cleanup
13981 should not be called before the parm can be used. */
fe1b3b96
MM
13982 while (cleanups)
13983 {
68642fb6 13984 finish_decl_cleanup (TREE_PURPOSE (cleanups),
fe1b3b96
MM
13985 TREE_VALUE (cleanups));
13986 cleanups = TREE_CHAIN (cleanups);
13987 }
eb66be0e 13988
8d08fdba 13989 /* Create a binding contour which can be used to catch
f444e36b 13990 cleanup-generated temporaries. */
8d08fdba 13991 if (parms_have_cleanups)
f444e36b 13992 pushlevel (0);
8d08fdba 13993
b35d4555 13994 /* Do the starting of the exception specifications, if we have any. */
68642fb6 13995 if (flag_exceptions && !processing_template_decl
1660cb3a 13996 && flag_enforce_eh_specs
b35d4555
MM
13997 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13998 current_eh_spec_try_block = expand_start_eh_spec ();
8d08fdba
MS
13999}
14000
8d08fdba 14001\f
59026e79
MM
14002/* We have finished doing semantic analysis on DECL, but have not yet
14003 generated RTL for its body. Save away our current state, so that
14004 when we want to generate RTL later we know what to do. */
14005
14006static void
14007save_function_data (decl)
14008 tree decl;
14009{
ae499cce 14010 struct cp_language_function *f;
59026e79
MM
14011
14012 /* Save the language-specific per-function data so that we can
14013 get it back when we really expand this function. */
14014 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
14015 19990908);
68642fb6 14016
59026e79 14017 /* Make a copy. */
ae499cce
MM
14018 f = ((struct cp_language_function *)
14019 xmalloc (sizeof (struct cp_language_function)));
4e135bdd 14020 memcpy (f, cp_function_chain, sizeof (struct cp_language_function));
59026e79
MM
14021 DECL_SAVED_FUNCTION_DATA (decl) = f;
14022
14023 /* Clear out the bits we don't need. */
ae499cce
MM
14024 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
14025 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
59026e79
MM
14026 f->x_named_label_uses = NULL;
14027 f->bindings = NULL;
14028
14029 /* When we get back here again, we will be expanding. */
14030 f->x_expanding_p = 1;
914653a2
MM
14031
14032 /* If we've already decided that we cannot inline this function, we
14033 must remember that fact when we actually go to expand the
14034 function. */
14035 f->cannot_inline = current_function_cannot_inline;
59026e79
MM
14036}
14037
efee38a9
MM
14038/* At the end of every constructor we generate to code to return
14039 `this'. Do that now. */
14040
14041static void
14042finish_constructor_body ()
14043{
14044 /* Any return from a constructor will end up here. */
3dbc07b6 14045 if (ctor_label)
ae499cce 14046 add_stmt (build_stmt (LABEL_STMT, ctor_label));
efee38a9
MM
14047
14048 /* Clear CTOR_LABEL so that finish_return_stmt knows to really
14049 generate the return, rather than a goto to CTOR_LABEL. */
14050 ctor_label = NULL_TREE;
14051 /* In check_return_expr we translate an empty return from a
14052 constructor to a return of `this'. */
14053 finish_return_stmt (NULL_TREE);
46e8c075 14054 /* Mark the end of the constructor. */
ae499cce 14055 add_stmt (build_stmt (CTOR_STMT));
efee38a9
MM
14056}
14057
9bfadf57
MM
14058/* At the end of every destructor we generate code to restore virtual
14059 function tables to the values desired by base classes and to call
efee38a9 14060 to base class destructors. Do that now. */
9bfadf57
MM
14061
14062static void
14063finish_destructor_body ()
14064{
14065 tree compound_stmt;
9bfadf57
MM
14066 tree virtual_size;
14067 tree exprstmt;
298d6f60 14068 tree if_stmt;
9bfadf57
MM
14069
14070 /* Create a block to contain all the extra code. */
14071 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
14072
efee38a9 14073 /* Any return from a destructor will end up here. */
ae499cce 14074 add_stmt (build_stmt (LABEL_STMT, dtor_label));
efee38a9 14075
9bfadf57
MM
14076 /* Generate the code to call destructor on base class. If this
14077 destructor belongs to a class with virtual functions, then set
14078 the virtual function table pointer to represent the type of our
14079 base class. */
14080
14081 /* This side-effect makes call to `build_delete' generate the code
14082 we have to have at the end of this destructor. `build_delete'
14083 will set the flag again. */
14084 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
14085
9bfadf57 14086 exprstmt = build_delete (current_class_type,
68642fb6 14087 current_class_ref,
86f45d2c 14088 sfk_base_destructor,
68642fb6 14089 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
9bfadf57
MM
14090 0);
14091
14092 if (exprstmt != error_mark_node
14093 && (TREE_CODE (exprstmt) != NOP_EXPR
14094 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
14095 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
14096 {
9bfadf57
MM
14097 if (exprstmt != void_zero_node)
14098 /* Don't call `expand_expr_stmt' if we're not going to do
14099 anything, since -Wall will give a diagnostic. */
14100 finish_expr_stmt (exprstmt);
14101
efee38a9 14102 /* Run destructors for all virtual baseclasses. */
9bfadf57
MM
14103 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14104 {
a55583e9
MM
14105 tree vbases;
14106 tree if_stmt;
14107
14108 if_stmt = begin_if_stmt ();
9bfadf57 14109 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
68642fb6 14110 current_in_charge_parm,
9bfadf57
MM
14111 integer_two_node),
14112 if_stmt);
14113
a55583e9
MM
14114 vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14115 /* The CLASSTYPE_VBASECLASSES list is in initialization
14116 order, so we have to march through it in reverse order. */
14117 for (vbases = nreverse (copy_list (vbases));
14118 vbases;
14119 vbases = TREE_CHAIN (vbases))
9bfadf57 14120 {
a55583e9
MM
14121 tree vbase = TREE_VALUE (vbases);
14122
14123 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (vbase)))
9bfadf57
MM
14124 {
14125 tree vb = get_vbase
a55583e9 14126 (BINFO_TYPE (vbase),
9bfadf57
MM
14127 TYPE_BINFO (current_class_type));
14128 finish_expr_stmt
14129 (build_scoped_method_call
5724a0e6 14130 (current_class_ref, vb, base_dtor_identifier,
298d6f60 14131 NULL_TREE));
9bfadf57 14132 }
9bfadf57
MM
14133 }
14134
14135 finish_then_clause (if_stmt);
14136 finish_if_stmt ();
14137 }
14138 }
68642fb6 14139
9bfadf57
MM
14140 virtual_size = c_sizeof (current_class_type);
14141
14142 /* At the end, call delete if that's what's requested. */
68642fb6 14143
9bfadf57
MM
14144 /* FDIS sez: At the point of definition of a virtual destructor
14145 (including an implicit definition), non-placement operator delete
14146 shall be looked up in the scope of the destructor's class and if
14147 found shall be accessible and unambiguous.
68642fb6 14148
9bfadf57
MM
14149 This is somewhat unclear, but I take it to mean that if the class
14150 only defines placement deletes we don't do anything here. So we
14151 pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
14152 they ever try to delete one of these. */
298d6f60
MM
14153 exprstmt = build_op_delete_call
14154 (DELETE_EXPR, current_class_ptr, virtual_size,
14155 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
14156
14157 if_stmt = begin_if_stmt ();
14158 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
14159 current_in_charge_parm,
14160 integer_one_node),
14161 if_stmt);
14162 finish_expr_stmt (exprstmt);
14163 finish_then_clause (if_stmt);
14164 finish_if_stmt ();
9bfadf57
MM
14165
14166 /* Close the block we started above. */
14167 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
14168}
14169
8d08fdba
MS
14170/* Finish up a function declaration and compile that function
14171 all the way to assembler language output. The free the storage
14172 for the function definition.
14173
68642fb6
UD
14174 FLAGS is a bitwise or of the following values:
14175 1 - CALL_POPLEVEL
f181d4ae
MM
14176 An extra call to poplevel (and expand_end_bindings) must be
14177 made to take care of the binding contour for the base
14178 initializers. This is only relevant for constructors.
14179 2 - INCLASS_INLINE
14180 We just finished processing the body of an in-class inline
14181 function definition. (This processing will have taken place
87e3dbc9 14182 after the class definition is complete.) */
8d08fdba 14183
4d6abc1c 14184tree
0acf7199 14185finish_function (flags)
f181d4ae 14186 int flags;
8d08fdba
MS
14187{
14188 register tree fndecl = current_function_decl;
14189 tree fntype, ctype = NULL_TREE;
f181d4ae
MM
14190 int call_poplevel = (flags & 1) != 0;
14191 int inclass_inline = (flags & 2) != 0;
87e3dbc9 14192 int nested;
8d08fdba
MS
14193
14194 /* When we get some parse errors, we can end up without a
14195 current_function_decl, so cope. */
14196 if (fndecl == NULL_TREE)
4d6abc1c 14197 return error_mark_node;
8d08fdba 14198
87e3dbc9 14199 nested = function_depth > 1;
8d08fdba
MS
14200 fntype = TREE_TYPE (fndecl);
14201
9bfadf57
MM
14202 /* TREE_READONLY (fndecl) = 1;
14203 This caused &foo to be of type ptr-to-const-function
14204 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 14205
f444e36b 14206 my_friendly_assert (building_stmt_tree (), 20000911);
8d08fdba 14207
db9b2174
MM
14208 /* For a cloned function, we've already got all the code we need;
14209 there's no need to add any extra bits. */
f444e36b 14210 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 14211 {
efee38a9
MM
14212 if (DECL_CONSTRUCTOR_P (fndecl))
14213 {
14214 finish_constructor_body ();
14215 if (call_poplevel)
14216 do_poplevel ();
14217 }
9bfadf57
MM
14218 else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
14219 finish_destructor_body ();
efee38a9
MM
14220 else if (DECL_MAIN_P (fndecl))
14221 {
14222 /* Make it so that `main' always returns 0 by default. */
14223#ifdef VMS
14224 finish_return_stmt (integer_one_node);
14225#else
14226 finish_return_stmt (integer_zero_node);
14227#endif
14228 }
87e3dbc9 14229
b35d4555
MM
14230 /* Finish dealing with exception specifiers. */
14231 if (flag_exceptions && !processing_template_decl
1660cb3a 14232 && flag_enforce_eh_specs
b35d4555 14233 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
68642fb6 14234 expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
b35d4555
MM
14235 (TREE_TYPE (current_function_decl)),
14236 current_eh_spec_try_block);
5566b478 14237 }
68642fb6 14238
558475f0 14239 /* If we're saving up tree structure, tie off the function now. */
f444e36b 14240 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
8d2733ca 14241
8d08fdba
MS
14242 /* This must come after expand_function_end because cleanups might
14243 have declarations (from inline functions) that need to go into
14244 this function's blocks. */
f444e36b
MM
14245 if (current_binding_level->parm_flag != 1)
14246 my_friendly_abort (122);
14247 poplevel (1, 0, 1);
8d08fdba 14248
a8f73d4b 14249 /* Remember that we were in class scope. */
db5ae43f 14250 if (current_class_name)
a8f73d4b 14251 ctype = current_class_type;
db5ae43f 14252
1caa11d3
MM
14253 /* Must mark the RESULT_DECL as being in this function. */
14254 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14255
14256 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14257 to the FUNCTION_DECL node itself. */
14258 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14259
59026e79 14260 /* Save away current state, if appropriate. */
f444e36b 14261 if (!processing_template_decl)
59026e79
MM
14262 save_function_data (fndecl);
14263
95fabfd3
MM
14264 /* If this function calls `setjmp' it cannot be inlined. When
14265 `longjmp' is called it is not guaranteed to restore the value of
14266 local variables that have been modified since the call to
14267 `setjmp'. So, if were to inline this function into some caller
14268 `c', then when we `longjmp', we might not restore all variables
14269 in `c'. (It might seem, at first blush, that there's no way for
14270 this function to modify local variables in `c', but their
14271 addresses may have been stored somewhere accessible to this
14272 function.) */
f444e36b 14273 if (!processing_template_decl && calls_setjmp_p (fndecl))
95fabfd3
MM
14274 DECL_UNINLINABLE (fndecl) = 1;
14275
f444e36b
MM
14276 /* Clear out memory we no longer need. */
14277 free_after_parsing (cfun);
14278 /* Since we never call rest_of_compilation, we never clear
14279 CFUN. Do so explicitly. */
14280 free_after_compilation (cfun);
14281 cfun = NULL;
a8f73d4b
MM
14282
14283 /* If this is a in-class inline definition, we may have to pop the
14284 bindings for the template parameters that we added in
14285 maybe_begin_member_template_processing when start_function was
14286 called. */
14287 if (inclass_inline)
14288 maybe_end_member_template_processing ();
14289
14290 /* Leave the scope of the class. */
14291 if (ctype)
14292 pop_nested_class ();
5566b478
MS
14293
14294 --function_depth;
8d08fdba 14295
4d6abc1c 14296 /* Clean up. */
28cbf42c 14297 if (! nested)
1f8f4a0b
MM
14298 /* Let the error reporting routines know that we're outside a
14299 function. For a nested function, this value is used in
14300 pop_cp_function_context and then reset via pop_function_context. */
14301 current_function_decl = NULL_TREE;
4d6abc1c
MM
14302
14303 return fndecl;
8d08fdba
MS
14304}
14305\f
14306/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
14307 DECLSPECS and DECLARATOR are the parts of the declaration;
14308 they describe the return type and the name of the function,
14309 but twisted together in a fashion that parallels the syntax of C.
14310
14311 This function creates a binding context for the function body
14312 as well as setting up the FUNCTION_DECL in current_function_decl.
14313
14314 Returns a FUNCTION_DECL on success.
14315
14316 If the DECLARATOR is not suitable for a function (it defines a datum
14317 instead), we return 0, which tells yyparse to report a parse error.
14318
14319 May return void_type_node indicating that this method is actually
14320 a friend. See grokfield for more details.
14321
14322 Came here with a `.pushlevel' .
14323
14324 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14325 CHANGES TO CODE IN `grokfield'. */
e92cc029 14326
8d08fdba 14327tree
acf82af2
JM
14328start_method (declspecs, declarator, attrlist)
14329 tree declarator, declspecs, attrlist;
8d08fdba 14330{
c11b6f21 14331 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
acf82af2 14332 attrlist);
8d08fdba
MS
14333
14334 /* Something too ugly to handle. */
14335 if (fndecl == NULL_TREE)
14336 return NULL_TREE;
14337
14338 /* Pass friends other than inline friend functions back. */
a1774733 14339 if (fndecl == void_type_node)
8d08fdba
MS
14340 return fndecl;
14341
14342 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14343 /* Not a function, tell parser to report parse error. */
14344 return NULL_TREE;
14345
8d08fdba
MS
14346 if (DECL_IN_AGGR_P (fndecl))
14347 {
14348 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14349 {
68642fb6 14350 if (DECL_CONTEXT (fndecl)
2c73f9f5 14351 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2ae7bada
NS
14352 cp_error ("`%D' is already defined in class `%T'", fndecl,
14353 DECL_CONTEXT (fndecl));
8d08fdba
MS
14354 }
14355 return void_type_node;
14356 }
14357
f3400fe2
JM
14358 check_template_shadow (fndecl);
14359
faae18ab
MS
14360 DECL_THIS_INLINE (fndecl) = 1;
14361
8926095f 14362 if (flag_default_inline)
8d08fdba
MS
14363 DECL_INLINE (fndecl) = 1;
14364
36a117a5
MM
14365 /* We process method specializations in finish_struct_1. */
14366 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
3ac3d9ea 14367 fndecl = push_template_decl (fndecl);
a0a33927 14368
8d08fdba
MS
14369 if (! DECL_FRIEND_P (fndecl))
14370 {
8d08fdba
MS
14371 if (TREE_CHAIN (fndecl))
14372 {
14373 fndecl = copy_node (fndecl);
14374 TREE_CHAIN (fndecl) = NULL_TREE;
14375 }
14376
14377 if (DECL_CONSTRUCTOR_P (fndecl))
a0a33927
MS
14378 {
14379 if (! grok_ctor_properties (current_class_type, fndecl))
14380 return void_type_node;
14381 }
8d08fdba
MS
14382 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14383 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14384 }
14385
cd9f6678 14386 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
8d08fdba
MS
14387
14388 /* Make a place for the parms */
14389 pushlevel (0);
14390 current_binding_level->parm_flag = 1;
68642fb6 14391
8d08fdba
MS
14392 DECL_IN_AGGR_P (fndecl) = 1;
14393 return fndecl;
14394}
14395
14396/* Go through the motions of finishing a function definition.
14397 We don't compile this method until after the whole class has
14398 been processed.
14399
14400 FINISH_METHOD must return something that looks as though it
14401 came from GROKFIELD (since we are defining a method, after all).
14402
14403 This is called after parsing the body of the function definition.
14404 STMTS is the chain of statements that makes up the function body.
14405
14406 DECL is the ..._DECL that `start_method' provided. */
14407
14408tree
14409finish_method (decl)
14410 tree decl;
14411{
14412 register tree fndecl = decl;
14413 tree old_initial;
8d08fdba
MS
14414
14415 register tree link;
14416
a1774733 14417 if (decl == void_type_node)
8d08fdba
MS
14418 return decl;
14419
14420 old_initial = DECL_INITIAL (fndecl);
14421
14422 /* Undo the level for the parms (from start_method).
14423 This is like poplevel, but it causes nothing to be
14424 saved. Saving information here confuses symbol-table
14425 output routines. Besides, this information will
14426 be correctly output when this method is actually
14427 compiled. */
14428
14429 /* Clear out the meanings of the local variables of this level;
14430 also record in each decl which block it belongs to. */
14431
14432 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14433 {
14434 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 14435 pop_binding (DECL_NAME (link), link);
8d08fdba
MS
14436 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14437 DECL_CONTEXT (link) = NULL_TREE;
14438 }
14439
8d08fdba
MS
14440 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14441 (HOST_WIDE_INT) current_binding_level->level_chain,
14442 current_binding_level->parm_flag,
5566b478 14443 current_binding_level->keep);
8d08fdba
MS
14444
14445 poplevel (0, 0, 0);
14446
14447 DECL_INITIAL (fndecl) = old_initial;
14448
14449 /* We used to check if the context of FNDECL was different from
14450 current_class_type as another way to get inside here. This didn't work
14451 for String.cc in libg++. */
14452 if (DECL_FRIEND_P (fndecl))
14453 {
14454 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14455 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14456 decl = void_type_node;
14457 }
14458
14459 return decl;
14460}
14461\f
14462/* Called when a new struct TYPE is defined.
14463 If this structure or union completes the type of any previous
14464 variable declaration, lay it out and output its rtl. */
14465
14466void
14467hack_incomplete_structures (type)
14468 tree type;
14469{
f30432d7 14470 tree *list;
70adf8a9 14471 struct binding_level *level;
8d08fdba
MS
14472
14473 if (!type) /* Don't do this for class templates. */
14474 return;
14475
70adf8a9
JM
14476 if (namespace_bindings_p ())
14477 {
14478 level = 0;
14479 list = &namespace_scope_incomplete;
14480 }
14481 else
14482 {
14483 level = innermost_nonclass_level ();
14484 list = &level->incomplete;
14485 }
14486
14487 while (1)
14488 {
14489 while (*list)
14490 {
14491 tree decl = TREE_VALUE (*list);
14492 if ((decl && TREE_TYPE (decl) == type)
14493 || (TREE_TYPE (decl)
14494 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14495 && TREE_TYPE (TREE_TYPE (decl)) == type))
f30432d7 14496 {
70adf8a9
JM
14497 int toplevel = toplevel_bindings_p ();
14498 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14499 && TREE_TYPE (TREE_TYPE (decl)) == type)
14500 layout_type (TREE_TYPE (decl));
14501 layout_decl (decl, 0);
14502 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14503 if (! toplevel)
14504 {
14505 tree cleanup;
14506 expand_decl (decl);
14507 cleanup = maybe_build_cleanup (decl);
14508 expand_decl_init (decl);
14509 if (! expand_decl_cleanup (decl, cleanup))
14510 cp_error ("parser lost in parsing declaration of `%D'",
14511 decl);
14512 }
14513 *list = TREE_CHAIN (*list);
f30432d7 14514 }
70adf8a9
JM
14515 else
14516 list = &TREE_CHAIN (*list);
14517 }
14518
14519 /* Keep looking through artificial binding levels generated
14520 for local variables. */
14521 if (level && level->keep == 2)
14522 {
14523 level = level->level_chain;
14524 list = &level->incomplete;
f30432d7
MS
14525 }
14526 else
70adf8a9 14527 break;
f30432d7 14528 }
8d08fdba
MS
14529}
14530
86f45d2c
MM
14531/* If DECL is of a type which needs a cleanup, build that cleanup
14532 here. */
e92cc029 14533
86f45d2c
MM
14534tree
14535maybe_build_cleanup (decl)
14536 tree decl;
8d08fdba
MS
14537{
14538 tree type = TREE_TYPE (decl);
86f45d2c 14539
834c6dff 14540 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 14541 {
80048418 14542 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
8d08fdba 14543 tree rval;
8d08fdba 14544
8d08fdba
MS
14545 if (TREE_CODE (type) == ARRAY_TYPE)
14546 rval = decl;
14547 else
14548 {
14549 mark_addressable (decl);
14550 rval = build_unary_op (ADDR_EXPR, decl, 0);
14551 }
14552
14553 /* Optimize for space over speed here. */
14554 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14555 || flag_expensive_optimizations)
14556 flags |= LOOKUP_NONVIRTUAL;
14557
86f45d2c
MM
14558 rval = build_delete (TREE_TYPE (rval), rval,
14559 sfk_complete_destructor, flags, 0);
8d08fdba
MS
14560
14561 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14562 && ! TYPE_HAS_DESTRUCTOR (type))
e1b3e07d 14563 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
051e6fd7 14564 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
8d08fdba 14565
8d08fdba
MS
14566 return rval;
14567 }
14568 return 0;
14569}
14570\f
558475f0 14571/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
14572
14573void
14574finish_stmt ()
14575{
558475f0
MM
14576 /* Always assume this statement was not an expression statement. If
14577 it actually was an expression statement, its our callers
14578 responsibility to fix this up. */
14579 last_expr_type = NULL_TREE;
8d08fdba
MS
14580}
14581
3afb32a4
MM
14582/* DECL was originally constructed as a non-static member function,
14583 but turned out to be static. Update it accordingly. */
700f8a87 14584
8857f91e 14585void
3afb32a4
MM
14586revert_static_member_fn (decl)
14587 tree decl;
8d08fdba 14588{
700f8a87 14589 tree tmp;
3afb32a4
MM
14590 tree function = TREE_TYPE (decl);
14591 tree args = TYPE_ARG_TYPES (function);
8d08fdba 14592
68642fb6 14593 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
91063b51 14594 != TYPE_UNQUALIFIED)
68642fb6 14595 cp_error ("static member function `%#D' declared with type qualifiers",
11306230 14596 decl);
f30432d7 14597
700f8a87
MS
14598 args = TREE_CHAIN (args);
14599 tmp = build_function_type (TREE_TYPE (function), args);
91063b51 14600 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
f30432d7 14601 tmp = build_exception_variant (tmp,
8d08fdba 14602 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
14603 TREE_TYPE (decl) = tmp;
14604 if (DECL_ARGUMENTS (decl))
14605 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14606 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 14607}
a4443a08 14608
68642fb6
UD
14609/* Initialize the variables used during compilation of a C++
14610 function. */
db5ae43f 14611
99dccabc
MM
14612static void
14613push_cp_function_context (f)
14614 struct function *f;
14615{
ae499cce
MM
14616 struct cp_language_function *p
14617 = ((struct cp_language_function *)
14618 xcalloc (1, sizeof (struct cp_language_function)));
14619 f->language = (struct language_function *) p;
db5ae43f 14620
b35d4555
MM
14621 /* It takes an explicit call to expand_body to generate RTL for a
14622 function. */
14623 expanding_p = 0;
f1dedc31
MM
14624
14625 /* Whenever we start a new function, we destroy temporaries in the
14626 usual way. */
ae499cce 14627 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
db5ae43f
MS
14628}
14629
a8f73d4b
MM
14630/* Free the language-specific parts of F, now that we've finished
14631 compiling the function. */
db5ae43f 14632
99dccabc
MM
14633static void
14634pop_cp_function_context (f)
14635 struct function *f;
db5ae43f 14636{
d658cd4c
MM
14637 if (f->language)
14638 free (f->language);
99dccabc 14639 f->language = 0;
db5ae43f 14640}
ebfc180f 14641
59026e79 14642/* Mark P for GC. */
4519c0a8 14643
59026e79
MM
14644static void
14645mark_lang_function (p)
ae499cce 14646 struct cp_language_function *p;
59026e79 14647{
87e3dbc9
MM
14648 if (!p)
14649 return;
14650
8f17b5c5
MM
14651 mark_c_language_function (&p->base);
14652
4519c0a8
MM
14653 ggc_mark_tree (p->x_ctor_label);
14654 ggc_mark_tree (p->x_dtor_label);
4519c0a8
MM
14655 ggc_mark_tree (p->x_current_class_ptr);
14656 ggc_mark_tree (p->x_current_class_ref);
b35d4555 14657 ggc_mark_tree (p->x_eh_spec_try_block);
4519c0a8 14658
6625cdb5 14659 mark_named_label_lists (&p->x_named_labels, &p->x_named_label_uses);
a8f73d4b 14660 mark_binding_level (&p->bindings);
4519c0a8
MM
14661}
14662
59026e79
MM
14663/* Mark the language-specific data in F for GC. */
14664
a09ba2e0 14665static void
59026e79
MM
14666mark_cp_function_context (f)
14667 struct function *f;
14668{
ae499cce 14669 mark_lang_function ((struct cp_language_function *) f->language);
59026e79 14670}
4519c0a8 14671
4519c0a8
MM
14672void
14673lang_mark_tree (t)
14674 tree t;
14675{
14676 enum tree_code code = TREE_CODE (t);
14677 if (code == IDENTIFIER_NODE)
14678 {
14679 struct lang_identifier *li = (struct lang_identifier *) t;
14680 struct lang_id2 *li2 = li->x;
14681 ggc_mark_tree (li->namespace_bindings);
a8f73d4b 14682 ggc_mark_tree (li->bindings);
4519c0a8
MM
14683 ggc_mark_tree (li->class_value);
14684 ggc_mark_tree (li->class_template_info);
14685
14686 if (li2)
14687 {
14688 ggc_mark_tree (li2->label_value);
14689 ggc_mark_tree (li2->implicit_decl);
14690 ggc_mark_tree (li2->error_locus);
14691 }
14692 }
87e3dbc9
MM
14693 else if (code == CPLUS_BINDING)
14694 {
14695 if (BINDING_HAS_LEVEL_P (t))
14696 mark_binding_level (&BINDING_LEVEL (t));
14697 else
14698 ggc_mark_tree (BINDING_SCOPE (t));
14699 ggc_mark_tree (BINDING_VALUE (t));
14700 }
14701 else if (code == OVERLOAD)
14702 ggc_mark_tree (OVL_FUNCTION (t));
14703 else if (code == TEMPLATE_PARM_INDEX)
14704 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
4519c0a8
MM
14705 else if (TREE_CODE_CLASS (code) == 'd')
14706 {
14707 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14708
14709 if (ld)
14710 {
d60f72ae 14711 ggc_mark (ld);
8f17b5c5 14712 c_mark_lang_decl (&ld->decl_flags.base);
5362b086 14713 if (!DECL_GLOBAL_CTOR_P (t)
6462c441
MM
14714 && !DECL_GLOBAL_DTOR_P (t)
14715 && !DECL_THUNK_P (t))
af3b4e59 14716 ggc_mark_tree (ld->decl_flags.u2.access);
31f8e4f3
MM
14717 else if (DECL_THUNK_P (t))
14718 ggc_mark_tree (ld->decl_flags.u2.vcall_offset);
4519c0a8
MM
14719 if (TREE_CODE (t) != NAMESPACE_DECL)
14720 ggc_mark_tree (ld->decl_flags.u.template_info);
16bb3387
JM
14721 else
14722 mark_binding_level (&NAMESPACE_LEVEL (t));
4519c0a8
MM
14723 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14724 {
4519c0a8 14725 ggc_mark_tree (ld->befriending_classes);
8f17b5c5 14726 ggc_mark_tree (ld->context);
db9b2174 14727 ggc_mark_tree (ld->cloned_function);
596ea4e5
AS
14728 if (!DECL_OVERLOADED_OPERATOR_P (t))
14729 ggc_mark_tree (ld->u2.vtt_parm);
4519c0a8
MM
14730 if (TREE_CODE (t) == TYPE_DECL)
14731 ggc_mark_tree (ld->u.sorted_fields);
59026e79
MM
14732 else if (TREE_CODE (t) == FUNCTION_DECL
14733 && !DECL_PENDING_INLINE_P (t))
14734 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
4519c0a8
MM
14735 }
14736 }
14737 }
14738 else if (TREE_CODE_CLASS (code) == 't')
14739 {
14740 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14741
68642fb6 14742 if (lt && !(TREE_CODE (t) == POINTER_TYPE
87e3dbc9 14743 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
4519c0a8 14744 {
c27db0df 14745 ggc_mark (lt);
911a71a7 14746 ggc_mark_tree (lt->primary_base);
4519c0a8
MM
14747 ggc_mark_tree (lt->vfields);
14748 ggc_mark_tree (lt->vbases);
14749 ggc_mark_tree (lt->tags);
4519c0a8 14750 ggc_mark_tree (lt->size);
fee7654e 14751 ggc_mark_tree (lt->pure_virtuals);
4519c0a8
MM
14752 ggc_mark_tree (lt->friend_classes);
14753 ggc_mark_tree (lt->rtti);
14754 ggc_mark_tree (lt->methods);
14755 ggc_mark_tree (lt->template_info);
87e3dbc9 14756 ggc_mark_tree (lt->befriending_classes);
4519c0a8 14757 }
87e3dbc9
MM
14758 else if (lt)
14759 /* In the case of pointer-to-member function types, the
14760 TYPE_LANG_SPECIFIC is really just a tree. */
14761 ggc_mark_tree ((tree) lt);
4519c0a8
MM
14762 }
14763}