]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
Daily bump.
[gcc.git] / gcc / cp / decl.c
CommitLineData
e5e809f4 1/* Process declarations and variables for C compiler.
d363e7bf
AJ
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001 Free Software Foundation, Inc.
e5e809f4 4 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba
MS
5
6This file is part of GNU CC.
7
8GNU CC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
13GNU CC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GNU CC; see the file COPYING. If not, write to
e9fa0c7c
RK
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA. */
8d08fdba
MS
22
23
24/* Process declarations and symbol lookup for C front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28/* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
8d08fdba 31#include "config.h"
8d052bc7 32#include "system.h"
8d08fdba
MS
33#include "tree.h"
34#include "rtl.h"
3bdf5ad1 35#include "expr.h"
8d08fdba
MS
36#include "flags.h"
37#include "cp-tree.h"
38#include "decl.h"
39#include "lex.h"
49c249e1
JM
40#include "output.h"
41#include "except.h"
54f92bfb 42#include "toplev.h"
7ddedda4 43#include "../hash.h"
4519c0a8 44#include "ggc.h"
0e9295cf 45#include "tm_p.h"
8d08fdba 46
158991b7 47extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree));
62c154ed 48
255512c1 49#ifndef BOOL_TYPE_SIZE
2ef16140
MM
50/* In the new ABI, `bool' has size and alignment `1', on all
51 platforms. */
d2e5ee5c 52#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
e1cd6e56 53#endif
255512c1 54
5cce22b6 55static tree grokparms PARAMS ((tree));
158991b7 56static const char *redeclaration_error_message PARAMS ((tree, tree));
8d08fdba 57
158991b7 58static void push_binding_level PARAMS ((struct binding_level *, int,
49c249e1 59 int));
158991b7
KG
60static void pop_binding_level PARAMS ((void));
61static void suspend_binding_level PARAMS ((void));
62static void resume_binding_level PARAMS ((struct binding_level *));
63static struct binding_level *make_binding_level PARAMS ((void));
64static void declare_namespace_level PARAMS ((void));
6625cdb5 65static int decl_jump_unsafe PARAMS ((tree));
158991b7
KG
66static void storedecls PARAMS ((tree));
67static void require_complete_types_for_parms PARAMS ((tree));
596ea4e5
AS
68static int ambi_op_p PARAMS ((enum tree_code));
69static int unary_op_p PARAMS ((enum tree_code));
158991b7
KG
70static tree store_bindings PARAMS ((tree, tree));
71static tree lookup_tag_reverse PARAMS ((tree, tree));
72static tree obscure_complex_init PARAMS ((tree, tree));
158991b7 73static tree lookup_name_real PARAMS ((tree, int, int, int));
8e4ce833 74static void push_local_name PARAMS ((tree));
158991b7 75static void warn_extern_redeclared_static PARAMS ((tree, tree));
8e4ce833 76static tree grok_reference_init PARAMS ((tree, tree, tree));
158991b7 77static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
2c73f9f5 78 enum overload_flags, tree,
7a8f9fa9 79 tree, int, int, int, int, int, int, tree));
158991b7
KG
80static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
81static tree lookup_tag PARAMS ((enum tree_code, tree,
49c249e1
JM
82 struct binding_level *, int));
83static void set_identifier_type_value_with_scope
158991b7 84 PARAMS ((tree, tree, struct binding_level *));
158991b7 85static void record_unknown_type PARAMS ((tree, const char *));
596ea4e5 86static tree build_library_fn_1 PARAMS ((tree, enum tree_code, tree));
158991b7
KG
87static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
88static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
49c249e1 89 int));
158991b7
KG
90static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
91static void check_for_uninitialized_const_var PARAMS ((tree));
92static unsigned long typename_hash PARAMS ((hash_table_key));
d6edb99e 93static bool typename_compare PARAMS ((hash_table_key, hash_table_key));
158991b7
KG
94static void push_binding PARAMS ((tree, tree, struct binding_level*));
95static int add_binding PARAMS ((tree, tree));
96static void pop_binding PARAMS ((tree, tree));
97static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
98static tree find_binding PARAMS ((tree, tree));
99static tree select_decl PARAMS ((tree, int));
100static int lookup_flags PARAMS ((int, int));
101static tree qualify_lookup PARAMS ((tree, int));
102static tree record_builtin_java_type PARAMS ((const char *, int));
103static const char *tag_name PARAMS ((enum tag_types code));
104static void find_class_binding_level PARAMS ((void));
105static struct binding_level *innermost_nonclass_level PARAMS ((void));
106static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
107static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
108static int walk_globals_r PARAMS ((tree, void *));
109static void add_decl_to_level PARAMS ((tree, struct binding_level *));
110static tree make_label_decl PARAMS ((tree, int));
6625cdb5
JM
111static void use_label PARAMS ((tree));
112static void check_previous_goto_1 PARAMS ((tree, struct binding_level *, tree,
113 const char *, int));
114static void check_previous_goto PARAMS ((struct named_label_use_list *));
115static void check_switch_goto PARAMS ((struct binding_level *));
116static void check_previous_gotos PARAMS ((tree));
117static void pop_label PARAMS ((tree, tree));
158991b7
KG
118static void pop_labels PARAMS ((tree));
119static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
120static void layout_var_decl PARAMS ((tree));
121static void maybe_commonize_var PARAMS ((tree));
122static tree check_initializer PARAMS ((tree, tree));
123static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
124static void push_cp_function_context PARAMS ((struct function *));
125static void pop_cp_function_context PARAMS ((struct function *));
126static void mark_binding_level PARAMS ((void *));
2f8edb39 127static void mark_named_label_lists PARAMS ((void *, void *));
158991b7
KG
128static void mark_cp_function_context PARAMS ((struct function *));
129static void mark_saved_scope PARAMS ((void *));
ae499cce 130static void mark_lang_function PARAMS ((struct cp_language_function *));
158991b7 131static void save_function_data PARAMS ((tree));
f444e36b 132static void check_function_type PARAMS ((tree, tree));
158991b7
KG
133static void destroy_local_var PARAMS ((tree));
134static void finish_constructor_body PARAMS ((void));
135static void finish_destructor_body PARAMS ((void));
136static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
137static tree get_atexit_node PARAMS ((void));
138static tree get_dso_handle_node PARAMS ((void));
139static tree start_cleanup_fn PARAMS ((void));
140static void end_cleanup_fn PARAMS ((void));
0ba8a114 141static tree cp_make_fname_decl PARAMS ((tree, int));
d43829f9 142static void initialize_predefined_identifiers PARAMS ((void));
5362b086 143static tree check_special_function_return_type
1f84ec23 144 PARAMS ((special_function_kind, tree, tree));
596ea4e5
AS
145static tree push_cp_library_fn PARAMS ((enum tree_code, tree));
146static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree));
f444e36b 147static void store_parm_decls PARAMS ((tree));
d363e7bf 148static int cp_missing_noreturn_ok_p PARAMS ((tree));
8d08fdba 149
69ac77ce 150#if defined (DEBUG_CP_BINDING_LEVELS)
158991b7 151static void indent PARAMS ((void));
69ac77ce
JL
152#endif
153
8d08fdba
MS
154/* Erroneous argument lists can use this *IFF* they do not modify it. */
155tree error_mark_list;
156
7f4edbcb 157/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 158 listed here individually for documentation purposes.
8d08fdba 159
7f4edbcb
BS
160 C++ extensions
161 tree wchar_decl_node;
37c46b43 162
7f4edbcb
BS
163 tree vtable_entry_type;
164 tree delta_type_node;
165#if 0
166 Old rtti stuff.
167 tree __baselist_desc_type_node;
168 tree __i_desc_type_node, __m_desc_type_node;
169 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
946dc1c8 170#endif
7f4edbcb
BS
171 tree __t_desc_type_node;
172#if 0
173 tree __tp_desc_type_node;
174#endif
db1147b2 175 tree ti_desc_type_node;
1f4cb92b 176 tree bltn_desc_type_node, ptr_desc_type_node;
db1147b2
NS
177 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
178 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
387769ed 179 tree ptm_desc_type_node;
db1147b2 180 tree base_desc_type_node;
7f4edbcb
BS
181#if 0
182 Not needed yet? May be needed one day?
183 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
184 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
185 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
946dc1c8 186#endif
8d08fdba 187
7f4edbcb
BS
188 tree class_type_node, record_type_node, union_type_node, enum_type_node;
189 tree unknown_type_node;
8d08fdba 190
7f4edbcb 191 Array type `vtable_entry_type[]'
8d08fdba 192
7f4edbcb
BS
193 tree vtbl_type_node;
194 tree vtbl_ptr_type_node;
8d08fdba 195
2854d3c6 196 Namespaces,
8d08fdba 197
7f4edbcb 198 tree std_node;
2854d3c6 199 tree abi_node;
8d08fdba 200
7f4edbcb
BS
201 A FUNCTION_DECL which can call `abort'. Not necessarily the
202 one that the user will declare, but sufficient to be called
203 by routines that want to abort the program.
8d08fdba 204
7f4edbcb 205 tree abort_fndecl;
8d08fdba 206
7f4edbcb 207 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 208
7f4edbcb 209 tree global_delete_fndecl;
8d08fdba 210
7f4edbcb 211 Used by RTTI
669ec2b4
JM
212 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
213 tree tinfo_var_id;
214
7f4edbcb 215*/
8d08fdba 216
7f4edbcb 217tree cp_global_trees[CPTI_MAX];
8d08fdba 218
2c73f9f5 219/* Indicates that there is a type value in some namespace, although
7f4edbcb 220 that is not necessarily in scope at the moment. */
2c73f9f5
ML
221
222static tree global_type_node;
223
6bcedb4e
MM
224/* If non-zero, this is the number of times we have entered the `std'
225 namespace when we are treating that namespace as an alias for the
226 global namespace. */
227static int in_fake_std;
6633d636 228
3e3f722c
ML
229/* Expect only namespace names now. */
230static int only_namespace_names;
231
6625cdb5
JM
232/* Used only for jumps to as-yet undefined labels, since jumps to
233 defined labels can have their validity checked immediately. */
234
235struct named_label_use_list
e349ee73
MS
236{
237 struct binding_level *binding_level;
238 tree names_in_scope;
239 tree label_decl;
9c0758dd 240 const char *filename_o_goto;
e349ee73 241 int lineno_o_goto;
6625cdb5 242 struct named_label_use_list *next;
e349ee73
MS
243};
244
ed5511d9 245#define named_label_uses cp_function_chain->x_named_label_uses
8d08fdba 246
8e4ce833
JJ
247#define local_names cp_function_chain->x_local_names
248
8d08fdba
MS
249/* A list of objects which have constructors or destructors
250 which reside in the global scope. The decl is stored in
251 the TREE_VALUE slot and the initializer is stored
252 in the TREE_PURPOSE slot. */
253tree static_aggregates;
254
8d08fdba
MS
255/* -- end of C++ */
256
81b3411c 257/* A node for the integer constants 2, and 3. */
d11ad92e 258
81b3411c 259tree integer_two_node, integer_three_node;
8d08fdba 260
8d08fdba
MS
261/* Parsing a function declarator leaves here a chain of structure
262 and enum types declared in the parmlist. */
263
264static tree last_function_parm_tags;
265
8d08fdba 266/* Similar, for last_function_parm_tags. */
9cd64686 267tree last_function_parms;
8d08fdba
MS
268static tree current_function_parm_tags;
269
6625cdb5
JM
270/* A list of all LABEL_DECLs in the function that have names. Here so
271 we can clear out their names' definitions at the end of the
272 function, and so we can check the validity of jumps to these labels. */
273
274struct named_label_list
275{
276 struct binding_level *binding_level;
277 tree names_in_scope;
278 tree old_value;
279 tree label_decl;
280 tree bad_decls;
6625cdb5 281 struct named_label_list *next;
826840d9
RH
282 unsigned int in_try_scope : 1;
283 unsigned int in_catch_scope : 1;
6625cdb5 284};
8d08fdba 285
4519c0a8 286#define named_labels cp_function_chain->x_named_labels
8d08fdba 287
8d08fdba
MS
288/* Set to 0 at beginning of a function definition, and whenever
289 a label (case or named) is defined. Set to value of expression
290 returned from function when that value can be transformed into
291 a named return value. */
292
293tree current_function_return_value;
294
b8458e3e
JM
295/* Nonzero means use the ISO C94 dialect of C. */
296
297int flag_isoc94;
298
83309c26 299/* Nonzero means use the ISO C99 dialect of C. */
68642fb6 300
83309c26 301int flag_isoc99;
68642fb6 302
93e2382f
JM
303/* Nonzero means we are a hosted implementation for code shared with C. */
304
305int flag_hosted = 1;
306
307/* Nonzero means add default format_arg attributes for functions not
308 in ISO C. */
309
310int flag_noniso_default_format_attributes = 1;
311
8d08fdba
MS
312/* Nonzero if we want to conserve space in the .o files. We do this
313 by putting uninitialized data and runtime initialized data into
ddd5a7c1 314 .common instead of .data at the expense of not flagging multiple
8d08fdba
MS
315 definitions. */
316extern int flag_conserve_space;
8d08fdba 317\f
51c184be 318/* C and C++ flags are in decl2.c. */
8d08fdba 319
51c184be 320/* Flag used when debugging spew.c */
8d08fdba
MS
321
322extern int spew_debug;
323
e92cc029
MS
324/* A expression of value 0 with the same precision as a sizetype
325 node, but signed. */
326tree signed_size_zero_node;
327
0c8feefe
MM
328/* The name of the anonymous namespace, throughout this translation
329 unit. */
330tree anonymous_namespace_name;
331
b2244c65
MM
332/* The number of function bodies which we are currently processing.
333 (Zero if we are at namespace scope, one inside the body of a
334 function, two inside the body of a function in a local class, etc.) */
335int function_depth;
8d08fdba
MS
336\f
337/* For each binding contour we allocate a binding_level structure
e92cc029
MS
338 which records the names defined in that contour.
339 Contours include:
340 0) the global one
341 1) one for each function definition,
342 where internal declarations of the parameters appear.
343 2) one for each compound statement,
344 to record its declarations.
345
346 The current meaning of a name can be found by searching the levels
347 from the current one out to the global one.
348
349 Off to the side, may be the class_binding_level. This exists only
350 to catch class-local declarations. It is otherwise nonexistent.
351
352 Also there may be binding levels that catch cleanups that must be
d8f8dca1
MM
353 run when exceptions occur. Thus, to see whether a name is bound in
354 the current scope, it is not enough to look in the
355 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
356 instead. */
8d08fdba
MS
357
358/* Note that the information in the `names' component of the global contour
359 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
360
361struct binding_level
362 {
363 /* A chain of _DECL nodes for all variables, constants, functions,
e92cc029 364 and typedef types. These are in the reverse of the order
f181d4ae
MM
365 supplied. There may be OVERLOADs on this list, too, but they
366 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
8d08fdba
MS
367 tree names;
368
e92cc029
MS
369 /* A list of structure, union and enum definitions, for looking up
370 tag names.
371 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
372 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
373 or ENUMERAL_TYPE node.
374
375 C++: the TREE_VALUE nodes can be simple types for
376 component_bindings. */
8d08fdba
MS
377 tree tags;
378
2c73f9f5
ML
379 /* A list of USING_DECL nodes. */
380 tree usings;
381
ea9635c7
ML
382 /* A list of used namespaces. PURPOSE is the namespace,
383 VALUE the common ancestor with this binding_level's namespace. */
384 tree using_directives;
385
f181d4ae
MM
386 /* If this binding level is the binding level for a class, then
387 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
76191fdd 388 is the name of an entity bound in the class. The TREE_TYPE is
d8f8dca1 389 the DECL bound by this name in the class. */
8d08fdba
MS
390 tree class_shadowed;
391
f181d4ae 392 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
76191fdd
NS
393 is used for all binding levels. In addition the TREE_VALUE is the
394 IDENTIFIER_TYPE_VALUE before we entered the class. */
8d08fdba
MS
395 tree type_shadowed;
396
acef433b
MM
397 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
398 label in this scope. The TREE_PURPOSE is the previous value of
399 the IDENTIFIER_LABEL VALUE. */
400 tree shadowed_labels;
401
8d08fdba
MS
402 /* For each level (except not the global one),
403 a chain of BLOCK nodes for all the levels
404 that were entered and exited one level down. */
405 tree blocks;
406
70adf8a9
JM
407 /* The _TYPE node for this level, if parm_flag == 2. */
408 tree this_class;
409
8d08fdba
MS
410 /* The binding level which this one is contained in (inherits from). */
411 struct binding_level *level_chain;
412
f30432d7 413 /* List of decls in `names' that have incomplete
8d08fdba 414 structure or union types. */
f30432d7 415 tree incomplete;
8d08fdba 416
8d6e462b 417 /* List of VAR_DECLS saved from a previous for statement.
cab1f180 418 These would be dead in ISO-conforming code, but might
f181d4ae
MM
419 be referenced in ARM-era code. These are stored in a
420 TREE_LIST; the TREE_VALUE is the actual declaration. */
8d6e462b
PB
421 tree dead_vars_from_for;
422
8d08fdba 423 /* 1 for the level that holds the parameters of a function.
74b846e0
MM
424 2 for the level that holds a class declaration. */
425 unsigned parm_flag : 2;
8d08fdba
MS
426
427 /* 1 means make a BLOCK for this level regardless of all else.
428 2 for temporary binding contours created by the compiler. */
74b846e0 429 unsigned keep : 2;
8d08fdba
MS
430
431 /* Nonzero if this level "doesn't exist" for tags. */
432 unsigned tag_transparent : 1;
433
434 /* Nonzero if this level can safely have additional
435 cleanup-needing variables added to it. */
436 unsigned more_cleanups_ok : 1;
437 unsigned have_cleanups : 1;
438
74b846e0 439 /* Nonzero if this scope is for storing the decls for template
5566b478
MS
440 parameters and generic decls; these decls will be discarded and
441 replaced with a TEMPLATE_DECL. */
74b846e0
MM
442 unsigned template_parms_p : 1;
443
5362b086 444 /* Nonzero if this scope corresponds to the `<>' in a
74b846e0
MM
445 `template <>' clause. Whenever this flag is set,
446 TEMPLATE_PARMS_P will be set as well. */
447 unsigned template_spec_p : 1;
8d08fdba 448
a9aedbc2
MS
449 /* This is set for a namespace binding level. */
450 unsigned namespace_p : 1;
451
2ee887f2 452 /* True if this level is that of a for-statement where we need to
cab1f180 453 worry about ambiguous (ARM or ISO) scope rules. */
8d6e462b
PB
454 unsigned is_for_scope : 1;
455
826840d9
RH
456 /* True if this level corresponds to a TRY block. Currently this
457 information is only available while building the tree structure. */
458 unsigned is_try_scope : 1;
227cf171 459
826840d9
RH
460 /* True if this level corresponds to a CATCH block. Currently this
461 information is only available while building the tree structure. */
462 unsigned is_catch_scope : 1;
463
464 /* Three bits left for this word. */
8d08fdba
MS
465
466#if defined(DEBUG_CP_BINDING_LEVELS)
467 /* Binding depth at which this level began. */
468 unsigned binding_depth;
469#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
470 };
471
472#define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
68642fb6 473
8f032717 474/* The binding level currently in effect. */
8d08fdba 475
a8f73d4b 476#define current_binding_level \
52a11cbf 477 (cfun && cp_function_chain->bindings \
d363e7bf 478 ? cp_function_chain->bindings \
a8f73d4b 479 : scope_chain->bindings)
8d08fdba
MS
480
481/* The binding level of the current class, if any. */
482
9cd64686 483#define class_binding_level scope_chain->class_bindings
8d08fdba 484
8d08fdba
MS
485/* A chain of binding_level structures awaiting reuse. */
486
487static struct binding_level *free_binding_level;
488
489/* The outermost binding level, for names of file scope.
490 This is created when the compiler is started and exists
491 through the entire run. */
492
493static struct binding_level *global_binding_level;
494
8d08fdba
MS
495/* Nonzero means unconditionally make a BLOCK for the next level pushed. */
496
497static int keep_next_level_flag;
498
499#if defined(DEBUG_CP_BINDING_LEVELS)
500static int binding_depth = 0;
501static int is_class_level = 0;
502
503static void
504indent ()
505{
506 register unsigned i;
507
508 for (i = 0; i < binding_depth*2; i++)
509 putc (' ', stderr);
510}
511#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
512
158991b7 513static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
8d08fdba
MS
514
515static void
516push_binding_level (newlevel, tag_transparent, keep)
517 struct binding_level *newlevel;
518 int tag_transparent, keep;
519{
520 /* Add this level to the front of the chain (stack) of levels that
521 are active. */
961192e1 522 memset ((char*) newlevel, 0, sizeof (struct binding_level));
8f032717 523 newlevel->level_chain = current_binding_level;
8d08fdba
MS
524 current_binding_level = newlevel;
525 newlevel->tag_transparent = tag_transparent;
526 newlevel->more_cleanups_ok = 1;
227cf171 527
8d08fdba
MS
528 newlevel->keep = keep;
529#if defined(DEBUG_CP_BINDING_LEVELS)
530 newlevel->binding_depth = binding_depth;
531 indent ();
532 fprintf (stderr, "push %s level 0x%08x line %d\n",
533 (is_class_level) ? "class" : "block", newlevel, lineno);
534 is_class_level = 0;
535 binding_depth++;
536#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
537}
538
8f032717
MM
539/* Find the innermost enclosing class scope, and reset
540 CLASS_BINDING_LEVEL appropriately. */
541
542static void
543find_class_binding_level ()
544{
545 struct binding_level *level = current_binding_level;
546
547 while (level && level->parm_flag != 2)
548 level = level->level_chain;
549 if (level && level->parm_flag == 2)
550 class_binding_level = level;
551 else
552 class_binding_level = 0;
553}
554
8d08fdba
MS
555static void
556pop_binding_level ()
557{
8d08fdba
MS
558 if (global_binding_level)
559 {
2c73f9f5 560 /* Cannot pop a level, if there are none left to pop. */
8d08fdba
MS
561 if (current_binding_level == global_binding_level)
562 my_friendly_abort (123);
563 }
564 /* Pop the current level, and free the structure for reuse. */
565#if defined(DEBUG_CP_BINDING_LEVELS)
566 binding_depth--;
567 indent ();
568 fprintf (stderr, "pop %s level 0x%08x line %d\n",
569 (is_class_level) ? "class" : "block",
570 current_binding_level, lineno);
571 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
572 {
573 indent ();
574 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
575 }
8d08fdba
MS
576 is_class_level = 0;
577#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
578 {
579 register struct binding_level *level = current_binding_level;
580 current_binding_level = current_binding_level->level_chain;
581 level->level_chain = free_binding_level;
582#if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
583 if (level->binding_depth != binding_depth)
584 abort ();
585#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
586 free_binding_level = level;
587 find_class_binding_level ();
8d08fdba
MS
588 }
589}
a9aedbc2
MS
590
591static void
592suspend_binding_level ()
593{
594 if (class_binding_level)
595 current_binding_level = class_binding_level;
596
597 if (global_binding_level)
598 {
2c73f9f5 599 /* Cannot suspend a level, if there are none left to suspend. */
a9aedbc2
MS
600 if (current_binding_level == global_binding_level)
601 my_friendly_abort (123);
602 }
603 /* Suspend the current level. */
604#if defined(DEBUG_CP_BINDING_LEVELS)
605 binding_depth--;
606 indent ();
607 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
608 (is_class_level) ? "class" : "block",
609 current_binding_level, lineno);
610 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
611 {
612 indent ();
613 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
614 }
a9aedbc2
MS
615 is_class_level = 0;
616#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
617 current_binding_level = current_binding_level->level_chain;
618 find_class_binding_level ();
a9aedbc2
MS
619}
620
824b9a4c 621static void
a9aedbc2
MS
622resume_binding_level (b)
623 struct binding_level *b;
624{
2c73f9f5
ML
625 /* Resuming binding levels is meant only for namespaces,
626 and those cannot nest into classes. */
627 my_friendly_assert(!class_binding_level, 386);
628 /* Also, resuming a non-directly nested namespace is a no-no. */
629 my_friendly_assert(b->level_chain == current_binding_level, 386);
a9aedbc2
MS
630 current_binding_level = b;
631#if defined(DEBUG_CP_BINDING_LEVELS)
632 b->binding_depth = binding_depth;
633 indent ();
634 fprintf (stderr, "resume %s level 0x%08x line %d\n",
635 (is_class_level) ? "class" : "block", b, lineno);
636 is_class_level = 0;
637 binding_depth++;
638#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
639}
8d08fdba 640\f
cffa8729
MS
641/* Create a new `struct binding_level'. */
642
643static
644struct binding_level *
645make_binding_level ()
646{
647 /* NOSTRICT */
648 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
649}
650
8d08fdba
MS
651/* Nonzero if we are currently in the global binding level. */
652
653int
654global_bindings_p ()
655{
656 return current_binding_level == global_binding_level;
657}
658
8f032717
MM
659/* Return the innermost binding level that is not for a class scope. */
660
661static struct binding_level *
662innermost_nonclass_level ()
663{
664 struct binding_level *b;
665
666 b = current_binding_level;
667 while (b->parm_flag == 2)
668 b = b->level_chain;
669
670 return b;
671}
672
a9aedbc2
MS
673/* Nonzero if we are currently in a toplevel binding level. This
674 means either the global binding level or a namespace in a toplevel
8f032717 675 binding level. Since there are no non-toplevel namespace levels,
74b846e0
MM
676 this really means any namespace or template parameter level. We
677 also include a class whose context is toplevel. */
a9aedbc2
MS
678
679int
680toplevel_bindings_p ()
681{
8f032717
MM
682 struct binding_level *b = innermost_nonclass_level ();
683
74b846e0 684 return b->namespace_p || b->template_parms_p;
a9aedbc2
MS
685}
686
8f032717
MM
687/* Nonzero if this is a namespace scope, or if we are defining a class
688 which is itself at namespace scope, or whose enclosing class is
689 such a class, etc. */
a9aedbc2 690
7bdbfa05 691int
a9aedbc2
MS
692namespace_bindings_p ()
693{
8f032717
MM
694 struct binding_level *b = innermost_nonclass_level ();
695
696 return b->namespace_p;
a9aedbc2
MS
697}
698
f1dedc31
MM
699/* If KEEP is non-zero, make a BLOCK node for the next binding level,
700 unconditionally. Otherwise, use the normal logic to decide whether
701 or not to create a BLOCK. */
702
8d08fdba 703void
f1dedc31
MM
704keep_next_level (keep)
705 int keep;
8d08fdba 706{
f1dedc31 707 keep_next_level_flag = keep;
8d08fdba
MS
708}
709
710/* Nonzero if the current level needs to have a BLOCK made. */
711
712int
713kept_level_p ()
714{
715 return (current_binding_level->blocks != NULL_TREE
716 || current_binding_level->keep
717 || current_binding_level->names != NULL_TREE
718 || (current_binding_level->tags != NULL_TREE
719 && !current_binding_level->tag_transparent));
720}
721
824b9a4c 722static void
a9aedbc2
MS
723declare_namespace_level ()
724{
725 current_binding_level->namespace_p = 1;
726}
727
74b846e0
MM
728/* Returns non-zero if this scope was created to store template
729 parameters. */
730
8d08fdba 731int
74b846e0 732template_parm_scope_p ()
8d08fdba 733{
74b846e0
MM
734 return current_binding_level->template_parms_p;
735}
736
737/* Returns the kind of template specialization we are currently
738 processing, given that it's declaration contained N_CLASS_SCOPES
739 explicit scope qualifications. */
740
741tmpl_spec_kind
742current_tmpl_spec_kind (n_class_scopes)
743 int n_class_scopes;
744{
745 int n_template_parm_scopes = 0;
746 int seen_specialization_p = 0;
747 int innermost_specialization_p = 0;
748 struct binding_level *b;
749
750 /* Scan through the template parameter scopes. */
751 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
752 {
753 /* If we see a specialization scope inside a parameter scope,
754 then something is wrong. That corresponds to a declaration
755 like:
756
757 template <class T> template <> ...
758
759 which is always illegal since [temp.expl.spec] forbids the
760 specialization of a class member template if the enclosing
761 class templates are not explicitly specialized as well. */
762 if (b->template_spec_p)
763 {
764 if (n_template_parm_scopes == 0)
765 innermost_specialization_p = 1;
766 else
767 seen_specialization_p = 1;
768 }
769 else if (seen_specialization_p == 1)
770 return tsk_invalid_member_spec;
771
772 ++n_template_parm_scopes;
773 }
774
775 /* Handle explicit instantiations. */
776 if (processing_explicit_instantiation)
777 {
778 if (n_template_parm_scopes != 0)
779 /* We've seen a template parameter list during an explicit
780 instantiation. For example:
781
782 template <class T> template void f(int);
783
784 This is erroneous. */
785 return tsk_invalid_expl_inst;
786 else
787 return tsk_expl_inst;
788 }
789
790 if (n_template_parm_scopes < n_class_scopes)
791 /* We've not seen enough template headers to match all the
792 specialized classes present. For example:
793
794 template <class T> void R<T>::S<T>::f(int);
795
796 This is illegal; there needs to be one set of template
797 parameters for each class. */
798 return tsk_insufficient_parms;
799 else if (n_template_parm_scopes == n_class_scopes)
800 /* We're processing a non-template declaration (even though it may
801 be a member of a template class.) For example:
802
803 template <class T> void S<T>::f(int);
804
805 The `class T' maches the `S<T>', leaving no template headers
806 corresponding to the `f'. */
807 return tsk_none;
808 else if (n_template_parm_scopes > n_class_scopes + 1)
809 /* We've got too many template headers. For example:
810
811 template <> template <class T> void f (T);
812
813 There need to be more enclosing classes. */
814 return tsk_excessive_parms;
815 else
816 /* This must be a template. It's of the form:
817
818 template <class T> template <class U> void S<T>::f(U);
819
820 This is a specialization if the innermost level was a
821 specialization; otherwise it's just a definition of the
822 template. */
823 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
824}
825
826void
827set_class_shadows (shadows)
828 tree shadows;
829{
830 class_binding_level->class_shadowed = shadows;
831}
832
833/* Enter a new binding level.
834 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
835 not for that of tags. */
836
837void
838pushlevel (tag_transparent)
839 int tag_transparent;
840{
b35d4555 841 struct binding_level *newlevel;
8d08fdba 842
01d939e8 843 if (cfun && !doing_semantic_analysis_p ())
b35d4555 844 return;
8d08fdba 845
b35d4555 846 /* Reuse or create a struct for this binding level. */
8d08fdba
MS
847#if defined(DEBUG_CP_BINDING_LEVELS)
848 if (0)
849#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
850 if (free_binding_level)
851#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
852 {
853 newlevel = free_binding_level;
854 free_binding_level = free_binding_level->level_chain;
855 }
856 else
acef433b 857 newlevel = make_binding_level ();
cffa8729 858
8d08fdba
MS
859 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
860 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
861 keep_next_level_flag = 0;
862}
863
bd0d5d4a
JM
864/* We're defining an object of type TYPE. If it needs a cleanup, but
865 we're not allowed to add any more objects with cleanups to the current
866 scope, create a new binding level. */
867
868void
869maybe_push_cleanup_level (type)
870 tree type;
871{
872 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
873 && current_binding_level->more_cleanups_ok == 0)
874 {
875 keep_next_level (2);
876 pushlevel (1);
877 clear_last_expr ();
878 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
879 }
880}
881
74b846e0
MM
882/* Enter a new scope. The KIND indicates what kind of scope is being
883 created. */
884
885void
886begin_scope (sk)
887 scope_kind sk;
888{
889 pushlevel (0);
890
891 switch (sk)
892 {
893 case sk_template_spec:
894 current_binding_level->template_spec_p = 1;
895 /* Fall through. */
896
897 case sk_template_parms:
898 current_binding_level->template_parms_p = 1;
899 break;
900
901 default:
902 my_friendly_abort (20000309);
903 }
904}
905
906/* Exit the current scope. */
907
908void
909finish_scope ()
910{
911 poplevel (0, 0, 0);
912}
913
5566b478 914void
8d6e462b
PB
915note_level_for_for ()
916{
917 current_binding_level->is_for_scope = 1;
918}
919
6625cdb5
JM
920/* Record that the current binding level represents a try block. */
921
922void
826840d9 923note_level_for_try ()
6625cdb5 924{
826840d9
RH
925 current_binding_level->is_try_scope = 1;
926}
927
928/* Record that the current binding level represents a catch block. */
929
930void
931note_level_for_catch ()
932{
933 current_binding_level->is_catch_scope = 1;
6625cdb5
JM
934}
935
f181d4ae
MM
936/* For a binding between a name and an entity at a block scope,
937 this is the `struct binding_level' for the block. */
938#define BINDING_LEVEL(NODE) \
c7a932b1 939 (((struct tree_binding*)NODE)->scope.level)
f181d4ae 940
4890c2f4
MM
941/* A free list of CPLUS_BINDING nodes, connected by their
942 TREE_CHAINs. */
943
944static tree free_bindings;
945
f181d4ae
MM
946/* Make DECL the innermost binding for ID. The LEVEL is the binding
947 level at which this declaration is being bound. */
948
949static void
950push_binding (id, decl, level)
951 tree id;
952 tree decl;
953 struct binding_level* level;
954{
955 tree binding;
956
4890c2f4
MM
957 if (free_bindings)
958 {
959 binding = free_bindings;
960 free_bindings = TREE_CHAIN (binding);
961 }
962 else
963 binding = make_node (CPLUS_BINDING);
f181d4ae
MM
964
965 /* Now, fill in the binding information. */
966 BINDING_VALUE (binding) = decl;
d8f8dca1 967 BINDING_TYPE (binding) = NULL_TREE;
f181d4ae 968 BINDING_LEVEL (binding) = level;
8f032717 969 INHERITED_VALUE_BINDING_P (binding) = 0;
f181d4ae 970 LOCAL_BINDING_P (binding) = (level != class_binding_level);
87e3dbc9 971 BINDING_HAS_LEVEL_P (binding) = 1;
f181d4ae 972
c45df9c1 973 /* And put it on the front of the list of bindings for ID. */
f181d4ae
MM
974 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
975 IDENTIFIER_BINDING (id) = binding;
976}
977
d8f8dca1
MM
978/* ID is already bound in the current scope. But, DECL is an
979 additional binding for ID in the same scope. This is the `struct
980 stat' hack whereby a non-typedef class-name or enum-name can be
981 bound at the same level as some other kind of entity. It's the
982 responsibility of the caller to check that inserting this name is
8f032717
MM
983 legal here. Returns nonzero if the new binding was successful. */
984static int
d8f8dca1
MM
985add_binding (id, decl)
986 tree id;
987 tree decl;
988{
989 tree binding = IDENTIFIER_BINDING (id);
8f032717 990 int ok = 1;
d8f8dca1
MM
991
992 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
993 /* The new name is the type name. */
994 BINDING_TYPE (binding) = decl;
8f032717
MM
995 else if (!BINDING_VALUE (binding))
996 /* This situation arises when push_class_level_binding moves an
997 inherited type-binding out of the way to make room for a new
998 value binding. */
999 BINDING_VALUE (binding) = decl;
1000 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1001 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1002 {
1003 /* The old binding was a type name. It was placed in
1004 BINDING_VALUE because it was thought, at the point it was
1005 declared, to be the only entity with such a name. Move the
1006 type name into the type slot; it is now hidden by the new
1007 binding. */
d8f8dca1
MM
1008 BINDING_TYPE (binding) = BINDING_VALUE (binding);
1009 BINDING_VALUE (binding) = decl;
8f032717 1010 INHERITED_VALUE_BINDING_P (binding) = 0;
d8f8dca1 1011 }
263505af
MM
1012 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1013 && TREE_CODE (decl) == TYPE_DECL
1014 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1015 && same_type_p (TREE_TYPE (decl),
1016 TREE_TYPE (BINDING_VALUE (binding))))
1017 /* We have two typedef-names, both naming the same type to have
1018 the same name. This is OK because of:
1019
1020 [dcl.typedef]
1021
1022 In a given scope, a typedef specifier can be used to redefine
1023 the name of any type declared in that scope to refer to the
1024 type to which it already refers. */
1025 ok = 0;
7b176381
MM
1026 /* There can be two block-scope declarations of the same variable,
1027 so long as they are `extern' declarations. */
1028 else if (TREE_CODE (decl) == VAR_DECL
1029 && TREE_CODE (BINDING_VALUE (binding)) == VAR_DECL
1030 && DECL_EXTERNAL (decl)
1031 && DECL_EXTERNAL (BINDING_VALUE (binding)))
1032 {
1033 duplicate_decls (decl, BINDING_VALUE (binding));
1034 ok = 0;
1035 }
8f032717
MM
1036 else
1037 {
1038 cp_error ("declaration of `%#D'", decl);
1039 cp_error_at ("conflicts with previous declaration `%#D'",
1040 BINDING_VALUE (binding));
1041 ok = 0;
1042 }
1043
1044 return ok;
d8f8dca1
MM
1045}
1046
cfe507be
MM
1047/* Add DECL to the list of things declared in B. */
1048
1049static void
1050add_decl_to_level (decl, b)
1051 tree decl;
1052 struct binding_level *b;
1053{
cfe507be
MM
1054 /* We build up the list in reverse order, and reverse it later if
1055 necessary. */
1056 TREE_CHAIN (decl) = b->names;
1057 b->names = decl;
1058}
1059
1060/* Bind DECL to ID in the current_binding_level, assumed to be a local
1061 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1062 doesn't really belong to this binding level, that it got here
1063 through a using-declaration. */
f181d4ae
MM
1064
1065void
0034cf72 1066push_local_binding (id, decl, flags)
f181d4ae
MM
1067 tree id;
1068 tree decl;
0034cf72 1069 int flags;
f181d4ae 1070{
8f032717
MM
1071 struct binding_level *b;
1072
1073 /* Skip over any local classes. This makes sense if we call
1074 push_local_binding with a friend decl of a local class. */
1075 b = current_binding_level;
1076 while (b->parm_flag == 2)
1077 b = b->level_chain;
f181d4ae 1078
d8f8dca1 1079 if (lookup_name_current_level (id))
8f032717
MM
1080 {
1081 /* Supplement the existing binding. */
1082 if (!add_binding (id, decl))
1083 /* It didn't work. Something else must be bound at this
1084 level. Do not add DECL to the list of things to pop
1085 later. */
1086 return;
1087 }
d8f8dca1
MM
1088 else
1089 /* Create a new binding. */
8f032717 1090 push_binding (id, decl, b);
f181d4ae 1091
0034cf72 1092 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
a06d48ef
JM
1093 /* We must put the OVERLOAD into a TREE_LIST since the
1094 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1095 decls that got here through a using-declaration. */
1096 decl = build_tree_list (NULL_TREE, decl);
1097
f181d4ae
MM
1098 /* And put DECL on the list of things declared by the current
1099 binding level. */
cfe507be 1100 add_decl_to_level (decl, b);
f181d4ae
MM
1101}
1102
8f032717
MM
1103/* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1104 binding was successful. */
f181d4ae 1105
8f032717 1106int
f181d4ae
MM
1107push_class_binding (id, decl)
1108 tree id;
1109 tree decl;
1110{
8f032717
MM
1111 int result = 1;
1112 tree binding = IDENTIFIER_BINDING (id);
1113 tree context;
1114
1115 /* Note that we declared this value so that we can issue an error if
1116 this an illegal redeclaration of a name already used for some
1117 other purpose. */
1118 note_name_declared_in_class (id, decl);
1119
1120 if (binding && BINDING_LEVEL (binding) == class_binding_level)
d8f8dca1 1121 /* Supplement the existing binding. */
8f032717 1122 result = add_binding (id, decl);
d8f8dca1
MM
1123 else
1124 /* Create a new binding. */
1125 push_binding (id, decl, class_binding_level);
1126
1127 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1128 class-level declaration. Note that we do not use DECL here
1129 because of the possibility of the `struct stat' hack; if DECL is
1130 a class-name or enum-name we might prefer a field-name, or some
1131 such. */
1132 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
8f032717
MM
1133
1134 /* If this is a binding from a base class, mark it as such. */
1135 binding = IDENTIFIER_BINDING (id);
1136 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1137 {
280f9385
MM
1138 /* Any implicit typename must be from a base-class. The
1139 context for an implicit typename declaration is always
1140 the derived class in which the lookup was done, so the checks
1141 based on the context of DECL below will not trigger. */
83233dca 1142 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
280f9385 1143 INHERITED_VALUE_BINDING_P (binding) = 1;
8f032717
MM
1144 else
1145 {
280f9385 1146 if (TREE_CODE (decl) == OVERLOAD)
4f1c5b7d 1147 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
280f9385
MM
1148 else
1149 {
2f939d94 1150 my_friendly_assert (DECL_P (decl), 0);
55de1b66 1151 context = context_for_name_lookup (decl);
280f9385 1152 }
8f032717 1153
280f9385
MM
1154 if (is_properly_derived_from (current_class_type, context))
1155 INHERITED_VALUE_BINDING_P (binding) = 1;
1156 else
1157 INHERITED_VALUE_BINDING_P (binding) = 0;
1158 }
8f032717
MM
1159 }
1160 else if (BINDING_VALUE (binding) == decl)
1161 /* We only encounter a TREE_LIST when push_class_decls detects an
1162 ambiguity. Such an ambiguity can be overridden by a definition
1163 in this class. */
1164 INHERITED_VALUE_BINDING_P (binding) = 1;
1165
1166 return result;
f181d4ae
MM
1167}
1168
d8f8dca1
MM
1169/* Remove the binding for DECL which should be the innermost binding
1170 for ID. */
f181d4ae 1171
68642fb6
UD
1172static void
1173pop_binding (id, decl)
f181d4ae 1174 tree id;
d8f8dca1 1175 tree decl;
f181d4ae
MM
1176{
1177 tree binding;
68642fb6 1178
f181d4ae
MM
1179 if (id == NULL_TREE)
1180 /* It's easiest to write the loops that call this function without
1181 checking whether or not the entities involved have names. We
1182 get here for such an entity. */
1183 return;
1184
d8f8dca1 1185 /* Get the innermost binding for ID. */
f181d4ae 1186 binding = IDENTIFIER_BINDING (id);
f181d4ae 1187
d8f8dca1
MM
1188 /* The name should be bound. */
1189 my_friendly_assert (binding != NULL_TREE, 0);
1190
1191 /* The DECL will be either the ordinary binding or the type
1192 binding for this identifier. Remove that binding. */
1193 if (BINDING_VALUE (binding) == decl)
1194 BINDING_VALUE (binding) = NULL_TREE;
1195 else if (BINDING_TYPE (binding) == decl)
1196 BINDING_TYPE (binding) = NULL_TREE;
1197 else
1198 my_friendly_abort (0);
1199
1200 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
4890c2f4
MM
1201 {
1202 /* We're completely done with the innermost binding for this
1203 identifier. Unhook it from the list of bindings. */
1204 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1205
1206 /* Add it to the free list. */
1207 TREE_CHAIN (binding) = free_bindings;
1208 free_bindings = binding;
1209
1210 /* Clear the BINDING_LEVEL so the garbage collector doesn't walk
1211 it. */
1212 BINDING_LEVEL (binding) = NULL;
1213 }
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;
826840d9
RH
1337 if (current_binding_level->is_try_scope)
1338 labels->in_try_scope = 1;
1339 if (current_binding_level->is_catch_scope)
1340 labels->in_catch_scope = 1;
6625cdb5
JM
1341 for (decl = labels->names_in_scope; decl;
1342 decl = TREE_CHAIN (decl))
1343 if (decl_jump_unsafe (decl))
1344 labels->bad_decls = tree_cons (NULL_TREE, decl,
1345 labels->bad_decls);
1346 labels->binding_level = level_chain;
1347 labels->names_in_scope = level_chain->names;
1348 }
1349
1350 for (uses = named_label_uses; uses; uses = uses->next)
1351 if (uses->binding_level == current_binding_level)
1352 {
1353 uses->binding_level = level_chain;
1354 uses->names_in_scope = level_chain->names;
1355 }
1356 }
1357 }
1358
8d08fdba
MS
1359 /* Get the decls in the order they were written.
1360 Usually current_binding_level->names is in reverse order.
1361 But parameter decls were previously put in forward order. */
1362
1363 if (reverse)
1364 current_binding_level->names
1365 = decls = nreverse (current_binding_level->names);
1366 else
1367 decls = current_binding_level->names;
1368
1369 /* Output any nested inline functions within this block
1370 if they weren't already output. */
8d08fdba
MS
1371 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1372 if (TREE_CODE (decl) == FUNCTION_DECL
1373 && ! TREE_ASM_WRITTEN (decl)
1374 && DECL_INITIAL (decl) != NULL_TREE
6060a796
MS
1375 && TREE_ADDRESSABLE (decl)
1376 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
1377 {
1378 /* If this decl was copied from a file-scope decl
1379 on account of a block-scope extern decl,
1380 propagate TREE_ADDRESSABLE to the file-scope decl. */
1381 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1382 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1383 else
1384 {
1385 push_function_context ();
1386 output_inline_function (decl);
1387 pop_function_context ();
1388 }
1389 }
1390
d9b2d9da
MM
1391 /* When not in function-at-a-time mode, expand_end_bindings will
1392 warn about unused variables. But, in function-at-a-time mode
1393 expand_end_bindings is not passed the list of variables in the
1394 current scope, and therefore no warning is emitted. So, we
1395 explicitly warn here. */
1396 if (!processing_template_decl)
1397 warn_about_unused_variables (getdecls ());
1398
8d08fdba
MS
1399 /* If there were any declarations or structure tags in that level,
1400 or if this level is a function body,
1401 create a BLOCK to record them for the life of this function. */
8d08fdba 1402 block = NULL_TREE;
f444e36b 1403 if (keep == 1 || functionbody)
8d08fdba
MS
1404 block = make_node (BLOCK);
1405 if (block != NULL_TREE)
1406 {
f444e36b
MM
1407 BLOCK_VARS (block) = decls;
1408 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
1409 }
1410
1411 /* In each subblock, record that this is its superior. */
8d08fdba
MS
1412 if (keep >= 0)
1413 for (link = subblocks; link; link = TREE_CHAIN (link))
1414 BLOCK_SUPERCONTEXT (link) = block;
1415
f181d4ae
MM
1416 /* We still support the old for-scope rules, whereby the variables
1417 in a for-init statement were in scope after the for-statement
1418 ended. We only use the new rules in flag_new_for_scope is
1419 nonzero. */
68642fb6 1420 leaving_for_scope
f181d4ae
MM
1421 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1422
1423 /* Remove declarations for all the DECLs in this level. */
1424 for (link = decls; link; link = TREE_CHAIN (link))
1425 {
c3783399
NS
1426 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
1427 && DECL_NAME (link))
f181d4ae 1428 {
68642fb6 1429 tree outer_binding
f181d4ae
MM
1430 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1431 tree ns_binding;
1432
1433 if (!outer_binding)
1434 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
c7dda1e3
MM
1435 else
1436 ns_binding = NULL_TREE;
1437
68642fb6
UD
1438 if (outer_binding
1439 && (BINDING_LEVEL (outer_binding)
f181d4ae
MM
1440 == current_binding_level->level_chain))
1441 /* We have something like:
68642fb6 1442
f181d4ae
MM
1443 int i;
1444 for (int i; ;);
68642fb6 1445
f181d4ae
MM
1446 and we are leaving the `for' scope. There's no reason to
1447 keep the binding of the inner `i' in this case. */
d8f8dca1 1448 pop_binding (DECL_NAME (link), link);
68642fb6
UD
1449 else if ((outer_binding
1450 && (TREE_CODE (BINDING_VALUE (outer_binding))
f181d4ae 1451 == TYPE_DECL))
68642fb6 1452 || (ns_binding
f181d4ae
MM
1453 && TREE_CODE (ns_binding) == TYPE_DECL))
1454 /* Here, we have something like:
1455
1456 typedef int I;
1457
1458 void f () {
1459 for (int I; ;);
1460 }
1461
1462 We must pop the for-scope binding so we know what's a
1463 type and what isn't. */
d8f8dca1 1464 pop_binding (DECL_NAME (link), link);
e76a2646 1465 else
e76a2646 1466 {
f181d4ae
MM
1467 /* Mark this VAR_DECL as dead so that we can tell we left it
1468 there only for backward compatibility. */
1469 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 1470
f181d4ae
MM
1471 /* Keep track of what should of have happenned when we
1472 popped the binding. */
1473 if (outer_binding && BINDING_VALUE (outer_binding))
68642fb6 1474 DECL_SHADOWED_FOR_VAR (link)
f181d4ae
MM
1475 = BINDING_VALUE (outer_binding);
1476
1477 /* Add it to the list of dead variables in the next
1478 outermost binding to that we can remove these when we
1479 leave that binding. */
1480 current_binding_level->level_chain->dead_vars_from_for
1481 = tree_cons (NULL_TREE, link,
1482 current_binding_level->level_chain->
1483 dead_vars_from_for);
1484
1485 /* Although we don't pop the CPLUS_BINDING, we do clear
1486 its BINDING_LEVEL since the level is going away now. */
1487 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1488 = 0;
e76a2646 1489 }
2ee887f2 1490 }
68642fb6 1491 else
8d6e462b 1492 {
f181d4ae 1493 /* Remove the binding. */
0034cf72
JM
1494 decl = link;
1495 if (TREE_CODE (decl) == TREE_LIST)
1496 decl = TREE_VALUE (decl);
2f939d94 1497 if (DECL_P (decl))
0034cf72
JM
1498 pop_binding (DECL_NAME (decl), decl);
1499 else if (TREE_CODE (decl) == OVERLOAD)
1500 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
68642fb6 1501 else
f181d4ae 1502 my_friendly_abort (0);
8d08fdba 1503 }
f181d4ae 1504 }
8d08fdba 1505
f181d4ae
MM
1506 /* Remove declarations for any `for' variables from inner scopes
1507 that we kept around. */
1508 for (link = current_binding_level->dead_vars_from_for;
1509 link; link = TREE_CHAIN (link))
d8f8dca1 1510 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 1511
f181d4ae
MM
1512 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1513 for (link = current_binding_level->type_shadowed;
1514 link; link = TREE_CHAIN (link))
1515 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
1516
1517 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1518 for (link = current_binding_level->shadowed_labels;
68642fb6 1519 link;
acef433b 1520 link = TREE_CHAIN (link))
6625cdb5 1521 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 1522
f181d4ae
MM
1523 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1524 list if a `using' declaration put them there. The debugging
1525 back-ends won't understand OVERLOAD, so we remove them here.
1526 Because the BLOCK_VARS are (temporarily) shared with
1527 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1528 popped all the bindings. */
1529 if (block)
1530 {
1531 tree* d;
8d6e462b 1532
a06d48ef
JM
1533 for (d = &BLOCK_VARS (block); *d; )
1534 {
1535 if (TREE_CODE (*d) == TREE_LIST)
1536 *d = TREE_CHAIN (*d);
1537 else
1538 d = &TREE_CHAIN (*d);
1539 }
8d6e462b 1540 }
8d08fdba
MS
1541
1542 /* If the level being exited is the top level of a function,
1543 check over all the labels. */
8d08fdba
MS
1544 if (functionbody)
1545 {
acef433b
MM
1546 /* Since this is the top level block of a function, the vars are
1547 the function's parameters. Don't leave them in the BLOCK
1548 because they are found in the FUNCTION_DECL instead. */
8d08fdba 1549 BLOCK_VARS (block) = 0;
acef433b 1550 pop_labels (block);
8d08fdba
MS
1551 }
1552
8d08fdba
MS
1553 tmp = current_binding_level->keep;
1554
1555 pop_binding_level ();
1556 if (functionbody)
1557 DECL_INITIAL (current_function_decl) = block;
1558 else if (block)
f444e36b
MM
1559 current_binding_level->blocks
1560 = chainon (current_binding_level->blocks, block);
1561
8d08fdba
MS
1562 /* If we did not make a block for the level just exited,
1563 any blocks made for inner levels
1564 (since they cannot be recorded as subblocks in that level)
1565 must be carried forward so they will later become subblocks
1566 of something else. */
1567 else if (subblocks)
536333d4
MM
1568 current_binding_level->blocks
1569 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 1570
d9b2d9da
MM
1571 /* Each and every BLOCK node created here in `poplevel' is important
1572 (e.g. for proper debugging information) so if we created one
1573 earlier, mark it as "used". */
1574 if (block)
1575 TREE_USED (block) = 1;
1576
8d08fdba 1577 /* Take care of compiler's internal binding structures. */
a4443a08 1578 if (tmp == 2)
8d08fdba 1579 {
d9b2d9da
MM
1580 tree scope_stmts;
1581
68642fb6 1582 scope_stmts
d9b2d9da 1583 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
8d08fdba 1584 if (block)
d9b2d9da
MM
1585 {
1586 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1587 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1588 }
1589
8f471b0d 1590 block = poplevel (keep, reverse, functionbody);
8d08fdba
MS
1591 }
1592
8d08fdba
MS
1593 return block;
1594}
1595
1596/* Delete the node BLOCK from the current binding level.
1597 This is used for the block inside a stmt expr ({...})
1598 so that the block can be reinserted where appropriate. */
1599
1600void
1601delete_block (block)
1602 tree block;
1603{
1604 tree t;
1605 if (current_binding_level->blocks == block)
1606 current_binding_level->blocks = TREE_CHAIN (block);
1607 for (t = current_binding_level->blocks; t;)
1608 {
1609 if (TREE_CHAIN (t) == block)
1610 TREE_CHAIN (t) = TREE_CHAIN (block);
1611 else
1612 t = TREE_CHAIN (t);
1613 }
1614 TREE_CHAIN (block) = NULL_TREE;
1615 /* Clear TREE_USED which is always set by poplevel.
1616 The flag is set again if insert_block is called. */
1617 TREE_USED (block) = 0;
1618}
1619
1620/* Insert BLOCK at the end of the list of subblocks of the
1621 current binding level. This is used when a BIND_EXPR is expanded,
1622 to handle the BLOCK node inside the BIND_EXPR. */
1623
1624void
1625insert_block (block)
1626 tree block;
1627{
1628 TREE_USED (block) = 1;
1629 current_binding_level->blocks
1630 = chainon (current_binding_level->blocks, block);
1631}
1632
8d08fdba
MS
1633/* Set the BLOCK node for the innermost scope
1634 (the one we are currently in). */
1635
1636void
1637set_block (block)
f444e36b 1638 tree block ATTRIBUTE_UNUSED;
8d08fdba 1639{
f444e36b
MM
1640 /* The RTL expansion machinery requires us to provide this callback,
1641 but it is not applicable in function-at-a-time mode. */
1642 my_friendly_assert (cfun && !doing_semantic_analysis_p (), 20000911);
8d08fdba
MS
1643}
1644
1645/* Do a pushlevel for class declarations. */
e92cc029 1646
8d08fdba
MS
1647void
1648pushlevel_class ()
1649{
1650 register struct binding_level *newlevel;
1651
1652 /* Reuse or create a struct for this binding level. */
1653#if defined(DEBUG_CP_BINDING_LEVELS)
1654 if (0)
1655#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1656 if (free_binding_level)
1657#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1658 {
1659 newlevel = free_binding_level;
1660 free_binding_level = free_binding_level->level_chain;
1661 }
1662 else
f181d4ae 1663 newlevel = make_binding_level ();
8d08fdba
MS
1664
1665#if defined(DEBUG_CP_BINDING_LEVELS)
1666 is_class_level = 1;
1667#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1668
1669 push_binding_level (newlevel, 0, 0);
1670
8d08fdba
MS
1671 class_binding_level = current_binding_level;
1672 class_binding_level->parm_flag = 2;
70adf8a9 1673 class_binding_level->this_class = current_class_type;
8d08fdba
MS
1674}
1675
b74a0560 1676/* ...and a poplevel for class declarations. */
e92cc029 1677
273a708f 1678void
b74a0560 1679poplevel_class ()
8d08fdba
MS
1680{
1681 register struct binding_level *level = class_binding_level;
8d08fdba
MS
1682 tree shadowed;
1683
1684 my_friendly_assert (level != 0, 354);
68642fb6 1685
8d08fdba 1686 /* If we're leaving a toplevel class, don't bother to do the setting
ddd5a7c1 1687 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
8d08fdba 1688 shouldn't even be used when current_class_type isn't set, and second,
ddd5a7c1 1689 if we don't touch it here, we're able to use the cache effect if the
8d08fdba 1690 next time we're entering a class scope, it is the same class. */
b74a0560 1691 if (current_class_depth != 1)
8f032717
MM
1692 {
1693 struct binding_level* b;
1694
1695 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1696 for (shadowed = level->class_shadowed;
1697 shadowed;
1698 shadowed = TREE_CHAIN (shadowed))
1699 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
68642fb6 1700
8f032717
MM
1701 /* Find the next enclosing class, and recreate
1702 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1703 b = level->level_chain;
1704 while (b && b->parm_flag != 2)
1705 b = b->level_chain;
1706
1707 if (b)
68642fb6
UD
1708 for (shadowed = b->class_shadowed;
1709 shadowed;
8f032717
MM
1710 shadowed = TREE_CHAIN (shadowed))
1711 {
1712 tree t;
1713
1714 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1715 while (t && BINDING_LEVEL (t) != b)
1716 t = TREE_CHAIN (t);
68642fb6 1717
8f032717 1718 if (t)
68642fb6 1719 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
8f032717
MM
1720 = BINDING_VALUE (t);
1721 }
1722 }
8d08fdba
MS
1723 else
1724 /* Remember to save what IDENTIFIER's were bound in this scope so we
1725 can recover from cache misses. */
e76a2646
MS
1726 {
1727 previous_class_type = current_class_type;
1728 previous_class_values = class_binding_level->class_shadowed;
1729 }
8d08fdba
MS
1730 for (shadowed = level->type_shadowed;
1731 shadowed;
1732 shadowed = TREE_CHAIN (shadowed))
2c73f9f5 1733 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
8d08fdba 1734
f181d4ae 1735 /* Remove the bindings for all of the class-level declarations. */
68642fb6
UD
1736 for (shadowed = level->class_shadowed;
1737 shadowed;
f181d4ae 1738 shadowed = TREE_CHAIN (shadowed))
d8f8dca1 1739 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
f181d4ae 1740
8d08fdba
MS
1741 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1742 (HOST_WIDE_INT) class_binding_level->level_chain,
1743 class_binding_level->parm_flag,
5566b478 1744 class_binding_level->keep);
8d08fdba 1745
38e01259 1746 /* Now, pop out of the binding level which we created up in the
8d08fdba
MS
1747 `pushlevel_class' routine. */
1748#if defined(DEBUG_CP_BINDING_LEVELS)
1749 is_class_level = 1;
1750#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1751
1752 pop_binding_level ();
8d08fdba 1753}
8f032717
MM
1754
1755/* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1756 for any names in enclosing classes. */
1757
1758void
1759clear_identifier_class_values ()
1760{
1761 tree t;
1762
1763 if (!class_binding_level)
1764 return;
1765
1766 for (t = class_binding_level->class_shadowed;
1767 t;
1768 t = TREE_CHAIN (t))
1769 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1770}
1771
0aafb128
MM
1772/* Returns non-zero if T is a virtual function table. */
1773
1774int
1775vtable_decl_p (t, data)
1776 tree t;
1777 void *data ATTRIBUTE_UNUSED;
1778{
1779 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1780}
1781
1782/* Returns non-zero if T is a TYPE_DECL for a type with virtual
1783 functions. */
1784
1785int
1786vtype_decl_p (t, data)
1787 tree t;
1788 void *data ATTRIBUTE_UNUSED;
1789{
1790 return (TREE_CODE (t) == TYPE_DECL
34249844
NS
1791 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1792 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
0aafb128
MM
1793}
1794
f71f87f9
MM
1795/* Return the declarations that are members of the namespace NS. */
1796
1797tree
1798cp_namespace_decls (ns)
1799 tree ns;
1800{
1801 return NAMESPACE_LEVEL (ns)->names;
1802}
1803
0aafb128
MM
1804/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1805 itself, calling F for each. The DATA is passed to F as well. */
1806
1807static int
1808walk_namespaces_r (namespace, f, data)
1809 tree namespace;
1810 walk_namespaces_fn f;
1811 void *data;
1812{
1813 tree current;
1814 int result = 0;
1815
1816 result |= (*f) (namespace, data);
1817
f71f87f9 1818 for (current = cp_namespace_decls (namespace);
0aafb128
MM
1819 current;
1820 current = TREE_CHAIN (current))
1821 {
1822 if (TREE_CODE (current) != NAMESPACE_DECL
1823 || DECL_NAMESPACE_ALIAS (current))
1824 continue;
1825 if (!DECL_LANG_SPECIFIC (current))
1826 {
1827 /* Hmm. std. */
6bcedb4e 1828 my_friendly_assert (current == fake_std_node, 393);
0aafb128
MM
1829 continue;
1830 }
1831
1832 /* We found a namespace. */
1833 result |= walk_namespaces_r (current, f, data);
1834 }
1835
1836 return result;
1837}
1838
1839/* Walk all the namespaces, calling F for each. The DATA is passed to
1840 F as well. */
1841
1842int
1843walk_namespaces (f, data)
1844 walk_namespaces_fn f;
1845 void *data;
1846{
1847 return walk_namespaces_r (global_namespace, f, data);
1848}
1849
1850struct walk_globals_data {
1851 walk_globals_pred p;
1852 walk_globals_fn f;
1853 void *data;
1854};
1855
1856/* Walk the global declarations in NAMESPACE. Whenever one is found
1857 for which P returns non-zero, call F with its address. If any call
1858 to F returns a non-zero value, return a non-zero value. */
1859
68642fb6 1860static int
0aafb128
MM
1861walk_globals_r (namespace, data)
1862 tree namespace;
1863 void *data;
1864{
1865 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1866 walk_globals_pred p = wgd->p;
1867 walk_globals_fn f = wgd->f;
1868 void *d = wgd->data;
1869 tree *t;
1870 int result = 0;
1871
1872 t = &NAMESPACE_LEVEL (namespace)->names;
1873
1874 while (*t)
1875 {
1876 tree glbl = *t;
1877
1878 if ((*p) (glbl, d))
1879 result |= (*f) (t, d);
1880
1881 /* If F changed *T, then *T still points at the next item to
1882 examine. */
1883 if (*t == glbl)
1884 t = &TREE_CHAIN (*t);
1885 }
1886
1887 return result;
1888}
1889
1890/* Walk the global declarations. Whenever one is found for which P
1891 returns non-zero, call F with its address. If any call to F
1892 returns a non-zero value, return a non-zero value. */
1893
1894int
1895walk_globals (p, f, data)
1896 walk_globals_pred p;
1897 walk_globals_fn f;
1898 void *data;
1899{
1900 struct walk_globals_data wgd;
1901 wgd.p = p;
1902 wgd.f = f;
1903 wgd.data = data;
1904
1905 return walk_namespaces (walk_globals_r, &wgd);
1906}
1907
1908/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1909 DATA is non-NULL, this is the last time we will call
1910 wrapup_global_declarations for this NAMESPACE. */
1911
1912int
1913wrapup_globals_for_namespace (namespace, data)
1914 tree namespace;
1915 void *data;
1916{
f71f87f9 1917 tree globals = cp_namespace_decls (namespace);
0aafb128
MM
1918 int len = list_length (globals);
1919 tree *vec = (tree *) alloca (sizeof (tree) * len);
1920 int i;
0352cfc8 1921 int result;
0aafb128
MM
1922 tree decl;
1923 int last_time = (data != 0);
1924
1925 if (last_time && namespace == global_namespace)
1926 /* Let compile_file handle the global namespace. */
1927 return 0;
1928
1929 /* Process the decls in reverse order--earliest first.
1930 Put them into VEC from back to front, then take out from front. */
0aafb128 1931 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
62136084 1932 vec[len - i - 1] = decl;
68642fb6 1933
0352cfc8
MM
1934 if (last_time)
1935 {
1936 check_global_declarations (vec, len);
1937 return 0;
1938 }
1939
1940 /* Temporarily mark vtables as external. That prevents
1941 wrapup_global_declarations from writing them out; we must process
1942 them ourselves in finish_vtable_vardecl. */
1943 for (i = 0; i < len; ++i)
91f2aa22 1944 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
0352cfc8
MM
1945 {
1946 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1947 DECL_EXTERNAL (vec[i]) = 1;
1948 }
0aafb128 1949
0352cfc8
MM
1950 /* Write out any globals that need to be output. */
1951 result = wrapup_global_declarations (vec, len);
1952
1953 /* Undo the hack to DECL_EXTERNAL above. */
1954 for (i = 0; i < len; ++i)
1955 if (vtable_decl_p (vec[i], /*data=*/0)
1956 && DECL_NOT_REALLY_EXTERN (vec[i]))
1957 {
1958 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1959 DECL_EXTERNAL (vec[i]) = 0;
1960 }
1961
1962 return result;
0aafb128
MM
1963}
1964
4519c0a8 1965\f
fc6af6e3
RH
1966/* Mark ARG (which is really a struct binding_level **) for GC. */
1967
4519c0a8
MM
1968static void
1969mark_binding_level (arg)
1970 void *arg;
1971{
1972 struct binding_level *lvl = *(struct binding_level **)arg;
1973
6625cdb5 1974 for (; lvl; lvl = lvl->level_chain)
4519c0a8
MM
1975 {
1976 ggc_mark_tree (lvl->names);
1977 ggc_mark_tree (lvl->tags);
1978 ggc_mark_tree (lvl->usings);
1979 ggc_mark_tree (lvl->using_directives);
1980 ggc_mark_tree (lvl->class_shadowed);
1981 ggc_mark_tree (lvl->type_shadowed);
1982 ggc_mark_tree (lvl->shadowed_labels);
1983 ggc_mark_tree (lvl->blocks);
70adf8a9 1984 ggc_mark_tree (lvl->this_class);
4519c0a8
MM
1985 ggc_mark_tree (lvl->incomplete);
1986 ggc_mark_tree (lvl->dead_vars_from_for);
6625cdb5
JM
1987 }
1988}
1989
1990static void
1991mark_named_label_lists (labs, uses)
1992 void *labs;
1993 void *uses;
1994{
1995 struct named_label_list *l = *(struct named_label_list **)labs;
1996 struct named_label_use_list *u = *(struct named_label_use_list **)uses;
4519c0a8 1997
6625cdb5
JM
1998 for (; l; l = l->next)
1999 {
2000 ggc_mark (l);
2001 mark_binding_level (l->binding_level);
2002 ggc_mark_tree (l->old_value);
2003 ggc_mark_tree (l->label_decl);
2004 ggc_mark_tree (l->bad_decls);
4519c0a8 2005 }
6625cdb5
JM
2006
2007 for (; u; u = u->next)
2008 ggc_mark (u);
4519c0a8 2009}
8d08fdba
MS
2010\f
2011/* For debugging. */
5566b478
MS
2012static int no_print_functions = 0;
2013static int no_print_builtins = 0;
8d08fdba
MS
2014
2015void
2016print_binding_level (lvl)
2017 struct binding_level *lvl;
2018{
2019 tree t;
2020 int i = 0, len;
2021 fprintf (stderr, " blocks=");
2022 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
2023 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
f30432d7 2024 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
8d08fdba
MS
2025 if (lvl->tag_transparent)
2026 fprintf (stderr, " tag-transparent");
2027 if (lvl->more_cleanups_ok)
2028 fprintf (stderr, " more-cleanups-ok");
2029 if (lvl->have_cleanups)
2030 fprintf (stderr, " have-cleanups");
8d08fdba
MS
2031 fprintf (stderr, "\n");
2032 if (lvl->names)
2033 {
2034 fprintf (stderr, " names:\t");
2035 /* We can probably fit 3 names to a line? */
2036 for (t = lvl->names; t; t = TREE_CHAIN (t))
2037 {
68642fb6 2038 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
8d08fdba
MS
2039 continue;
2040 if (no_print_builtins
fc378698
MS
2041 && (TREE_CODE (t) == TYPE_DECL)
2042 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
8d08fdba
MS
2043 continue;
2044
2045 /* Function decls tend to have longer names. */
2046 if (TREE_CODE (t) == FUNCTION_DECL)
2047 len = 3;
2048 else
2049 len = 2;
2050 i += len;
2051 if (i > 6)
2052 {
2053 fprintf (stderr, "\n\t");
2054 i = len;
2055 }
2056 print_node_brief (stderr, "", t, 0);
bd6dd845 2057 if (t == error_mark_node)
8d08fdba
MS
2058 break;
2059 }
2060 if (i)
2061 fprintf (stderr, "\n");
2062 }
2063 if (lvl->tags)
2064 {
2065 fprintf (stderr, " tags:\t");
2066 i = 0;
2067 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2068 {
2069 if (TREE_PURPOSE (t) == NULL_TREE)
2070 len = 3;
2071 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2072 len = 2;
2073 else
2074 len = 4;
2075 i += len;
2076 if (i > 5)
2077 {
2078 fprintf (stderr, "\n\t");
2079 i = len;
2080 }
2081 if (TREE_PURPOSE (t) == NULL_TREE)
2082 {
2083 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2084 fprintf (stderr, ">");
2085 }
2086 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2087 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2088 else
2089 {
2090 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2091 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2092 fprintf (stderr, ">");
2093 }
2094 }
2095 if (i)
2096 fprintf (stderr, "\n");
2097 }
8d08fdba
MS
2098 if (lvl->class_shadowed)
2099 {
2100 fprintf (stderr, " class-shadowed:");
2101 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2102 {
2103 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2104 }
2105 fprintf (stderr, "\n");
2106 }
2107 if (lvl->type_shadowed)
2108 {
2109 fprintf (stderr, " type-shadowed:");
2110 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2111 {
8d08fdba 2112 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
8d08fdba
MS
2113 }
2114 fprintf (stderr, "\n");
2115 }
2116}
2117
2118void
2119print_other_binding_stack (stack)
2120 struct binding_level *stack;
2121{
2122 struct binding_level *level;
2123 for (level = stack; level != global_binding_level; level = level->level_chain)
2124 {
2125 fprintf (stderr, "binding level ");
2126 fprintf (stderr, HOST_PTR_PRINTF, level);
2127 fprintf (stderr, "\n");
2128 print_binding_level (level);
2129 }
2130}
2131
2132void
2133print_binding_stack ()
2134{
2135 struct binding_level *b;
2136 fprintf (stderr, "current_binding_level=");
2137 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2138 fprintf (stderr, "\nclass_binding_level=");
2139 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2140 fprintf (stderr, "\nglobal_binding_level=");
2141 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2142 fprintf (stderr, "\n");
2143 if (class_binding_level)
2144 {
2145 for (b = class_binding_level; b; b = b->level_chain)
2146 if (b == current_binding_level)
2147 break;
2148 if (b)
2149 b = class_binding_level;
2150 else
2151 b = current_binding_level;
2152 }
2153 else
2154 b = current_binding_level;
2155 print_other_binding_stack (b);
2156 fprintf (stderr, "global:\n");
2157 print_binding_level (global_binding_level);
2158}
a9aedbc2 2159
2c73f9f5
ML
2160/* Namespace binding access routines: The namespace_bindings field of
2161 the identifier is polymorphic, with three possible values:
2162 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2163 indicating the BINDING_VALUE of global_namespace. */
30394414 2164
2c73f9f5
ML
2165/* Check whether the a binding for the name to scope is known.
2166 Assumes that the bindings of the name are already a list
2167 of bindings. Returns the binding found, or NULL_TREE. */
2168
2169static tree
2170find_binding (name, scope)
30394414
JM
2171 tree name;
2172 tree scope;
2173{
2c73f9f5 2174 tree iter, prev = NULL_TREE;
3e3f722c
ML
2175
2176 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2177
30394414
JM
2178 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2179 iter = TREE_CHAIN (iter))
2180 {
2181 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2182 if (BINDING_SCOPE (iter) == scope)
2c73f9f5 2183 {
cfe507be 2184 /* Move binding found to the front of the list, so
2c73f9f5
ML
2185 subsequent lookups will find it faster. */
2186 if (prev)
2187 {
2188 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2189 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2190 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2191 }
2192 return iter;
2193 }
2194 prev = iter;
30394414 2195 }
2c73f9f5
ML
2196 return NULL_TREE;
2197}
2198
2199/* Always returns a binding for name in scope. If the
2200 namespace_bindings is not a list, convert it to one first.
2201 If no binding is found, make a new one. */
2202
2203tree
2204binding_for_name (name, scope)
2205 tree name;
2206 tree scope;
2207{
2208 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2209 tree result;
3e3f722c
ML
2210
2211 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2212
2c73f9f5
ML
2213 if (b && TREE_CODE (b) != CPLUS_BINDING)
2214 {
2215 /* Get rid of optimization for global scope. */
2216 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2217 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2218 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2219 }
2220 if (b && (result = find_binding (name, scope)))
2221 return result;
cd9f6678 2222 /* Not found, make a new one. */
2c73f9f5
ML
2223 result = make_node (CPLUS_BINDING);
2224 TREE_CHAIN (result) = b;
2225 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2226 BINDING_SCOPE (result) = scope;
2227 BINDING_TYPE (result) = NULL_TREE;
2228 BINDING_VALUE (result) = NULL_TREE;
2c73f9f5
ML
2229 return result;
2230}
2231
2232/* Return the binding value for name in scope, considering that
2233 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2234
2235tree
2236namespace_binding (name, scope)
2237 tree name;
2238 tree scope;
2239{
2240 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2241 if (b == NULL_TREE)
2242 return NULL_TREE;
cb0dbb9a
JM
2243 if (scope == NULL_TREE)
2244 scope = global_namespace;
2c73f9f5
ML
2245 if (TREE_CODE (b) != CPLUS_BINDING)
2246 return (scope == global_namespace) ? b : NULL_TREE;
2247 name = find_binding (name,scope);
2248 if (name == NULL_TREE)
2249 return name;
2250 return BINDING_VALUE (name);
2251}
2252
2253/* Set the binding value for name in scope. If modifying the binding
2254 of global_namespace is attempted, try to optimize it. */
2255
2256void
2257set_namespace_binding (name, scope, val)
2258 tree name;
2259 tree scope;
2260 tree val;
2261{
2262 tree b;
cb0dbb9a
JM
2263
2264 if (scope == NULL_TREE)
2265 scope = global_namespace;
68642fb6 2266
2c73f9f5
ML
2267 if (scope == global_namespace)
2268 {
2269 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2270 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2271 {
2272 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2273 return;
2274 }
2275 }
2276 b = binding_for_name (name, scope);
2277 BINDING_VALUE (b) = val;
30394414
JM
2278}
2279
dff6b454
RK
2280/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2281 select a name that is unique to this compilation unit. */
e92cc029 2282
a9aedbc2
MS
2283void
2284push_namespace (name)
2285 tree name;
2286{
b370501f 2287 tree d = NULL_TREE;
30394414
JM
2288 int need_new = 1;
2289 int implicit_use = 0;
2c73f9f5 2290 int global = 0;
30394414
JM
2291 if (!global_namespace)
2292 {
2c73f9f5 2293 /* This must be ::. */
30394414 2294 my_friendly_assert (name == get_identifier ("::"), 377);
2c73f9f5 2295 global = 1;
30394414
JM
2296 }
2297 else if (!name)
2298 {
3ab52652
ML
2299 /* The name of anonymous namespace is unique for the translation
2300 unit. */
0c8feefe
MM
2301 if (!anonymous_namespace_name)
2302 anonymous_namespace_name = get_file_function_name ('N');
2303 name = anonymous_namespace_name;
3ab52652
ML
2304 d = IDENTIFIER_NAMESPACE_VALUE (name);
2305 if (d)
2306 /* Reopening anonymous namespace. */
2307 need_new = 0;
30394414 2308 implicit_use = 1;
2c73f9f5
ML
2309 }
2310 else if (current_namespace == global_namespace
6bcedb4e
MM
2311 && !flag_honor_std
2312 && name == std_identifier)
2c73f9f5 2313 {
6bcedb4e 2314 in_fake_std++;
2c73f9f5
ML
2315 return;
2316 }
30394414
JM
2317 else
2318 {
2c73f9f5 2319 /* Check whether this is an extended namespace definition. */
30394414
JM
2320 d = IDENTIFIER_NAMESPACE_VALUE (name);
2321 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
3e3f722c
ML
2322 {
2323 need_new = 0;
2324 if (DECL_NAMESPACE_ALIAS (d))
2325 {
8251199e 2326 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
3e3f722c
ML
2327 d, DECL_NAMESPACE_ALIAS (d));
2328 d = DECL_NAMESPACE_ALIAS (d);
2329 }
2330 }
30394414 2331 }
68642fb6 2332
30394414
JM
2333 if (need_new)
2334 {
2c73f9f5 2335 /* Make a new namespace, binding the name to it. */
6b57ac29 2336 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2c73f9f5
ML
2337 /* The global namespace is not pushed, and the global binding
2338 level is set elsewhere. */
2339 if (!global)
2340 {
40f1e342 2341 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
2c73f9f5
ML
2342 d = pushdecl (d);
2343 pushlevel (0);
2344 declare_namespace_level ();
2345 NAMESPACE_LEVEL (d) = current_binding_level;
2346 }
30394414 2347 }
2c73f9f5
ML
2348 else
2349 resume_binding_level (NAMESPACE_LEVEL (d));
2350
30394414
JM
2351 if (implicit_use)
2352 do_using_directive (d);
2c73f9f5 2353 /* Enter the name space. */
30394414 2354 current_namespace = d;
a9aedbc2
MS
2355}
2356
2357/* Pop from the scope of the current namespace. */
e92cc029 2358
a9aedbc2
MS
2359void
2360pop_namespace ()
2361{
2c73f9f5
ML
2362 if (current_namespace == global_namespace)
2363 {
6bcedb4e
MM
2364 my_friendly_assert (in_fake_std > 0, 980421);
2365 in_fake_std--;
2c73f9f5
ML
2366 return;
2367 }
cb0dbb9a 2368 current_namespace = CP_DECL_CONTEXT (current_namespace);
2c73f9f5
ML
2369 /* The binding level is not popped, as it might be re-opened later. */
2370 suspend_binding_level ();
2371}
a9aedbc2 2372
61fc8c9e
MM
2373/* Push into the scope of the namespace NS, even if it is deeply
2374 nested within another namespace. */
2375
2376void
2377push_nested_namespace (ns)
2378 tree ns;
2379{
2380 if (ns == global_namespace)
2381 push_to_top_level ();
2382 else
2383 {
2384 push_nested_namespace (CP_DECL_CONTEXT (ns));
2385 push_namespace (DECL_NAME (ns));
2386 }
2387}
2388
2389/* Pop back from the scope of the namespace NS, which was previously
2390 entered with push_nested_namespace. */
68642fb6 2391
61fc8c9e
MM
2392void
2393pop_nested_namespace (ns)
2394 tree ns;
2395{
2396 while (ns != global_namespace)
2397 {
2398 pop_namespace ();
2399 ns = CP_DECL_CONTEXT (ns);
2400 }
2401
2402 pop_from_top_level ();
2403}
2404
8d08fdba
MS
2405\f
2406/* Subroutines for reverting temporarily to top-level for instantiation
2407 of templates and such. We actually need to clear out the class- and
2408 local-value slots of all identifiers, so that only the global values
2409 are at all visible. Simply setting current_binding_level to the global
2410 scope isn't enough, because more binding levels may be pushed. */
9cd64686 2411struct saved_scope *scope_chain;
8d08fdba 2412
9cd64686 2413/* Mark ARG (which is really a struct saved_scope **) for GC. */
fc6af6e3
RH
2414
2415static void
2416mark_saved_scope (arg)
2417 void *arg;
2418{
2419 struct saved_scope *t = *(struct saved_scope **)arg;
2420 while (t)
2421 {
fc6af6e3
RH
2422 mark_binding_level (&t->class_bindings);
2423 ggc_mark_tree (t->old_bindings);
2424 ggc_mark_tree (t->old_namespace);
ee8fc32b 2425 ggc_mark_tree (t->decl_ns_list);
fc6af6e3
RH
2426 ggc_mark_tree (t->class_name);
2427 ggc_mark_tree (t->class_type);
2428 ggc_mark_tree (t->access_specifier);
a8f73d4b 2429 ggc_mark_tree (t->function_decl);
fc6af6e3 2430 if (t->lang_base)
9cd64686 2431 ggc_mark_tree_varray (t->lang_base);
fc6af6e3 2432 ggc_mark_tree (t->lang_name);
fc6af6e3 2433 ggc_mark_tree (t->template_parms);
9cd64686
MM
2434 ggc_mark_tree (t->x_previous_class_type);
2435 ggc_mark_tree (t->x_previous_class_values);
6f80451c 2436 ggc_mark_tree (t->x_saved_tree);
70adf8a9
JM
2437 ggc_mark_tree (t->incomplete);
2438 ggc_mark_tree (t->lookups);
6f80451c
MM
2439
2440 mark_stmt_tree (&t->x_stmt_tree);
a8f73d4b 2441 mark_binding_level (&t->bindings);
fc6af6e3
RH
2442 t = t->prev;
2443 }
2444}
2445
e92cc029 2446static tree
45537677
MS
2447store_bindings (names, old_bindings)
2448 tree names, old_bindings;
2449{
2450 tree t;
c00996a3
JM
2451 tree search_bindings = old_bindings;
2452
45537677
MS
2453 for (t = names; t; t = TREE_CHAIN (t))
2454 {
2455 tree binding, t1, id;
2456
2457 if (TREE_CODE (t) == TREE_LIST)
2458 id = TREE_PURPOSE (t);
2459 else
2460 id = DECL_NAME (t);
2461
68642fb6 2462 if (!id
f181d4ae
MM
2463 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2464 we have no IDENTIFIER_BINDING if we have left the class
2465 scope, but cached the class-level declarations. */
2466 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
45537677
MS
2467 continue;
2468
c00996a3 2469 for (t1 = search_bindings; t1; t1 = TREE_CHAIN (t1))
45537677
MS
2470 if (TREE_VEC_ELT (t1, 0) == id)
2471 goto skip_it;
78957a2a 2472
31a714f6 2473 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
87e3dbc9 2474 binding = make_tree_vec (4);
31a714f6
MM
2475 TREE_VEC_ELT (binding, 0) = id;
2476 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2477 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2478 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2479 IDENTIFIER_BINDING (id) = NULL_TREE;
2480 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
45537677
MS
2481 TREE_CHAIN (binding) = old_bindings;
2482 old_bindings = binding;
2483 skip_it:
2484 ;
2485 }
2486 return old_bindings;
2487}
2488
8d08fdba 2489void
5566b478
MS
2490maybe_push_to_top_level (pseudo)
2491 int pseudo;
8d08fdba 2492{
a8f73d4b 2493 struct saved_scope *s;
9cd64686 2494 struct binding_level *b;
a8f73d4b
MM
2495 tree old_bindings;
2496 int need_pop;
2497
2498 s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
8d08fdba 2499
9cd64686
MM
2500 b = scope_chain ? current_binding_level : 0;
2501
a8f73d4b 2502 /* If we're in the middle of some function, save our state. */
01d939e8 2503 if (cfun)
a8f73d4b
MM
2504 {
2505 need_pop = 1;
2506 push_function_context_to (NULL_TREE);
2507 }
2508 else
2509 need_pop = 0;
e349ee73 2510
a8f73d4b 2511 old_bindings = NULL_TREE;
9cd64686 2512 if (scope_chain && previous_class_type)
a50f0918
MS
2513 old_bindings = store_bindings (previous_class_values, old_bindings);
2514
8d08fdba
MS
2515 /* Have to include global_binding_level, because class-level decls
2516 aren't listed anywhere useful. */
2517 for (; b; b = b->level_chain)
2518 {
2519 tree t;
2520
2c73f9f5
ML
2521 /* Template IDs are inserted into the global level. If they were
2522 inserted into namespace level, finish_file wouldn't find them
2523 when doing pending instantiations. Therefore, don't stop at
2524 namespace level, but continue until :: . */
74b846e0 2525 if (b == global_binding_level || (pseudo && b->template_parms_p))
5566b478 2526 break;
8d08fdba 2527
45537677 2528 old_bindings = store_bindings (b->names, old_bindings);
cffa8729 2529 /* We also need to check class_shadowed to save class-level type
45537677
MS
2530 bindings, since pushclass doesn't fill in b->names. */
2531 if (b->parm_flag == 2)
cffa8729 2532 old_bindings = store_bindings (b->class_shadowed, old_bindings);
8d08fdba 2533
8d08fdba
MS
2534 /* Unwind type-value slots back to top level. */
2535 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2536 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2537 }
fc0e7bf5
MM
2538 s->prev = scope_chain;
2539 s->old_bindings = old_bindings;
a8f73d4b
MM
2540 s->bindings = b;
2541 s->need_pop_function_context = need_pop;
2542 s->function_decl = current_function_decl;
fc0e7bf5
MM
2543
2544 scope_chain = s;
8d08fdba 2545 current_function_decl = NULL_TREE;
9cd64686 2546 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
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);
31a714f6
MM
2573
2574 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2575 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2576 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
8d08fdba 2577 }
9cd64686 2578
a8f73d4b
MM
2579 /* If we were in the middle of compiling a function, restore our
2580 state. */
2581 if (s->need_pop_function_context)
2582 pop_function_context_from (NULL_TREE);
2583 current_function_decl = s->function_decl;
e349ee73 2584
a8f73d4b 2585 free (s);
8d08fdba
MS
2586}
2587\f
2588/* Push a definition of struct, union or enum tag "name".
68642fb6 2589 into binding_level "b". "type" should be the type node,
8d08fdba
MS
2590 We assume that the tag "name" is not already defined.
2591
2592 Note that the definition may really be just a forward reference.
2593 In that case, the TYPE_SIZE will be a NULL_TREE.
2594
e92cc029 2595 C++ gratuitously puts all these tags in the name space. */
8d08fdba
MS
2596
2597/* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2598 record the shadowed value for this binding contour. TYPE is
2599 the type that ID maps to. */
2600
2601static void
2602set_identifier_type_value_with_scope (id, type, b)
2603 tree id;
2604 tree type;
2605 struct binding_level *b;
2606{
2c73f9f5 2607 if (!b->namespace_p)
8d08fdba 2608 {
2c73f9f5
ML
2609 /* Shadow the marker, not the real thing, so that the marker
2610 gets restored later. */
2611 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
8d08fdba
MS
2612 b->type_shadowed
2613 = tree_cons (id, old_type_value, b->type_shadowed);
2614 }
2c73f9f5
ML
2615 else
2616 {
2617 tree binding = binding_for_name (id, current_namespace);
2618 BINDING_TYPE (binding) = type;
2619 /* Store marker instead of real type. */
2620 type = global_type_node;
2621 }
8d08fdba
MS
2622 SET_IDENTIFIER_TYPE_VALUE (id, type);
2623}
2624
8f032717 2625/* As set_identifier_type_value_with_scope, but using current_binding_level. */
8d08fdba
MS
2626
2627void
2628set_identifier_type_value (id, type)
2629 tree id;
2630 tree type;
2631{
8f032717 2632 set_identifier_type_value_with_scope (id, type, current_binding_level);
8d08fdba
MS
2633}
2634
2c73f9f5
ML
2635/* Return the type associated with id. */
2636
2637tree
2638identifier_type_value (id)
2639 tree id;
2640{
2641 /* There is no type with that name, anywhere. */
2642 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2643 return NULL_TREE;
2644 /* This is not the type marker, but the real thing. */
2645 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2646 return REAL_IDENTIFIER_TYPE_VALUE (id);
2647 /* Have to search for it. It must be on the global level, now.
2648 Ask lookup_name not to return non-types. */
3e3f722c 2649 id = lookup_name_real (id, 2, 1, 0);
2c73f9f5
ML
2650 if (id)
2651 return TREE_TYPE (id);
2652 return NULL_TREE;
2653}
2654
a9aedbc2
MS
2655/* Pop off extraneous binding levels left over due to syntax errors.
2656
2657 We don't pop past namespaces, as they might be valid. */
e92cc029 2658
8926095f
MS
2659void
2660pop_everything ()
2661{
2662#ifdef DEBUG_CP_BINDING_LEVELS
2663 fprintf (stderr, "XXX entering pop_everything ()\n");
2664#endif
8f032717 2665 while (!toplevel_bindings_p ())
8926095f 2666 {
8f032717 2667 if (current_binding_level->parm_flag == 2)
b74a0560 2668 pop_nested_class ();
8926095f
MS
2669 else
2670 poplevel (0, 0, 0);
2671 }
2672#ifdef DEBUG_CP_BINDING_LEVELS
2673 fprintf (stderr, "XXX leaving pop_everything ()\n");
2674#endif
2675}
2676
39c01e4c
MM
2677/* The type TYPE is being declared. If it is a class template, or a
2678 specialization of a class template, do any processing required and
2679 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2680 being declared a friend. B is the binding level at which this TYPE
2681 should be bound.
2682
2683 Returns the TYPE_DECL for TYPE, which may have been altered by this
2684 processing. */
2685
68642fb6 2686static tree
39c01e4c
MM
2687maybe_process_template_type_declaration (type, globalize, b)
2688 tree type;
2689 int globalize;
2690 struct binding_level* b;
2691{
2692 tree decl = TYPE_NAME (type);
68642fb6 2693
39c01e4c
MM
2694 if (processing_template_parmlist)
2695 /* You can't declare a new template type in a template parameter
2696 list. But, you can declare a non-template type:
68642fb6 2697
39c01e4c 2698 template <class A*> struct S;
68642fb6 2699
39c01e4c
MM
2700 is a forward-declaration of `A'. */
2701 ;
68642fb6 2702 else
39c01e4c
MM
2703 {
2704 maybe_check_template_type (type);
2705
68642fb6 2706 my_friendly_assert (IS_AGGR_TYPE (type)
ed44da02 2707 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
68642fb6
UD
2708
2709
3ebc5c52 2710 if (processing_template_decl)
39c01e4c
MM
2711 {
2712 /* This may change after the call to
2713 push_template_decl_real, but we want the original value. */
2714 tree name = DECL_NAME (decl);
2715
2716 decl = push_template_decl_real (decl, globalize);
2717 /* If the current binding level is the binding level for the
2718 template parameters (see the comment in
2719 begin_template_parm_list) and the enclosing level is a class
2720 scope, and we're not looking at a friend, push the
2721 declaration of the member class into the class scope. In the
2722 friend case, push_template_decl will already have put the
2723 friend into global scope, if appropriate. */
ed44da02 2724 if (TREE_CODE (type) != ENUMERAL_TYPE
74b846e0 2725 && !globalize && b->template_parms_p
39c01e4c
MM
2726 && b->level_chain->parm_flag == 2)
2727 {
61a127b3 2728 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
39c01e4c
MM
2729 /* Put this tag on the list of tags for the class, since
2730 that won't happen below because B is not the class
2731 binding level, but is instead the pseudo-global level. */
68642fb6 2732 b->level_chain->tags =
e1b3e07d 2733 tree_cons (name, type, b->level_chain->tags);
d0f062fb 2734 if (!COMPLETE_TYPE_P (current_class_type))
39c01e4c
MM
2735 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2736 }
2737 }
2738 }
2739
2740 return decl;
2741}
2742
9188c363
MM
2743/* In C++, you don't have to write `struct S' to refer to `S'; you
2744 can just use `S'. We accomplish this by creating a TYPE_DECL as
2745 if the user had written `typedef struct S S'. Create and return
2746 the TYPE_DECL for TYPE. */
2747
2748tree
2749create_implicit_typedef (name, type)
2750 tree name;
2751 tree type;
2752{
2753 tree decl;
2754
2755 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 2756 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
2757 /* There are other implicit type declarations, like the one *within*
2758 a class that allows you to write `S::S'. We must distinguish
2759 amongst these. */
2760 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2761 TYPE_NAME (type) = decl;
2762
2763 return decl;
2764}
2765
8e4ce833
JJ
2766/* Remember a local name for name-mangling purposes. */
2767
2768static void
2769push_local_name (decl)
2770 tree decl;
2771{
2772 size_t i, nelts;
2773 tree t, name;
2774
2775 if (!local_names)
2776 VARRAY_TREE_INIT (local_names, 8, "local_names");
2777
2778 name = DECL_NAME (decl);
2779
2780 nelts = VARRAY_ACTIVE_SIZE (local_names);
2781 for (i = 0; i < nelts; i++)
2782 {
2783 t = VARRAY_TREE (local_names, i);
2784 if (DECL_NAME (t) == name)
2785 {
2786 if (!DECL_LANG_SPECIFIC (decl))
2787 retrofit_lang_decl (decl);
2788 if (DECL_LANG_SPECIFIC (t))
2789 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
2790 else
2791 DECL_DISCRIMINATOR (decl) = 1;
2792
2793 VARRAY_TREE (local_names, i) = decl;
2794 return;
2795 }
2796 }
2797
2798 VARRAY_PUSH_TREE (local_names, decl);
2799}
2800
8d08fdba 2801/* Push a tag name NAME for struct/class/union/enum type TYPE.
6757edfe 2802 Normally put it into the inner-most non-tag-transparent scope,
8d08fdba 2803 but if GLOBALIZE is true, put it in the inner-most non-class scope.
e92cc029 2804 The latter is needed for implicit declarations. */
8d08fdba
MS
2805
2806void
2807pushtag (name, type, globalize)
2808 tree name, type;
2809 int globalize;
2810{
2811 register struct binding_level *b;
8d08fdba 2812
8f032717 2813 b = current_binding_level;
8d08fdba
MS
2814 while (b->tag_transparent
2815 || (globalize && b->parm_flag == 2))
2816 b = b->level_chain;
2817
e1b3e07d 2818 b->tags = tree_cons (name, type, b->tags);
8d08fdba
MS
2819
2820 if (name)
2821 {
8d08fdba 2822 /* Do C++ gratuitous typedefing. */
db5ae43f 2823 if (IDENTIFIER_TYPE_VALUE (name) != type)
8d08fdba 2824 {
93cdc044 2825 register tree d = NULL_TREE;
848cf1e0 2826 int in_class = 0;
9188c363 2827 tree context = TYPE_CONTEXT (type);
280f9385 2828
280f9385
MM
2829 if (! context)
2830 {
2831 tree cs = current_scope ();
2832
2833 if (! globalize)
2834 context = cs;
2f939d94 2835 else if (cs != NULL_TREE && TYPE_P (cs))
280f9385
MM
2836 /* When declaring a friend class of a local class, we want
2837 to inject the newly named class into the scope
2838 containing the local class, not the namespace scope. */
4f1c5b7d 2839 context = decl_function_context (get_type_decl (cs));
280f9385 2840 }
280f9385
MM
2841 if (!context)
2842 context = current_namespace;
8d08fdba 2843
74b846e0 2844 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
93cdc044
JM
2845 || b->parm_flag == 2)
2846 in_class = 1;
93cdc044 2847
848cf1e0
MM
2848 if (current_lang_name == lang_name_java)
2849 TYPE_FOR_JAVA (type) = 1;
93cdc044 2850
9188c363 2851 d = create_implicit_typedef (name, type);
cb0dbb9a 2852 DECL_CONTEXT (d) = FROB_CONTEXT (context);
9188c363
MM
2853 if (! in_class)
2854 set_identifier_type_value_with_scope (name, type, b);
e1cd6e56 2855
39c01e4c
MM
2856 d = maybe_process_template_type_declaration (type,
2857 globalize, b);
93cdc044
JM
2858
2859 if (b->parm_flag == 2)
61a127b3 2860 {
848cf1e0 2861 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
61a127b3
MM
2862 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2863 class. But if it's a member template class, we
2864 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2865 is done later. */
2866 finish_member_declaration (d);
8f032717
MM
2867 else
2868 pushdecl_class_level (d);
61a127b3 2869 }
93cdc044
JM
2870 else
2871 d = pushdecl_with_scope (d, b);
2872
1951a1b6 2873 /* FIXME what if it gets a name from typedef? */
848cf1e0
MM
2874 if (ANON_AGGRNAME_P (name))
2875 DECL_IGNORED_P (d) = 1;
2876
2877 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
1f6e1acc
AS
2878
2879 /* If this is a local class, keep track of it. We need this
2880 information for name-mangling, and so that it is possible to find
2881 all function definitions in a translation unit in a convenient
2882 way. (It's otherwise tricky to find a member function definition
2883 it's only pointed to from within a local class.) */
5362b086 2884 if (TYPE_CONTEXT (type)
089acd57
MM
2885 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL
2886 && !processing_template_decl)
1f6e1acc 2887 VARRAY_PUSH_TREE (local_classes, type);
8d08fdba
MS
2888 }
2889 if (b->parm_flag == 2)
2890 {
d0f062fb 2891 if (!COMPLETE_TYPE_P (current_class_type))
8d08fdba
MS
2892 CLASSTYPE_TAGS (current_class_type) = b->tags;
2893 }
2894 }
2895
2896 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2897 /* Use the canonical TYPE_DECL for this node. */
2898 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2899 else
2900 {
2901 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2902 will be the tagged type we just added to the current
2903 binding level. This fake NULL-named TYPE_DECL node helps
2904 dwarfout.c to know when it needs to output a
2905 representation of a tagged type, and it also gives us a
2906 convenient place to record the "scope start" address for
2907 the tagged type. */
2908
8d08fdba 2909 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
2910 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2911 }
2912}
2913
2914/* Counter used to create anonymous type names. */
e92cc029 2915
8d08fdba
MS
2916static int anon_cnt = 0;
2917
2918/* Return an IDENTIFIER which can be used as a name for
2919 anonymous structs and unions. */
e92cc029 2920
8d08fdba
MS
2921tree
2922make_anon_name ()
2923{
2924 char buf[32];
2925
2926 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2927 return get_identifier (buf);
2928}
2929
2930/* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2931 This keeps dbxout from getting confused. */
e92cc029 2932
8d08fdba
MS
2933void
2934clear_anon_tags ()
2935{
2936 register struct binding_level *b;
2937 register tree tags;
2938 static int last_cnt = 0;
2939
2940 /* Fast out if no new anon names were declared. */
2941 if (last_cnt == anon_cnt)
2942 return;
2943
2944 b = current_binding_level;
2945 while (b->tag_transparent)
2946 b = b->level_chain;
2947 tags = b->tags;
2948 while (tags)
2949 {
2950 /* A NULL purpose means we have already processed all tags
2951 from here to the end of the list. */
2952 if (TREE_PURPOSE (tags) == NULL_TREE)
2953 break;
2954 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2955 TREE_PURPOSE (tags) = NULL_TREE;
2956 tags = TREE_CHAIN (tags);
2957 }
2958 last_cnt = anon_cnt;
2959}
2960\f
2961/* Subroutine of duplicate_decls: return truthvalue of whether
2962 or not types of these decls match.
2963
2964 For C++, we must compare the parameter list so that `int' can match
2965 `int&' in a parameter position, but `int&' is not confused with
2966 `const int&'. */
e92cc029 2967
6060a796 2968int
8d08fdba
MS
2969decls_match (newdecl, olddecl)
2970 tree newdecl, olddecl;
2971{
2972 int types_match;
2973
347d73d7
ML
2974 if (newdecl == olddecl)
2975 return 1;
2976
6b4b3deb
MM
2977 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2978 /* If the two DECLs are not even the same kind of thing, we're not
2979 interested in their types. */
2980 return 0;
2981
2982 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
2983 {
2984 tree f1 = TREE_TYPE (newdecl);
2985 tree f2 = TREE_TYPE (olddecl);
2986 tree p1 = TYPE_ARG_TYPES (f1);
2987 tree p2 = TYPE_ARG_TYPES (f2);
2988
4f1c5b7d 2989 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
2990 && ! (DECL_EXTERN_C_P (newdecl)
2991 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
2992 return 0;
2993
8d08fdba 2994 if (TREE_CODE (f1) != TREE_CODE (f2))
e867a179 2995 return 0;
8d08fdba 2996
3bfdc719 2997 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 2998 {
8b27e9ef
NS
2999 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
3000 && (DECL_BUILT_IN (olddecl)
3001#ifndef NO_IMPLICIT_EXTERN_C
3002 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
3003 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
3004#endif
3005 ))
a28e3c7f
MS
3006 {
3007 types_match = self_promoting_args_p (p1);
3008 if (p1 == void_list_node)
3009 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3010 }
8b27e9ef
NS
3011#ifndef NO_IMPLICIT_EXTERN_C
3012 else if (p1 == NULL_TREE
3013 && (DECL_EXTERN_C_P (olddecl)
3014 && DECL_IN_SYSTEM_HEADER (olddecl)
3015 && !DECL_CLASS_SCOPE_P (olddecl))
3016 && (DECL_EXTERN_C_P (newdecl)
3017 && DECL_IN_SYSTEM_HEADER (newdecl)
3018 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
3019 {
3020 types_match = self_promoting_args_p (p2);
3021 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3022 }
8b27e9ef 3023#endif
8926095f 3024 else
91063b51 3025 types_match = compparms (p1, p2);
8926095f 3026 }
8d08fdba
MS
3027 else
3028 types_match = 0;
3029 }
6b4b3deb 3030 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 3031 {
f84b4be9
JM
3032 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3033 DECL_TEMPLATE_PARMS (olddecl)))
3034 return 0;
68642fb6 3035
2bb5d995
JM
3036 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
3037 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
3038 return 0;
3039
f84b4be9
JM
3040 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3041 types_match = 1;
3042 else
3043 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3044 DECL_TEMPLATE_RESULT (newdecl));
51c184be 3045 }
8d08fdba
MS
3046 else
3047 {
3048 if (TREE_TYPE (newdecl) == error_mark_node)
3049 types_match = TREE_TYPE (olddecl) == error_mark_node;
3050 else if (TREE_TYPE (olddecl) == NULL_TREE)
3051 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
3052 else if (TREE_TYPE (newdecl) == NULL_TREE)
3053 types_match = 0;
8d08fdba 3054 else
01240200 3055 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
3056 TREE_TYPE (olddecl),
3057 COMPARE_REDECLARATION);
8d08fdba
MS
3058 }
3059
3060 return types_match;
3061}
3062
3063/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 3064 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
3065
3066 Note that this does not apply to the C++ case of declaring
3067 a variable `extern const' and then later `const'.
3068
8d08fdba
MS
3069 Don't complain about built-in functions, since they are beyond
3070 the user's control. */
3071
3072static void
3073warn_extern_redeclared_static (newdecl, olddecl)
3074 tree newdecl, olddecl;
3075{
d8e178a0 3076 static const char *explicit_extern_static_warning
8251199e 3077 = "`%D' was declared `extern' and later `static'";
d8e178a0 3078 static const char *implicit_extern_static_warning
8251199e
JM
3079 = "`%D' was declared implicitly `extern' and later `static'";
3080
24f30ed4
MM
3081 tree name;
3082
68642fb6 3083 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee
JM
3084 || TREE_CODE (newdecl) == TEMPLATE_DECL
3085 || TREE_CODE (newdecl) == CONST_DECL)
8d08fdba 3086 return;
68642fb6 3087
963d5758
MM
3088 /* Don't get confused by static member functions; that's a different
3089 use of `static'. */
3090 if (TREE_CODE (newdecl) == FUNCTION_DECL
3091 && DECL_STATIC_FUNCTION_P (newdecl))
3092 return;
8d08fdba 3093
24f30ed4
MM
3094 /* If the old declaration was `static', or the new one isn't, then
3095 then everything is OK. */
3096 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3097 return;
3098
3099 /* It's OK to declare a builtin function as `static'. */
3100 if (TREE_CODE (olddecl) == FUNCTION_DECL
3101 && DECL_ARTIFICIAL (olddecl))
3102 return;
3103
8d08fdba 3104 name = DECL_ASSEMBLER_NAME (newdecl);
24f30ed4
MM
3105 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3106 ? implicit_extern_static_warning
3107 : explicit_extern_static_warning, newdecl);
3108 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
3109}
3110
3111/* Handle when a new declaration NEWDECL has the same name as an old
3112 one OLDDECL in the same binding contour. Prints an error message
3113 if appropriate.
3114
3115 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3116 Otherwise, return 0. */
3117
51c184be 3118int
8d08fdba 3119duplicate_decls (newdecl, olddecl)
824b9a4c 3120 tree newdecl, olddecl;
8d08fdba 3121{
8d08fdba
MS
3122 unsigned olddecl_uid = DECL_UID (olddecl);
3123 int olddecl_friend = 0, types_match = 0;
0b60dfe3 3124 int new_defines_function = 0;
5566b478
MS
3125
3126 if (newdecl == olddecl)
3127 return 1;
8d08fdba 3128
8926095f 3129 types_match = decls_match (newdecl, olddecl);
8d08fdba 3130
8d08fdba
MS
3131 /* If either the type of the new decl or the type of the old decl is an
3132 error_mark_node, then that implies that we have already issued an
3133 error (earlier) for some bogus type specification, and in that case,
3134 it is rather pointless to harass the user with yet more error message
0b60dfe3 3135 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
3136 if (TREE_TYPE (newdecl) == error_mark_node
3137 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba 3138 types_match = 1;
68642fb6 3139
0b60dfe3 3140 /* Check for redeclaration and other discrepancies. */
d22c8596 3141 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
3142 && DECL_ARTIFICIAL (olddecl))
3143 {
3144 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3145 {
3146 /* If you declare a built-in or predefined function name as static,
3147 the old definition is overridden, but optionally warn this was a
3148 bad choice of name. */
3149 if (! TREE_PUBLIC (newdecl))
3150 {
3151 if (warn_shadow)
3152 cp_warning ("shadowing %s function `%#D'",
3153 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3154 olddecl);
3155 /* Discard the old built-in function. */
3156 return 0;
3157 }
3158 /* If the built-in is not ansi, then programs can override
3159 it even globally without an error. */
3160 else if (! DECL_BUILT_IN (olddecl))
3161 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3162 olddecl, newdecl);
3163 else
3164 {
3165 cp_error ("declaration of `%#D'", newdecl);
3166 cp_error ("conflicts with built-in declaration `%#D'",
a4443a08 3167 olddecl);
9f33663b 3168 }
a4443a08
MS
3169 return 0;
3170 }
9f33663b 3171 else if (!types_match)
8d08fdba 3172 {
eb68cb58
MM
3173 if ((DECL_EXTERN_C_P (newdecl)
3174 && DECL_EXTERN_C_P (olddecl))
9f33663b
JM
3175 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3176 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 3177 {
9f33663b
JM
3178 /* A near match; override the builtin. */
3179
3180 if (TREE_PUBLIC (newdecl))
a4443a08 3181 {
9f33663b
JM
3182 cp_warning ("new declaration `%#D'", newdecl);
3183 cp_warning ("ambiguates built-in declaration `%#D'",
3184 olddecl);
a4443a08 3185 }
9f33663b
JM
3186 else if (warn_shadow)
3187 cp_warning ("shadowing %s function `%#D'",
3188 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3189 olddecl);
a4443a08 3190 }
9f33663b
JM
3191 else
3192 /* Discard the old built-in function. */
3193 return 0;
8d08fdba 3194 }
68642fb6 3195
24f30ed4
MM
3196 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3197 {
3198 /* If a builtin function is redeclared as `static', merge
3199 the declarations, but make the original one static. */
3200 DECL_THIS_STATIC (olddecl) = 1;
3201 TREE_PUBLIC (olddecl) = 0;
9bfadf57 3202
421844e7
MM
3203 /* Make the old declaration consistent with the new one so
3204 that all remnants of the builtin-ness of this function
3205 will be banished. */
5d2ed28c 3206 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
19e7881c 3207 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
92643fea 3208 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
9bfadf57
MM
3209 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3210 newdecl);
24f30ed4 3211 }
39211cd5
MS
3212 }
3213 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3214 {
9ed182dc
JM
3215 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3216 && TREE_CODE (newdecl) != TYPE_DECL
3217 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3218 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3219 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3220 && TREE_CODE (olddecl) != TYPE_DECL
3221 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3222 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3223 == TYPE_DECL))))
3224 {
3225 /* We do nothing special here, because C++ does such nasty
3226 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3227 get shadowed, and know that if we need to find a TYPE_DECL
3228 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3229 slot of the identifier. */
3230 return 0;
3231 }
3232
39211cd5 3233 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 3234 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 3235 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 3236 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
39211cd5 3237 return 0;
9ed182dc 3238
8251199e 3239 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
39211cd5
MS
3240 if (TREE_CODE (olddecl) == TREE_LIST)
3241 olddecl = TREE_VALUE (olddecl);
8251199e 3242 cp_error_at ("previous declaration of `%#D'", olddecl);
39211cd5
MS
3243
3244 /* New decl is completely inconsistent with the old one =>
3245 tell caller to replace the old one. */
3246
3247 return 0;
8d08fdba 3248 }
8d08fdba
MS
3249 else if (!types_match)
3250 {
4f1c5b7d 3251 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
3252 /* These are certainly not duplicate declarations; they're
3253 from different scopes. */
3254 return 0;
3255
8926095f 3256 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
3257 {
3258 /* The name of a class template may not be declared to refer to
3259 any other template, class, function, object, namespace, value,
e92cc029 3260 or type in the same scope. */
5566b478
MS
3261 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3262 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 3263 {
8251199e
JM
3264 cp_error ("declaration of template `%#D'", newdecl);
3265 cp_error_at ("conflicts with previous declaration `%#D'",
f0e01782
MS
3266 olddecl);
3267 }
ec255269
MS
3268 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3269 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3270 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 3271 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646
MM
3272 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3273 DECL_TEMPLATE_PARMS (olddecl)))
ec255269 3274 {
8251199e
JM
3275 cp_error ("new declaration `%#D'", newdecl);
3276 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
ec255269 3277 }
f0e01782
MS
3278 return 0;
3279 }
8926095f
MS
3280 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3281 {
eb68cb58 3282 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 3283 {
8251199e 3284 cp_error ("declaration of C function `%#D' conflicts with",
8926095f 3285 newdecl);
8251199e 3286 cp_error_at ("previous declaration `%#D' here", olddecl);
8926095f 3287 }
00595019 3288 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 3289 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 3290 {
8251199e
JM
3291 cp_error ("new declaration `%#D'", newdecl);
3292 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
700f8a87
MS
3293 }
3294 else
3295 return 0;
8926095f 3296 }
8d08fdba
MS
3297
3298 /* Already complained about this, so don't do so again. */
a4443a08 3299 else if (current_class_type == NULL_TREE
8d08fdba
MS
3300 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3301 {
8251199e
JM
3302 cp_error ("conflicting types for `%#D'", newdecl);
3303 cp_error_at ("previous declaration as `%#D'", olddecl);
8d08fdba
MS
3304 }
3305 }
68642fb6 3306 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
3307 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3308 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 3309 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
3310 != DECL_TI_TEMPLATE (olddecl))))
3311 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3312 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 3313 || (DECL_TI_TEMPLATE (olddecl)
75650646 3314 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
3315 /* It's OK to have a template specialization and a non-template
3316 with the same type, or to have specializations of two
75650646
MM
3317 different templates with the same type. Note that if one is a
3318 specialization, and the other is an instantiation of the same
3319 template, that we do not exit at this point. That situation
3320 can occur if we instantiate a template class, and then
3321 specialize one of its methods. This situation is legal, but
3322 the declarations must be merged in the usual way. */
3323 return 0;
68642fb6
UD
3324 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3325 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
3326 && !DECL_USE_TEMPLATE (newdecl))
3327 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3328 && !DECL_USE_TEMPLATE (olddecl))))
3329 /* One of the declarations is a template instantiation, and the
3330 other is not a template at all. That's OK. */
386b8a85 3331 return 0;
85c6cbaf
ML
3332 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3333 && DECL_NAMESPACE_ALIAS (newdecl)
3334 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3335 /* Redeclaration of namespace alias, ignore it. */
3336 return 1;
8d08fdba
MS
3337 else
3338 {
d8e178a0 3339 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 3340 if (errmsg)
8d08fdba 3341 {
8251199e 3342 cp_error (errmsg, newdecl);
8d08fdba
MS
3343 if (DECL_NAME (olddecl) != NULL_TREE)
3344 cp_error_at ((DECL_INITIAL (olddecl)
2c73f9f5 3345 && namespace_bindings_p ())
8251199e
JM
3346 ? "`%#D' previously defined here"
3347 : "`%#D' previously declared here", olddecl);
8d08fdba
MS
3348 }
3349 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3350 && DECL_INITIAL (olddecl) != NULL_TREE
3351 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3352 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3353 {
3354 /* Prototype decl follows defn w/o prototype. */
8251199e
JM
3355 cp_warning_at ("prototype for `%#D'", newdecl);
3356 cp_warning_at ("follows non-prototype definition here", olddecl);
8d08fdba
MS
3357 }
3358 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3359 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f
MS
3360 {
3361 /* extern "C" int foo ();
3362 int foo () { bar (); }
3363 is OK. */
46ccf50a 3364 if (current_lang_depth () == 0)
5d2ed28c 3365 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
8926095f
MS
3366 else
3367 {
8251199e 3368 cp_error_at ("previous declaration of `%#D' with %L linkage",
8926095f 3369 olddecl, DECL_LANGUAGE (olddecl));
8251199e 3370 cp_error ("conflicts with new declaration with %L linkage",
8926095f
MS
3371 DECL_LANGUAGE (newdecl));
3372 }
3373 }
e1cd6e56 3374
a6f02587 3375 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
3376 ;
3377 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
3378 {
3379 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3380 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3381 int i = 1;
3382
3383 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3384 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 3385
e1cd6e56
MS
3386 for (; t1 && t1 != void_list_node;
3387 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3388 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3389 {
2507f3b5
RK
3390 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3391 TREE_PURPOSE (t2)))
e1cd6e56
MS
3392 {
3393 if (pedantic)
3394 {
8251199e 3395 cp_pedwarn ("default argument given for parameter %d of `%#D'",
e1cd6e56 3396 i, newdecl);
8251199e 3397 cp_pedwarn_at ("after previous specification in `%#D'",
e1cd6e56
MS
3398 olddecl);
3399 }
3400 }
3401 else
3402 {
8251199e 3403 cp_error ("default argument given for parameter %d of `%#D'",
e1cd6e56 3404 i, newdecl);
8251199e 3405 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
3406 olddecl);
3407 }
3408 }
a5894242 3409
79065db2
MM
3410 if (DECL_DECLARED_INLINE_P (newdecl)
3411 && ! DECL_DECLARED_INLINE_P (olddecl)
7fcdf4c2 3412 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 3413 {
8251199e 3414 cp_warning ("`%#D' was used before it was declared inline",
7fcdf4c2 3415 newdecl);
8251199e 3416 cp_warning_at ("previous non-inline declaration here",
7fcdf4c2 3417 olddecl);
dff6b454 3418 }
e1cd6e56 3419 }
8d08fdba
MS
3420 }
3421
3422 /* If new decl is `static' and an `extern' was seen previously,
3423 warn about it. */
3424 warn_extern_redeclared_static (newdecl, olddecl);
3425
e92cc029 3426 /* We have committed to returning 1 at this point. */
8d08fdba
MS
3427 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3428 {
3429 /* Now that functions must hold information normally held
3430 by field decls, there is extra work to do so that
3431 declaration information does not get destroyed during
3432 definition. */
3433 if (DECL_VINDEX (olddecl))
3434 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
4f1c5b7d
MM
3435 if (DECL_VIRTUAL_CONTEXT (olddecl))
3436 DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
8d08fdba
MS
3437 if (DECL_CONTEXT (olddecl))
3438 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
0e5921e8 3439 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
8d08fdba 3440 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
e1cd6e56
MS
3441 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3442 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 3443 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 3444 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
4a67c9e9 3445 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
963d5758 3446 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
3447 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
3448 SET_OVERLOADED_OPERATOR_CODE
3449 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 3450 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 3451
0b60dfe3
BK
3452 /* Optionally warn about more than one declaration for the same
3453 name, but don't warn about a function declaration followed by a
3454 definition. */
3455 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3456 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3457 /* Don't warn about extern decl followed by definition. */
3458 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3459 /* Don't warn about friends, let add_friend take care of it. */
3460 && ! DECL_FRIEND_P (newdecl))
3461 {
8251199e
JM
3462 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3463 cp_warning_at ("previous declaration of `%D'", olddecl);
0b60dfe3 3464 }
8d08fdba
MS
3465 }
3466
3467 /* Deal with C++: must preserve virtual function table size. */
3468 if (TREE_CODE (olddecl) == TYPE_DECL)
3469 {
3470 register tree newtype = TREE_TYPE (newdecl);
3471 register tree oldtype = TREE_TYPE (olddecl);
3472
3473 if (newtype != error_mark_node && oldtype != error_mark_node
3474 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3475 {
3476 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3477 CLASSTYPE_FRIEND_CLASSES (newtype)
3478 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3479 }
970d6386
MM
3480
3481 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
3482 }
3483
8d08fdba
MS
3484 /* Copy all the DECL_... slots specified in the new decl
3485 except for any that we copy here from the old type. */
68642fb6 3486 DECL_MACHINE_ATTRIBUTES (newdecl)
0b60dfe3 3487 = merge_machine_decl_attributes (olddecl, newdecl);
8d08fdba 3488
5566b478
MS
3489 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3490 {
4d85e00e 3491 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
68642fb6 3492 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
3493 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3494 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 3495
5566b478
MS
3496 return 1;
3497 }
68642fb6 3498
8d08fdba
MS
3499 if (types_match)
3500 {
3501 /* Automatically handles default parameters. */
3502 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 3503 tree newtype;
8d08fdba 3504
e1cd6e56
MS
3505 /* Merge the data types specified in the two decls. */
3506 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3507
9076e292
JM
3508 /* If common_type produces a non-typedef type, just use the old type. */
3509 if (TREE_CODE (newdecl) == TYPE_DECL
3510 && newtype == DECL_ORIGINAL_TYPE (newdecl))
3511 newtype = oldtype;
3512
8d08fdba
MS
3513 if (TREE_CODE (newdecl) == VAR_DECL)
3514 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3515 /* Do this after calling `common_type' so that default
3516 parameters don't confuse us. */
3517 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3518 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3519 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3520 {
f30432d7 3521 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 3522 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 3523 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
3524 TYPE_RAISES_EXCEPTIONS (oldtype));
3525
9a224b4a
JM
3526 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3527 && DECL_SOURCE_LINE (olddecl) != 0
da20811c 3528 && flag_exceptions
4cc1d462
NS
3529 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3530 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
8d08fdba 3531 {
4cc1d462 3532 cp_error ("declaration of `%F' throws different exceptions",
a28e3c7f 3533 newdecl);
a09ba2e0 3534 cp_error_at ("than previous declaration `%F'", olddecl);
8d08fdba
MS
3535 }
3536 }
3537 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3538
3539 /* Lay the type out, unless already done. */
407f03b8 3540 if (! same_type_p (newtype, oldtype)
5566b478 3541 && TREE_TYPE (newdecl) != error_mark_node
5156628f 3542 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
3543 layout_type (TREE_TYPE (newdecl));
3544
5566b478
MS
3545 if ((TREE_CODE (newdecl) == VAR_DECL
3546 || TREE_CODE (newdecl) == PARM_DECL
3547 || TREE_CODE (newdecl) == RESULT_DECL
3548 || TREE_CODE (newdecl) == FIELD_DECL
3549 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 3550 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 3551 layout_decl (newdecl, 0);
8d08fdba
MS
3552
3553 /* Merge the type qualifiers. */
3554 if (TREE_READONLY (newdecl))
3555 TREE_READONLY (olddecl) = 1;
3556 if (TREE_THIS_VOLATILE (newdecl))
3557 TREE_THIS_VOLATILE (olddecl) = 1;
3558
3559 /* Merge the initialization information. */
8926095f
MS
3560 if (DECL_INITIAL (newdecl) == NULL_TREE
3561 && DECL_INITIAL (olddecl) != NULL_TREE)
3562 {
3563 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3564 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3565 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
b0d06515
MM
3566 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3567 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e
MM
3568 && DECL_LANG_SPECIFIC (olddecl))
3569 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
8926095f 3570 }
39211cd5
MS
3571
3572 /* Merge the section attribute.
3573 We want to issue an error if the sections conflict but that must be
3574 done later in decl_attributes since we are called before attributes
3575 are assigned. */
3576 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3577 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3578
5d73aa63 3579 /* Keep the old rtl since we can safely use it. */
19e7881c 3580 COPY_DECL_RTL (olddecl, newdecl);
a157febd
GK
3581
3582 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3583 {
3584 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3585 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3586 DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3587 |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3588 DECL_NO_LIMIT_STACK (newdecl)
3589 |= DECL_NO_LIMIT_STACK (olddecl);
3590 }
8d08fdba
MS
3591 }
3592 /* If cannot merge, then use the new type and qualifiers,
3593 and don't preserve the old rtl. */
3594 else
3595 {
3596 /* Clean out any memory we had of the old declaration. */
3597 tree oldstatic = value_member (olddecl, static_aggregates);
3598 if (oldstatic)
3599 TREE_VALUE (oldstatic) = error_mark_node;
3600
3601 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3602 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3603 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3604 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3605 }
3606
3607 /* Merge the storage class information. */
a9aedbc2 3608 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
e92cc029 3609 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 3610 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
3611 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3612 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3613 if (! DECL_EXTERNAL (olddecl))
3614 DECL_EXTERNAL (newdecl) = 0;
68642fb6 3615
0b60dfe3 3616 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 3617 {
a9aedbc2
MS
3618 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3619 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 3620 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
68642fb6 3621 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 3622 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
0b60dfe3
BK
3623 /* Don't really know how much of the language-specific
3624 values we should copy from old to new. */
3625 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3626 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3627 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
fbf1c34b 3628 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3febd123
NS
3629 DECL_INITIALIZED_IN_CLASS_P (newdecl)
3630 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
0b60dfe3 3631 olddecl_friend = DECL_FRIEND_P (olddecl);
6a629cac
MM
3632
3633 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3634 if (TREE_CODE (newdecl) == FUNCTION_DECL
3635 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3636 DECL_BEFRIENDING_CLASSES (newdecl)
3637 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3638 DECL_BEFRIENDING_CLASSES (olddecl));
8d08fdba
MS
3639 }
3640
8d08fdba
MS
3641 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3642 {
68642fb6
UD
3643 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3644 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
3645 {
3646 /* If newdecl is not a specialization, then it is not a
3647 template-related function at all. And that means that we
3648 shoud have exited above, returning 0. */
3649 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3650 0);
3651
68642fb6 3652 if (TREE_USED (olddecl))
75650646 3653 /* From [temp.expl.spec]:
68642fb6 3654
75650646
MM
3655 If a template, a member template or the member of a class
3656 template is explicitly specialized then that
3657 specialization shall be declared before the first use of
3658 that specialization that would cause an implicit
3659 instantiation to take place, in every translation unit in
3660 which such a use occurs. */
68642fb6 3661 cp_error ("explicit specialization of %D after first use",
75650646
MM
3662 olddecl);
3663
3664 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3665 }
79065db2 3666 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab
MS
3667
3668 /* If either decl says `inline', this fn is inline, unless its
3669 definition was passed already. */
3670 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3671 DECL_INLINE (olddecl) = 1;
3672 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3673
5daf7c0a
JM
3674 /* Preserve abstractness on cloned [cd]tors. */
3675 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
3676
700f8a87
MS
3677 if (! types_match)
3678 {
5d2ed28c 3679 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 3680 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
19e7881c 3681 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
5566b478
MS
3682 }
3683 if (! types_match || new_defines_function)
3684 {
6f1b4c42
JM
3685 /* These need to be copied so that the names are available.
3686 Note that if the types do match, we'll preserve inline
3687 info and other bits, but if not, we won't. */
700f8a87
MS
3688 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3689 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 3690 }
8d08fdba
MS
3691 if (new_defines_function)
3692 /* If defining a function declared with other language
3693 linkage, use the previously declared language linkage. */
5d2ed28c 3694 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 3695 else if (types_match)
8d08fdba
MS
3696 {
3697 /* If redeclaring a builtin function, and not a definition,
3698 it stays built in. */
3699 if (DECL_BUILT_IN (olddecl))
3700 {
26db82d8 3701 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 3702 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
3703 /* If we're keeping the built-in definition, keep the rtl,
3704 regardless of declaration matches. */
19e7881c 3705 SET_DECL_RTL (newdecl, DECL_RTL (olddecl));
8d08fdba
MS
3706 }
3707 else
b850de4f 3708 DECL_NUM_STMTS (newdecl) = DECL_NUM_STMTS (olddecl);
8d08fdba
MS
3709
3710 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8926095f 3711 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
8d08fdba
MS
3712 /* Previously saved insns go together with
3713 the function's previous definition. */
3714 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3715 /* Don't clear out the arguments if we're redefining a function. */
3716 if (DECL_ARGUMENTS (olddecl))
3717 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3718 }
3719 }
3720
a9aedbc2
MS
3721 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3722 {
3723 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3724 }
3725
8d08fdba
MS
3726 /* Now preserve various other info from the definition. */
3727 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3728 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3729 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 3730 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 3731
8d08fdba
MS
3732 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3733 {
3734 int function_size;
8d08fdba
MS
3735
3736 function_size = sizeof (struct tree_decl);
3737
730e1556
KG
3738 memcpy ((char *) olddecl + sizeof (struct tree_common),
3739 (char *) newdecl + sizeof (struct tree_common),
3740 function_size - sizeof (struct tree_common));
8d08fdba 3741
75650646
MM
3742 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3743 {
3744 /* If newdecl is a template instantiation, it is possible that
3745 the following sequence of events has occurred:
3746
3747 o A friend function was declared in a class template. The
68642fb6 3748 class template was instantiated.
75650646 3749
68642fb6
UD
3750 o The instantiation of the friend declaration was
3751 recorded on the instantiation list, and is newdecl.
75650646
MM
3752
3753 o Later, however, instantiate_class_template called pushdecl
3754 on the newdecl to perform name injection. But, pushdecl in
3755 turn called duplicate_decls when it discovered that another
3756 declaration of a global function with the same name already
68642fb6 3757 existed.
75650646
MM
3758
3759 o Here, in duplicate_decls, we decided to clobber newdecl.
3760
3761 If we're going to do that, we'd better make sure that
3762 olddecl, and not newdecl, is on the list of
3763 instantiations so that if we try to do the instantiation
3764 again we won't get the clobbered declaration. */
3765
68642fb6
UD
3766 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3767 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
75650646
MM
3768
3769 for (; decls; decls = TREE_CHAIN (decls))
3770 if (TREE_VALUE (decls) == newdecl)
3771 TREE_VALUE (decls) = olddecl;
3772 }
8d08fdba
MS
3773 }
3774 else
3775 {
730e1556
KG
3776 memcpy ((char *) olddecl + sizeof (struct tree_common),
3777 (char *) newdecl + sizeof (struct tree_common),
3778 sizeof (struct tree_decl) - sizeof (struct tree_common)
3779 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
8d08fdba
MS
3780 }
3781
3782 DECL_UID (olddecl) = olddecl_uid;
3783 if (olddecl_friend)
3784 DECL_FRIEND_P (olddecl) = 1;
3785
d9525bec
BK
3786 /* NEWDECL contains the merged attribute lists.
3787 Update OLDDECL to be the same. */
3788 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3789
8d08fdba
MS
3790 return 1;
3791}
3792
3793/* Record a decl-node X as belonging to the current lexical scope.
3794 Check for errors (such as an incompatible declaration for the same
3795 name already seen in the same scope).
3796
3797 Returns either X or an old decl for the same name.
3798 If an old decl is returned, it may have been smashed
3799 to agree with what X says. */
3800
3801tree
3802pushdecl (x)
3803 tree x;
3804{
3805 register tree t;
b35d4555
MM
3806 register tree name;
3807 int need_new_binding;
3808
3809 /* We shouldn't be calling pushdecl when we're generating RTL for a
3810 function that we already did semantic analysis on previously. */
01d939e8 3811 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
b35d4555
MM
3812 19990913);
3813
b35d4555 3814 need_new_binding = 1;
8d08fdba 3815
50714e79
MM
3816 if (DECL_TEMPLATE_PARM_P (x))
3817 /* Template parameters have no context; they are not X::T even
3818 when declared within a class or namespace. */
3819 ;
3820 else
3821 {
3822 if (current_function_decl && x != current_function_decl
3823 /* A local declaration for a function doesn't constitute
3824 nesting. */
f39ee884
MM
3825 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3826 /* A local declaration for an `extern' variable is in the
94dfccd1 3827 scope of the current namespace, not the current
f39ee884
MM
3828 function. */
3829 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
50714e79
MM
3830 && !DECL_CONTEXT (x))
3831 DECL_CONTEXT (x) = current_function_decl;
cd9f6678
MM
3832
3833 /* If this is the declaration for a namespace-scope function,
3834 but the declaration itself is in a local scope, mark the
3835 declaration. */
68642fb6 3836 if (TREE_CODE (x) == FUNCTION_DECL
cd9f6678
MM
3837 && DECL_NAMESPACE_SCOPE_P (x)
3838 && current_function_decl
3839 && x != current_function_decl)
3840 DECL_LOCAL_FUNCTION_P (x) = 1;
50714e79 3841 }
8d08fdba 3842
fe8fadc1 3843 name = DECL_NAME (x);
8d08fdba
MS
3844 if (name)
3845 {
94dfccd1
JM
3846 int different_binding_level = 0;
3847
386b8a85
JM
3848 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3849 name = TREE_OPERAND (name, 0);
68642fb6 3850
94dfccd1
JM
3851 /* In case this decl was explicitly namespace-qualified, look it
3852 up in its namespace context. */
3853 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x)
3854 && namespace_bindings_p ())
2c73f9f5
ML
3855 t = namespace_binding (name, DECL_CONTEXT (x));
3856 else
3857 t = lookup_name_current_level (name);
fe8fadc1 3858
94dfccd1
JM
3859 /* [basic.link] If there is a visible declaration of an entity
3860 with linkage having the same name and type, ignoring entities
3861 declared outside the innermost enclosing namespace scope, the
3862 block scope declaration declares that same entity and
3863 receives the linkage of the previous declaration. */
3864 if (! t && current_function_decl && x != current_function_decl
3865 && (TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
3866 && DECL_EXTERNAL (x))
3867 {
3868 /* Look in block scope. */
3869 t = IDENTIFIER_VALUE (name);
3870 /* Or in the innermost namespace. */
3871 if (! t)
3872 t = namespace_binding (name, DECL_CONTEXT (x));
fab09a24
JM
3873 /* Does it have linkage? Note that if this isn't a DECL, it's an
3874 OVERLOAD, which is OK. */
3875 if (t && DECL_P (t) && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
94dfccd1
JM
3876 t = NULL_TREE;
3877 if (t)
3878 different_binding_level = 1;
3879 }
3880
fe8fadc1
MM
3881 /* If we are declaring a function, and the result of name-lookup
3882 was an OVERLOAD, look for an overloaded instance that is
3883 actually the same as the function we are declaring. (If
3884 there is one, we have to merge our declaration with the
3885 previous declaration.) */
655dc6ee 3886 if (t && TREE_CODE (t) == OVERLOAD)
fe8fadc1
MM
3887 {
3888 tree match;
3889
655dc6ee
JM
3890 if (TREE_CODE (x) == FUNCTION_DECL)
3891 for (match = t; match; match = OVL_NEXT (match))
3892 {
92643fea 3893 if (decls_match (OVL_CURRENT (match), x))
655dc6ee
JM
3894 break;
3895 }
3896 else
3897 /* Just choose one. */
3898 match = t;
fe8fadc1
MM
3899
3900 if (match)
3901 t = OVL_CURRENT (match);
3902 else
3903 t = NULL_TREE;
3904 }
3905
8d08fdba
MS
3906 if (t == error_mark_node)
3907 {
3908 /* error_mark_node is 0 for a while during initialization! */
3909 t = NULL_TREE;
8251199e 3910 cp_error_at ("`%#D' used prior to declaration", x);
8d08fdba 3911 }
51c184be 3912 else if (t != NULL_TREE)
8d08fdba 3913 {
94dfccd1
JM
3914 if (different_binding_level)
3915 {
3916 if (decls_match (x, t))
3917 /* The standard only says that the local extern
3918 inherits linkage from the previous decl; in
3919 particular, default args are not shared. It would
3920 be nice to propagate inlining info, though. FIXME. */
3921 TREE_PUBLIC (x) = TREE_PUBLIC (t);
3922 }
3923 else if (TREE_CODE (t) == PARM_DECL)
8d08fdba
MS
3924 {
3925 if (DECL_CONTEXT (t) == NULL_TREE)
400500c4
RK
3926 /* This is probaby caused by too many errors, but calling
3927 abort will say that if errors have occurred. */
3928 abort ();
be99da77 3929
e92cc029 3930 /* Check for duplicate params. */
be99da77
MS
3931 if (duplicate_decls (x, t))
3932 return t;
8d08fdba 3933 }
eb68cb58 3934 else if ((DECL_EXTERN_C_FUNCTION_P (x)
5566b478
MS
3935 || DECL_FUNCTION_TEMPLATE_P (x))
3936 && is_overloaded_fn (t))
2c73f9f5 3937 /* Don't do anything just yet. */;
e1cd6e56
MS
3938 else if (t == wchar_decl_node)
3939 {
3940 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
8251199e 3941 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
e1cd6e56
MS
3942
3943 /* Throw away the redeclaration. */
3944 return t;
3945 }
8926095f 3946 else if (TREE_CODE (t) != TREE_CODE (x))
8d08fdba 3947 {
9ed182dc 3948 if (duplicate_decls (x, t))
51c184be 3949 return t;
8d08fdba
MS
3950 }
3951 else if (duplicate_decls (x, t))
51c184be 3952 {
7177d104
MS
3953 if (TREE_CODE (t) == TYPE_DECL)
3954 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
f30432d7
MS
3955 else if (TREE_CODE (t) == FUNCTION_DECL)
3956 check_default_args (t);
7177d104 3957
51c184be
MS
3958 return t;
3959 }
35680744
MM
3960 else if (DECL_MAIN_P (x))
3961 {
3962 /* A redeclaration of main, but not a duplicate of the
68642fb6 3963 previous one.
35680744
MM
3964
3965 [basic.start.main]
3966
3967 This function shall not be overloaded. */
8251199e
JM
3968 cp_error_at ("invalid redeclaration of `%D'", t);
3969 cp_error ("as `%D'", x);
35680744
MM
3970 /* We don't try to push this declaration since that
3971 causes a crash. */
3972 return x;
3973 }
8d08fdba 3974 }
8926095f 3975
f3400fe2
JM
3976 check_template_shadow (x);
3977
fcfcdfc8
JM
3978 /* If this is a function conjured up by the backend, massage it
3979 so it looks friendly. */
eb68cb58 3980 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
fcfcdfc8
JM
3981 {
3982 retrofit_lang_decl (x);
5d2ed28c 3983 SET_DECL_LANGUAGE (x, lang_c);
fcfcdfc8
JM
3984 }
3985
eb68cb58 3986 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
8926095f 3987 {
7bdbfa05 3988 t = push_overloaded_decl (x, PUSH_LOCAL);
5fdaba89 3989 if (t != x)
8926095f 3990 return t;
f181d4ae
MM
3991 if (!namespace_bindings_p ())
3992 /* We do not need to create a binding for this name;
3993 push_overloaded_decl will have already done so if
3994 necessary. */
3995 need_new_binding = 0;
8926095f 3996 }
6eb3bb27 3997 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
cfe507be
MM
3998 {
3999 t = push_overloaded_decl (x, PUSH_GLOBAL);
4000 if (t == x)
4001 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
4002 return t;
4003 }
8d08fdba 4004
a1774733
BK
4005 /* If declaring a type as a typedef, copy the type (unless we're
4006 at line 0), and install this TYPE_DECL as the new type's typedef
4007 name. See the extensive comment in ../c-decl.c (pushdecl). */
8d08fdba
MS
4008 if (TREE_CODE (x) == TYPE_DECL)
4009 {
4010 tree type = TREE_TYPE (x);
655dc6ee 4011 if (DECL_SOURCE_LINE (x) == 0)
a1774733
BK
4012 {
4013 if (TYPE_NAME (type) == 0)
4014 TYPE_NAME (type) = x;
4015 }
1c80fb65
MM
4016 else if (type != error_mark_node && TYPE_NAME (type) != x
4017 /* We don't want to copy the type when all we're
4018 doing is making a TYPE_DECL for the purposes of
4019 inlining. */
68642fb6 4020 && (!TYPE_NAME (type)
1c80fb65 4021 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
a1774733
BK
4022 {
4023 DECL_ORIGINAL_TYPE (x) = type;
4024 type = build_type_copy (type);
4025 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4026 TYPE_NAME (type) = x;
4027 TREE_TYPE (x) = type;
4028 }
8d08fdba 4029
8d08fdba
MS
4030 if (type != error_mark_node
4031 && TYPE_NAME (type)
4032 && TYPE_IDENTIFIER (type))
68642fb6 4033 set_identifier_type_value_with_scope (DECL_NAME (x), type,
f181d4ae
MM
4034 current_binding_level);
4035
8d08fdba
MS
4036 }
4037
4038 /* Multiple external decls of the same identifier ought to match.
4039
4040 We get warnings about inline functions where they are defined.
39211cd5 4041 We get warnings about other functions from push_overloaded_decl.
68642fb6 4042
8d08fdba 4043 Avoid duplicate warnings where they are used. */
39211cd5 4044 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
8d08fdba
MS
4045 {
4046 tree decl;
4047
f49fad00
JM
4048 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4049 if (decl && TREE_CODE (decl) == OVERLOAD)
4050 decl = OVL_FUNCTION (decl);
8d08fdba 4051
f49fad00
JM
4052 if (decl && decl != error_mark_node
4053 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))
8d08fdba
MS
4054 /* If different sort of thing, we already gave an error. */
4055 && TREE_CODE (decl) == TREE_CODE (x)
3bfdc719 4056 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
8d08fdba 4057 {
8251199e
JM
4058 cp_pedwarn ("type mismatch with previous external decl", x);
4059 cp_pedwarn_at ("previous external decl of `%#D'", decl);
8d08fdba
MS
4060 }
4061 }
4062
8d08fdba
MS
4063 /* This name is new in its binding level.
4064 Install the new declaration and return it. */
2c73f9f5 4065 if (namespace_bindings_p ())
8d08fdba
MS
4066 {
4067 /* Install a global value. */
4068
8d08fdba
MS
4069 /* If the first global decl has external linkage,
4070 warn if we later see static one. */
31928556 4071 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
8d08fdba 4072 TREE_PUBLIC (name) = 1;
5362b086 4073
92643fea
MM
4074 /* Bind the name for the entity. */
4075 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4076 && t != NULL_TREE)
4077 && (TREE_CODE (x) == TYPE_DECL
4078 || TREE_CODE (x) == VAR_DECL
4079 || TREE_CODE (x) == NAMESPACE_DECL
4080 || TREE_CODE (x) == CONST_DECL
4081 || TREE_CODE (x) == TEMPLATE_DECL))
4082 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
8d08fdba
MS
4083
4084 /* Don't forget if the function was used via an implicit decl. */
4085 if (IDENTIFIER_IMPLICIT_DECL (name)
4086 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4087 TREE_USED (x) = 1;
4088
4089 /* Don't forget if its address was taken in that way. */
4090 if (IDENTIFIER_IMPLICIT_DECL (name)
4091 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4092 TREE_ADDRESSABLE (x) = 1;
4093
4094 /* Warn about mismatches against previous implicit decl. */
4095 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4096 /* If this real decl matches the implicit, don't complain. */
4097 && ! (TREE_CODE (x) == FUNCTION_DECL
4098 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
8251199e
JM
4099 cp_warning
4100 ("`%D' was previously implicitly declared to return `int'", x);
8d08fdba
MS
4101
4102 /* If new decl is `static' and an `extern' was seen previously,
4103 warn about it. */
a0a33927
MS
4104 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4105 warn_extern_redeclared_static (x, t);
8d08fdba
MS
4106 }
4107 else
4108 {
4109 /* Here to install a non-global value. */
f181d4ae 4110 tree oldlocal = IDENTIFIER_VALUE (name);
31928556 4111 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba 4112
f181d4ae
MM
4113 if (need_new_binding)
4114 {
0034cf72 4115 push_local_binding (name, x, 0);
f181d4ae
MM
4116 /* Because push_local_binding will hook X on to the
4117 current_binding_level's name list, we don't want to
4118 do that again below. */
4119 need_new_binding = 0;
4120 }
8d08fdba
MS
4121
4122 /* If this is a TYPE_DECL, push it into the type value slot. */
4123 if (TREE_CODE (x) == TYPE_DECL)
68642fb6 4124 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
f181d4ae 4125 current_binding_level);
8d08fdba 4126
a9aedbc2
MS
4127 /* Clear out any TYPE_DECL shadowed by a namespace so that
4128 we won't think this is a type. The C struct hack doesn't
4129 go through namespaces. */
4130 if (TREE_CODE (x) == NAMESPACE_DECL)
68642fb6 4131 set_identifier_type_value_with_scope (name, NULL_TREE,
f181d4ae 4132 current_binding_level);
a9aedbc2 4133
e905ac8a
MS
4134 if (oldlocal)
4135 {
4136 tree d = oldlocal;
17aec3eb 4137
74dc0d8c
MS
4138 while (oldlocal
4139 && TREE_CODE (oldlocal) == VAR_DECL
4140 && DECL_DEAD_FOR_LOCAL (oldlocal))
17aec3eb
RK
4141 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4142
e905ac8a
MS
4143 if (oldlocal == NULL_TREE)
4144 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4145 }
4146
8d08fdba
MS
4147 /* If this is an extern function declaration, see if we
4148 have a global definition or declaration for the function. */
4149 if (oldlocal == NULL_TREE
faae18ab 4150 && DECL_EXTERNAL (x)
31928556 4151 && oldglobal != NULL_TREE
8d08fdba 4152 && TREE_CODE (x) == FUNCTION_DECL
31928556 4153 && TREE_CODE (oldglobal) == FUNCTION_DECL)
8d08fdba
MS
4154 {
4155 /* We have one. Their types must agree. */
31928556 4156 if (decls_match (x, oldglobal))
6060a796
MS
4157 /* OK */;
4158 else
8d08fdba 4159 {
8251199e
JM
4160 cp_warning ("extern declaration of `%#D' doesn't match", x);
4161 cp_warning_at ("global declaration `%#D'", oldglobal);
8d08fdba 4162 }
8d08fdba
MS
4163 }
4164 /* If we have a local external declaration,
4165 and no file-scope declaration has yet been seen,
4166 then if we later have a file-scope decl it must not be static. */
4167 if (oldlocal == NULL_TREE
31928556 4168 && oldglobal == NULL_TREE
8d08fdba
MS
4169 && DECL_EXTERNAL (x)
4170 && TREE_PUBLIC (x))
f181d4ae 4171 TREE_PUBLIC (name) = 1;
8d08fdba 4172
8d08fdba 4173 /* Warn if shadowing an argument at the top level of the body. */
e905ac8a
MS
4174 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4175 /* Inline decls shadow nothing. */
4176 && !DECL_FROM_INLINE (x)
4177 && TREE_CODE (oldlocal) == PARM_DECL
4178 /* Don't complain if it's from an enclosing function. */
4179 && DECL_CONTEXT (oldlocal) == current_function_decl
4180 && TREE_CODE (x) != PARM_DECL)
8d08fdba
MS
4181 {
4182 /* Go to where the parms should be and see if we
4183 find them there. */
4184 struct binding_level *b = current_binding_level->level_chain;
4185
4186 if (cleanup_label)
4187 b = b->level_chain;
4188
4189 /* ARM $8.3 */
4190 if (b->parm_flag == 1)
8251199e 4191 cp_error ("declaration of `%#D' shadows a parameter", name);
8d08fdba 4192 }
e905ac8a 4193
8d08fdba 4194 /* Maybe warn if shadowing something else. */
e905ac8a
MS
4195 if (warn_shadow && !DECL_EXTERNAL (x)
4196 /* Inline decls shadow nothing. */
4197 && !DECL_FROM_INLINE (x)
4198 /* No shadow warnings for internally generated vars. */
4199 && ! DECL_ARTIFICIAL (x)
4200 /* No shadow warnings for vars made for inlining. */
4201 && ! DECL_FROM_INLINE (x))
8d08fdba 4202 {
8d08fdba 4203 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
b9d12519
KG
4204 warning ("declaration of `%s' shadows a parameter",
4205 IDENTIFIER_POINTER (name));
8d08fdba 4206 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4ac14744 4207 && current_class_ptr
8d08fdba 4208 && !TREE_STATIC (name))
b9d12519
KG
4209 warning ("declaration of `%s' shadows a member of `this'",
4210 IDENTIFIER_POINTER (name));
8d08fdba 4211 else if (oldlocal != NULL_TREE)
b9d12519
KG
4212 warning ("declaration of `%s' shadows previous local",
4213 IDENTIFIER_POINTER (name));
31928556 4214 else if (oldglobal != NULL_TREE)
30394414 4215 /* XXX shadow warnings in outer-more namespaces */
b9d12519
KG
4216 warning ("declaration of `%s' shadows global declaration",
4217 IDENTIFIER_POINTER (name));
8d08fdba 4218 }
e1cd6e56 4219 }
8d08fdba 4220
e1cd6e56 4221 if (TREE_CODE (x) == FUNCTION_DECL)
f30432d7 4222 check_default_args (x);
8145f082
MS
4223
4224 /* Keep count of variables in this level with incomplete type. */
8145f082 4225 if (TREE_CODE (x) == VAR_DECL
28cbf42c 4226 && TREE_TYPE (x) != error_mark_node
d0f062fb 4227 && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
f30432d7
MS
4228 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4229 /* RTTI TD entries are created while defining the type_info. */
4230 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4231 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
70adf8a9
JM
4232 {
4233 if (namespace_bindings_p ())
4234 namespace_scope_incomplete
4235 = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4236 else
4237 current_binding_level->incomplete
4238 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4239 }
8d08fdba
MS
4240 }
4241
f181d4ae 4242 if (need_new_binding)
68642fb6 4243 add_decl_to_level (x,
efee38a9
MM
4244 DECL_NAMESPACE_SCOPE_P (x)
4245 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4246 : current_binding_level);
8d08fdba
MS
4247
4248 return x;
4249}
4250
5566b478
MS
4251/* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4252 caller to set DECL_CONTEXT properly. */
8d08fdba
MS
4253
4254static tree
4255pushdecl_with_scope (x, level)
4256 tree x;
4257 struct binding_level *level;
4258{
8d019cef 4259 register struct binding_level *b;
5566b478 4260 tree function_decl = current_function_decl;
8d08fdba 4261
5566b478 4262 current_function_decl = NULL_TREE;
8d019cef
JM
4263 if (level->parm_flag == 2)
4264 {
4265 b = class_binding_level;
4266 class_binding_level = level;
4267 pushdecl_class_level (x);
4268 class_binding_level = b;
4269 }
4270 else
4271 {
4272 b = current_binding_level;
4273 current_binding_level = level;
4274 x = pushdecl (x);
4275 current_binding_level = b;
4276 }
5566b478 4277 current_function_decl = function_decl;
8d08fdba
MS
4278 return x;
4279}
4280
2c73f9f5 4281/* Like pushdecl, only it places X in the current namespace,
8d08fdba 4282 if appropriate. */
e92cc029 4283
8d08fdba 4284tree
2c73f9f5 4285pushdecl_namespace_level (x)
8d08fdba
MS
4286 tree x;
4287{
8f032717 4288 register struct binding_level *b = current_binding_level;
2c73f9f5
ML
4289 register tree t;
4290
4291 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
8d08fdba
MS
4292
4293 /* Now, the type_shadowed stack may screw us. Munge it so it does
4294 what we want. */
4295 if (TREE_CODE (x) == TYPE_DECL)
4296 {
4297 tree name = DECL_NAME (x);
4298 tree newval;
4299 tree *ptr = (tree *)0;
4300 for (; b != global_binding_level; b = b->level_chain)
4301 {
4302 tree shadowed = b->type_shadowed;
4303 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4304 if (TREE_PURPOSE (shadowed) == name)
4305 {
4306 ptr = &TREE_VALUE (shadowed);
4307 /* Can't break out of the loop here because sometimes
4308 a binding level will have duplicate bindings for
4309 PT names. It's gross, but I haven't time to fix it. */
4310 }
4311 }
4312 newval = TREE_TYPE (x);
4313 if (ptr == (tree *)0)
4314 {
4315 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4316 up here if this is changed to an assertion. --KR */
4317 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4318 }
4319 else
4320 {
8d08fdba
MS
4321 *ptr = newval;
4322 }
4323 }
4324 return t;
4325}
4326
2c73f9f5
ML
4327/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4328 if appropriate. */
4329
4330tree
4331pushdecl_top_level (x)
4332 tree x;
4333{
b35d4555 4334 push_to_top_level ();
2c73f9f5 4335 x = pushdecl_namespace_level (x);
b35d4555 4336 pop_from_top_level ();
2c73f9f5
ML
4337 return x;
4338}
4339
8d08fdba 4340/* Make the declaration of X appear in CLASS scope. */
e92cc029 4341
61a127b3 4342void
8d08fdba
MS
4343pushdecl_class_level (x)
4344 tree x;
4345{
4346 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4347 scope looks for the pre-mangled name. */
8f032717
MM
4348 register tree name;
4349
4350 if (TREE_CODE (x) == OVERLOAD)
4351 x = OVL_CURRENT (x);
4352 name = DECL_NAME (x);
8d08fdba
MS
4353
4354 if (name)
4355 {
4356 push_class_level_binding (name, x);
4357 if (TREE_CODE (x) == TYPE_DECL)
f181d4ae 4358 set_identifier_type_value (name, TREE_TYPE (x));
8d08fdba 4359 }
6bdb8141 4360 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
8f032717
MM
4361 {
4362 tree f;
4363
4364 for (f = TYPE_FIELDS (TREE_TYPE (x));
4365 f;
4366 f = TREE_CHAIN (f))
4367 pushdecl_class_level (f);
4368 }
8d08fdba
MS
4369}
4370
9188c363
MM
4371/* Enter DECL into the symbol table, if that's appropriate. Returns
4372 DECL, or a modified version thereof. */
4373
4374tree
4375maybe_push_decl (decl)
4376 tree decl;
4377{
4378 tree type = TREE_TYPE (decl);
4379
4380 /* Add this decl to the current binding level, but not if it comes
4381 from another scope, e.g. a static member variable. TEM may equal
4382 DECL or it may be a previous decl of the same name. */
07c88314
MM
4383 if (decl == error_mark_node
4384 || (TREE_CODE (decl) != PARM_DECL
4385 && DECL_CONTEXT (decl) != NULL_TREE
4386 /* Definitions of namespace members outside their namespace are
4387 possible. */
4388 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
9188c363
MM
4389 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4390 || TREE_CODE (type) == UNKNOWN_TYPE
558475f0 4391 /* The declaration of a template specialization does not affect
9188c363
MM
4392 the functions available for overload resolution, so we do not
4393 call pushdecl. */
4394 || (TREE_CODE (decl) == FUNCTION_DECL
4395 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4396 return decl;
4397 else
4398 return pushdecl (decl);
4399}
4400
8d08fdba
MS
4401/* Make the declaration(s) of X appear in CLASS scope
4402 under the name NAME. */
e92cc029 4403
8d08fdba
MS
4404void
4405push_class_level_binding (name, x)
4406 tree name;
4407 tree x;
4408{
8f032717 4409 tree binding;
68642fb6 4410 /* The class_binding_level will be NULL if x is a template
98c1c668
JM
4411 parameter name in a member template. */
4412 if (!class_binding_level)
4413 return;
4414
908c4e83
MM
4415 /* Make sure that this new member does not have the same name
4416 as a template parameter. */
4417 if (TYPE_BEING_DEFINED (current_class_type))
4418 check_template_shadow (x);
4419
f181d4ae
MM
4420 /* If this declaration shadows a declaration from an enclosing
4421 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4422 we leave this class. Record the shadowed declaration here. */
8f032717 4423 binding = IDENTIFIER_BINDING (name);
68642fb6 4424 if (binding
8f032717
MM
4425 && ((TREE_CODE (x) == OVERLOAD
4426 && BINDING_VALUE (binding)
4427 && is_overloaded_fn (BINDING_VALUE (binding)))
4428 || INHERITED_VALUE_BINDING_P (binding)))
4429 {
4430 tree shadow;
4431 tree old_decl;
4432
4433 /* If the old binding was from a base class, and was for a tag
4434 name, slide it over to make room for the new binding. The
4435 old binding is still visible if explicitly qualified with a
4436 class-key. */
4437 if (INHERITED_VALUE_BINDING_P (binding)
4438 && BINDING_VALUE (binding)
4439 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4440 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4441 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4442 {
4443 old_decl = BINDING_TYPE (binding);
4444 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4445 BINDING_VALUE (binding) = NULL_TREE;
4446 INHERITED_VALUE_BINDING_P (binding) = 0;
4447 }
4448 else
4449 old_decl = BINDING_VALUE (binding);
4450
76191fdd
NS
4451 /* Find the previous binding of name on the class-shadowed
4452 list, and update it. */
8f032717
MM
4453 for (shadow = class_binding_level->class_shadowed;
4454 shadow;
4455 shadow = TREE_CHAIN (shadow))
4456 if (TREE_PURPOSE (shadow) == name
4457 && TREE_TYPE (shadow) == old_decl)
4458 {
4459 BINDING_VALUE (binding) = x;
4460 INHERITED_VALUE_BINDING_P (binding) = 0;
4461 TREE_TYPE (shadow) = x;
76191fdd 4462 IDENTIFIER_CLASS_VALUE (name) = x;
8f032717
MM
4463 return;
4464 }
4465 }
f181d4ae 4466
8f032717 4467 /* If we didn't replace an existing binding, put the binding on the
76191fdd 4468 stack of bindings for the identifier, and update the shadowed list. */
8f032717
MM
4469 if (push_class_binding (name, x))
4470 {
8f032717 4471 class_binding_level->class_shadowed
76191fdd 4472 = tree_cons (name, NULL,
8f032717 4473 class_binding_level->class_shadowed);
8f032717
MM
4474 /* Record the value we are binding NAME to so that we can know
4475 what to pop later. */
4476 TREE_TYPE (class_binding_level->class_shadowed) = x;
4477 }
8d08fdba
MS
4478}
4479
dd4fae80
ML
4480/* Insert another USING_DECL into the current binding level, returning
4481 this declaration. If this is a redeclaration, do nothing, and
4482 return NULL_TREE if this not in namespace scope (in namespace
4483 scope, a using decl might extend any previous bindings). */
e92cc029 4484
2c73f9f5
ML
4485tree
4486push_using_decl (scope, name)
4487 tree scope;
4488 tree name;
8d08fdba 4489{
2c73f9f5 4490 tree decl;
68642fb6 4491
2c73f9f5
ML
4492 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4493 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4494 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4495 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4496 break;
4497 if (decl)
dd4fae80 4498 return namespace_bindings_p () ? decl : NULL_TREE;
4ce3d537 4499 decl = build_lang_decl (USING_DECL, name, void_type_node);
2c73f9f5
ML
4500 DECL_INITIAL (decl) = scope;
4501 TREE_CHAIN (decl) = current_binding_level->usings;
4502 current_binding_level->usings = decl;
4503 return decl;
8d08fdba
MS
4504}
4505
ea9635c7
ML
4506/* Add namespace to using_directives. Return NULL_TREE if nothing was
4507 changed (i.e. there was already a directive), or the fresh
4508 TREE_LIST otherwise. */
4509
4510tree
9ed182dc 4511push_using_directive (used)
ea9635c7 4512 tree used;
ea9635c7
ML
4513{
4514 tree ud = current_binding_level->using_directives;
9ed182dc 4515 tree iter, ancestor;
68642fb6 4516
ea9635c7
ML
4517 /* Check if we already have this. */
4518 if (purpose_member (used, ud) != NULL_TREE)
4519 return NULL_TREE;
00dc6358
JM
4520
4521 /* Recursively add all namespaces used. */
4522 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
9ed182dc 4523 push_using_directive (TREE_PURPOSE (iter));
00dc6358 4524
9ed182dc 4525 ancestor = namespace_ancestor (current_decl_namespace (), used);
00dc6358 4526 ud = current_binding_level->using_directives;
e1b3e07d 4527 ud = tree_cons (used, ancestor, ud);
ea9635c7
ML
4528 current_binding_level->using_directives = ud;
4529 return ud;
4530}
4531
f181d4ae
MM
4532/* DECL is a FUNCTION_DECL for a non-member function, which may have
4533 other definitions already in place. We get around this by making
4534 the value of the identifier point to a list of all the things that
4535 want to be referenced by that name. It is then up to the users of
4536 that name to decide what to do with that list.
8d08fdba 4537
17aec3eb
RK
4538 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4539 DECL_TEMPLATE_RESULT. It is dealt with the same way.
8d08fdba 4540
7bdbfa05
MM
4541 FLAGS is a bitwise-or of the following values:
4542 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4543 namespace scope.
4544 PUSH_USING: DECL is being pushed as the result of a using
68642fb6 4545 declaration.
7bdbfa05 4546
8d08fdba
MS
4547 The value returned may be a previous declaration if we guessed wrong
4548 about what language DECL should belong to (C or C++). Otherwise,
4549 it's always DECL (and never something that's not a _DECL). */
e92cc029 4550
7bdbfa05
MM
4551tree
4552push_overloaded_decl (decl, flags)
8d08fdba 4553 tree decl;
7bdbfa05 4554 int flags;
8d08fdba 4555{
f181d4ae 4556 tree name = DECL_NAME (decl);
700f8a87 4557 tree old;
f181d4ae 4558 tree new_binding;
7bdbfa05 4559 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
700f8a87
MS
4560
4561 if (doing_global)
9f33663b 4562 old = namespace_binding (name, DECL_CONTEXT (decl));
700f8a87 4563 else
f181d4ae 4564 old = lookup_name_current_level (name);
8d08fdba 4565
700f8a87 4566 if (old)
8d08fdba 4567 {
e1cd6e56 4568 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
8926095f 4569 {
700f8a87 4570 tree t = TREE_TYPE (old);
cdf5b885
MS
4571 if (IS_AGGR_TYPE (t) && warn_shadow
4572 && (! DECL_IN_SYSTEM_HEADER (decl)
4573 || ! DECL_IN_SYSTEM_HEADER (old)))
8251199e 4574 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
5b605f68 4575 old = NULL_TREE;
8926095f 4576 }
700f8a87 4577 else if (is_overloaded_fn (old))
8d08fdba 4578 {
8d08fdba 4579 tree tmp;
68642fb6 4580
2c73f9f5 4581 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
7bdbfa05
MM
4582 {
4583 tree fn = OVL_CURRENT (tmp);
4584
4585 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4586 && !(flags & PUSH_USING)
4587 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4588 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4589 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4590 decl, fn);
68642fb6 4591
7bdbfa05
MM
4592 if (duplicate_decls (decl, fn))
4593 return fn;
4594 }
8d08fdba 4595 }
655dc6ee
JM
4596 else if (old == error_mark_node)
4597 /* Ignore the undefined symbol marker. */
4598 old = NULL_TREE;
e1cd6e56
MS
4599 else
4600 {
8251199e
JM
4601 cp_error_at ("previous non-function declaration `%#D'", old);
4602 cp_error ("conflicts with function declaration `%#D'", decl);
a9aedbc2 4603 return decl;
e1cd6e56 4604 }
8d08fdba 4605 }
7177d104 4606
700f8a87 4607 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
8d08fdba 4608 {
2c73f9f5 4609 if (old && TREE_CODE (old) != OVERLOAD)
f181d4ae
MM
4610 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4611 else
4612 new_binding = ovl_cons (decl, old);
347d73d7
ML
4613 if (flags & PUSH_USING)
4614 OVL_USED (new_binding) = 1;
8d08fdba
MS
4615 }
4616 else
f181d4ae
MM
4617 /* NAME is not ambiguous. */
4618 new_binding = decl;
700f8a87
MS
4619
4620 if (doing_global)
f181d4ae 4621 set_namespace_binding (name, current_namespace, new_binding);
700f8a87 4622 else
f181d4ae
MM
4623 {
4624 /* We only create an OVERLOAD if there was a previous binding at
0580c9aa
ML
4625 this level, or if decl is a template. In the former case, we
4626 need to remove the old binding and replace it with the new
4627 binding. We must also run through the NAMES on the binding
4628 level where the name was bound to update the chain. */
4629
4630 if (TREE_CODE (new_binding) == OVERLOAD && old)
f181d4ae
MM
4631 {
4632 tree *d;
68642fb6 4633
f181d4ae
MM
4634 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4635 *d;
4636 d = &TREE_CHAIN (*d))
4637 if (*d == old
4638 || (TREE_CODE (*d) == TREE_LIST
4639 && TREE_VALUE (*d) == old))
4640 {
d8f8dca1
MM
4641 if (TREE_CODE (*d) == TREE_LIST)
4642 /* Just replace the old binding with the new. */
4643 TREE_VALUE (*d) = new_binding;
4644 else
4645 /* Build a TREE_LIST to wrap the OVERLOAD. */
68642fb6 4646 *d = tree_cons (NULL_TREE, new_binding,
ed5511d9 4647 TREE_CHAIN (*d));
d8f8dca1
MM
4648
4649 /* And update the CPLUS_BINDING node. */
4650 BINDING_VALUE (IDENTIFIER_BINDING (name))
4651 = new_binding;
4652 return decl;
f181d4ae
MM
4653 }
4654
d8f8dca1
MM
4655 /* We should always find a previous binding in this case. */
4656 my_friendly_abort (0);
f181d4ae
MM
4657 }
4658
4659 /* Install the new binding. */
0034cf72 4660 push_local_binding (name, new_binding, flags);
f181d4ae 4661 }
700f8a87 4662
8d08fdba
MS
4663 return decl;
4664}
4665\f
4666/* Generate an implicit declaration for identifier FUNCTIONID
4667 as a function of type int (). Print a warning if appropriate. */
4668
4669tree
4670implicitly_declare (functionid)
4671 tree functionid;
4672{
4673 register tree decl;
8d08fdba
MS
4674
4675 /* We used to reuse an old implicit decl here,
4676 but this loses with inline functions because it can clobber
4677 the saved decl chains. */
4678 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4679
4680 DECL_EXTERNAL (decl) = 1;
4681 TREE_PUBLIC (decl) = 1;
4682
cab1f180 4683 /* ISO standard says implicit declarations are in the innermost block.
d22c8596 4684 So we record the decl in the standard fashion. */
8d08fdba
MS
4685 pushdecl (decl);
4686 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4687
4688 if (warn_implicit
4689 /* Only one warning per identifier. */
4690 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4691 {
8251199e 4692 cp_pedwarn ("implicit declaration of function `%#D'", decl);
8d08fdba
MS
4693 }
4694
4695 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4696
8d08fdba
MS
4697 return decl;
4698}
4699
8251199e 4700/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
4701 when the declaration OLDDECL (assumed to be for the same name)
4702 has already been seen.
4703 Otherwise return an error message format string with a %s
4704 where the identifier should go. */
4705
d8e178a0 4706static const char *
8d08fdba
MS
4707redeclaration_error_message (newdecl, olddecl)
4708 tree newdecl, olddecl;
4709{
4710 if (TREE_CODE (newdecl) == TYPE_DECL)
4711 {
4712 /* Because C++ can put things into name space for free,
4713 constructs like "typedef struct foo { ... } foo"
4714 would look like an erroneous redeclaration. */
3bfdc719 4715 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8251199e 4716 return 0;
8d08fdba 4717 else
8251199e 4718 return "redefinition of `%#D'";
8d08fdba
MS
4719 }
4720 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4721 {
4722 /* If this is a pure function, its olddecl will actually be
4723 the original initialization to `0' (which we force to call
4724 abort()). Don't complain about redefinition in this case. */
fee7654e 4725 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
8251199e 4726 return 0;
8d08fdba 4727
2c73f9f5
ML
4728 /* If both functions come from different namespaces, this is not
4729 a redeclaration - this is a conflict with a used function. */
6eb3bb27 4730 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2c73f9f5 4731 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
8251199e 4732 return "`%D' conflicts with used function";
2c73f9f5 4733
db5ae43f
MS
4734 /* We'll complain about linkage mismatches in
4735 warn_extern_redeclared_static. */
4736
2c73f9f5 4737 /* Defining the same name twice is no good. */
8d08fdba 4738 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 4739 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
4740 {
4741 if (DECL_NAME (olddecl) == NULL_TREE)
8251199e 4742 return "`%#D' not declared in class";
8d08fdba 4743 else
8251199e 4744 return "redefinition of `%#D'";
8d08fdba 4745 }
8251199e 4746 return 0;
8d08fdba 4747 }
51c184be
MS
4748 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4749 {
ec255269 4750 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
5362b086 4751 && (DECL_TEMPLATE_RESULT (newdecl)
f4381d62 4752 != DECL_TEMPLATE_RESULT (olddecl))
ec255269
MS
4753 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4754 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4755 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
d0f062fb
NS
4756 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4757 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
8251199e
JM
4758 return "redefinition of `%#D'";
4759 return 0;
51c184be 4760 }
1f51a992 4761 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba
MS
4762 {
4763 /* Objects declared at top level: */
4764 /* If at least one is a reference, it's ok. */
4765 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
8251199e 4766 return 0;
8926095f 4767 /* Reject two definitions. */
8251199e 4768 return "redefinition of `%#D'";
8d08fdba
MS
4769 }
4770 else
4771 {
4772 /* Objects declared with block scope: */
4773 /* Reject two definitions, and reject a definition
4774 together with an external reference. */
4775 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
8251199e
JM
4776 return "redeclaration of `%#D'";
4777 return 0;
8d08fdba
MS
4778 }
4779}
4780\f
acef433b 4781/* Create a new label, named ID. */
8d08fdba 4782
acef433b
MM
4783static tree
4784make_label_decl (id, local_p)
8d08fdba 4785 tree id;
acef433b 4786 int local_p;
8d08fdba 4787{
acef433b 4788 tree decl;
8d08fdba 4789
acef433b 4790 decl = build_decl (LABEL_DECL, id, void_type_node);
b35d4555 4791 if (expanding_p)
acef433b
MM
4792 /* Make sure every label has an rtx. */
4793 label_rtx (decl);
4794
4795 DECL_CONTEXT (decl) = current_function_decl;
4796 DECL_MODE (decl) = VOIDmode;
4797 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 4798
acef433b
MM
4799 /* Say where one reference is to the label, for the sake of the
4800 error if it is not defined. */
4801 DECL_SOURCE_LINE (decl) = lineno;
4802 DECL_SOURCE_FILE (decl) = input_filename;
4803
4804 /* Record the fact that this identifier is bound to this label. */
4805 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4806
6625cdb5
JM
4807 return decl;
4808}
4809
4810/* Record this label on the list of used labels so that we can check
4811 at the end of the function to see whether or not the label was
4812 actually defined, and so we can check when the label is defined whether
4813 this use is valid. */
4814
4815static void
4816use_label (decl)
4817 tree decl;
4818{
4819 if (named_label_uses == NULL
4820 || named_label_uses->names_in_scope != current_binding_level->names
4821 || named_label_uses->label_decl != decl)
4822 {
4823 struct named_label_use_list *new_ent;
4824 new_ent = ((struct named_label_use_list *)
4825 ggc_alloc (sizeof (struct named_label_use_list)));
e349ee73
MS
4826 new_ent->label_decl = decl;
4827 new_ent->names_in_scope = current_binding_level->names;
4828 new_ent->binding_level = current_binding_level;
4829 new_ent->lineno_o_goto = lineno;
4830 new_ent->filename_o_goto = input_filename;
4831 new_ent->next = named_label_uses;
4832 named_label_uses = new_ent;
8d08fdba 4833 }
acef433b 4834}
8d08fdba 4835
acef433b
MM
4836/* Look for a label named ID in the current function. If one cannot
4837 be found, create one. (We keep track of used, but undefined,
4838 labels, and complain about them at the end of a function.) */
8d08fdba 4839
68642fb6 4840tree
acef433b
MM
4841lookup_label (id)
4842 tree id;
4843{
4844 tree decl;
6625cdb5 4845 struct named_label_list *ent;
8d08fdba 4846
acef433b
MM
4847 /* You can't use labels at global scope. */
4848 if (current_function_decl == NULL_TREE)
4849 {
4850 error ("label `%s' referenced outside of any function",
4851 IDENTIFIER_POINTER (id));
4852 return NULL_TREE;
4853 }
68642fb6 4854
acef433b
MM
4855 /* See if we've already got this label. */
4856 decl = IDENTIFIER_LABEL_VALUE (id);
4857 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4858 return decl;
8d08fdba 4859
acef433b
MM
4860 /* Record this label on the list of labels used in this function.
4861 We do this before calling make_label_decl so that we get the
4862 IDENTIFIER_LABEL_VALUE before the new label is declared. */
6625cdb5 4863 ent = ((struct named_label_list *)
f8a83ee3 4864 ggc_alloc_cleared (sizeof (struct named_label_list)));
6625cdb5
JM
4865 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
4866 ent->next = named_labels;
4867 named_labels = ent;
4868
acef433b
MM
4869 /* We need a new label. */
4870 decl = make_label_decl (id, /*local_p=*/0);
6625cdb5 4871
acef433b 4872 /* Now fill in the information we didn't have before. */
6625cdb5 4873 ent->label_decl = decl;
8d08fdba
MS
4874
4875 return decl;
4876}
4877
acef433b 4878/* Declare a local label named ID. */
8d08fdba
MS
4879
4880tree
acef433b
MM
4881declare_local_label (id)
4882 tree id;
8d08fdba 4883{
acef433b 4884 tree decl;
8d08fdba 4885
acef433b
MM
4886 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4887 this scope we can restore the old value of
4888 IDENTIFIER_TYPE_VALUE. */
68642fb6 4889 current_binding_level->shadowed_labels
acef433b
MM
4890 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4891 current_binding_level->shadowed_labels);
4892 /* Look for the label. */
4893 decl = make_label_decl (id, /*local_p=*/1);
4894 /* Now fill in the information we didn't have before. */
4895 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
68642fb6 4896
acef433b 4897 return decl;
8d08fdba
MS
4898}
4899
6625cdb5
JM
4900/* Returns nonzero if it is ill-formed to jump past the declaration of
4901 DECL. Returns 2 if it's also a real problem. */
4902
4903static int
4904decl_jump_unsafe (decl)
4905 tree decl;
4906{
4907 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
4908 return 0;
4909
4910 if (DECL_INITIAL (decl) == NULL_TREE
4911 && pod_type_p (TREE_TYPE (decl)))
4912 return 0;
4913
4914 /* This is really only important if we're crossing an initialization.
4915 The POD stuff is just pedantry; why should it matter if the class
4916 contains a field of pointer to member type? */
4917 if (DECL_INITIAL (decl)
4918 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
4919 return 2;
4920 return 1;
4921}
4922
4923/* Check that a single previously seen jump to a newly defined label
4924 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
4925 the jump context; NAMES are the names in scope in LEVEL at the jump
4926 context; FILE and LINE are the source position of the jump or 0. */
4927
4928static void
4929check_previous_goto_1 (decl, level, names, file, line)
4930 tree decl;
4931 struct binding_level *level;
4932 tree names;
4933 const char *file;
4934 int line;
4935{
4936 int identified = 0;
4937 int saw_eh = 0;
4938 struct binding_level *b = current_binding_level;
4939 for (; b; b = b->level_chain)
4940 {
4941 tree new_decls = b->names;
4942 tree old_decls = (b == level ? names : NULL_TREE);
4943 for (; new_decls != old_decls;
4944 new_decls = TREE_CHAIN (new_decls))
4945 {
4946 int problem = decl_jump_unsafe (new_decls);
4947 if (! problem)
4948 continue;
4949
4950 if (! identified)
4951 {
4952 if (decl)
4953 cp_pedwarn ("jump to label `%D'", decl);
4954 else
4955 pedwarn ("jump to case label");
4956
4957 if (file)
4958 pedwarn_with_file_and_line (file, line, " from here");
4959 identified = 1;
4960 }
4961
826840d9 4962 if (problem > 1)
6625cdb5
JM
4963 cp_error_at (" crosses initialization of `%#D'",
4964 new_decls);
4965 else
4966 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4967 new_decls);
4968 }
4969
4970 if (b == level)
4971 break;
826840d9 4972 if ((b->is_try_scope || b->is_catch_scope) && ! saw_eh)
6625cdb5
JM
4973 {
4974 if (! identified)
4975 {
4976 if (decl)
4977 cp_pedwarn ("jump to label `%D'", decl);
4978 else
4979 pedwarn ("jump to case label");
4980
4981 if (file)
4982 pedwarn_with_file_and_line (file, line, " from here");
4983 identified = 1;
4984 }
826840d9
RH
4985 if (b->is_try_scope)
4986 error (" enters try block");
4987 else
4988 error (" enters catch block");
6625cdb5
JM
4989 saw_eh = 1;
4990 }
4991 }
4992}
4993
4994static void
4995check_previous_goto (use)
4996 struct named_label_use_list *use;
4997{
4998 check_previous_goto_1 (use->label_decl, use->binding_level,
4999 use->names_in_scope, use->filename_o_goto,
5000 use->lineno_o_goto);
5001}
5002
5003static void
5004check_switch_goto (level)
5005 struct binding_level *level;
5006{
5007 check_previous_goto_1 (NULL_TREE, level, level->names, NULL, 0);
5008}
5009
5010/* Check that any previously seen jumps to a newly defined label DECL
5011 are OK. Called by define_label. */
5012
5013static void
5014check_previous_gotos (decl)
5015 tree decl;
5016{
5017 struct named_label_use_list **usep;
5018
5019 if (! TREE_USED (decl))
5020 return;
5021
5022 for (usep = &named_label_uses; *usep; )
5023 {
5024 struct named_label_use_list *use = *usep;
5025 if (use->label_decl == decl)
5026 {
5027 check_previous_goto (use);
5028 *usep = use->next;
5029 }
5030 else
5031 usep = &(use->next);
5032 }
5033}
5034
5035/* Check that a new jump to a label DECL is OK. Called by
5036 finish_goto_stmt. */
5037
5038void
5039check_goto (decl)
5040 tree decl;
5041{
5042 int identified = 0;
5043 tree bad;
5044 struct named_label_list *lab;
5045
e3cd9945
APB
5046 /* We can't know where a computed goto is jumping. So we assume
5047 that it's OK. */
5048 if (! DECL_P (decl))
5049 return;
5050
6625cdb5
JM
5051 /* If the label hasn't been defined yet, defer checking. */
5052 if (! DECL_INITIAL (decl))
5053 {
5054 use_label (decl);
5055 return;
5056 }
5057
5058 for (lab = named_labels; lab; lab = lab->next)
5059 if (decl == lab->label_decl)
5060 break;
5061
5062 /* If the label is not on named_labels it's a gcc local label, so
5063 it must be in an outer scope, so jumping to it is always OK. */
5064 if (lab == 0)
5065 return;
5066
826840d9
RH
5067 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
5068 && !identified)
6625cdb5
JM
5069 {
5070 cp_pedwarn_at ("jump to label `%D'", decl);
5071 pedwarn (" from here");
5072 identified = 1;
5073 }
5074
5075 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
5076 {
5077 tree b = TREE_VALUE (bad);
5078 int u = decl_jump_unsafe (b);
5079
5080 if (u > 1 && DECL_ARTIFICIAL (b))
5081 /* Can't skip init of __exception_info. */
5082 cp_error_at (" enters catch block", b);
5083 else if (u > 1)
5084 cp_error_at (" skips initialization of `%#D'", b);
5085 else
5086 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
5087 }
5088
826840d9 5089 if (lab->in_try_scope)
6625cdb5 5090 error (" enters try block");
826840d9
RH
5091 else if (lab->in_catch_scope)
5092 error (" enters catch block");
6625cdb5
JM
5093}
5094
8d08fdba
MS
5095/* Define a label, specifying the location in the source file.
5096 Return the LABEL_DECL node for the label, if the definition is valid.
5097 Otherwise return 0. */
5098
5099tree
5100define_label (filename, line, name)
3b304f5b 5101 const char *filename;
8d08fdba
MS
5102 int line;
5103 tree name;
5104{
f01b0acb 5105 tree decl = lookup_label (name);
6625cdb5 5106 struct named_label_list *ent;
3dc9aec6 5107 register struct binding_level *p;
6625cdb5
JM
5108
5109 for (ent = named_labels; ent; ent = ent->next)
5110 if (ent->label_decl == decl)
5111 break;
8d08fdba 5112
3dc9aec6 5113 /* After labels, make any new cleanups in the function go into their
8d08fdba 5114 own new (temporary) binding contour. */
3dc9aec6
WC
5115 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5116 p->more_cleanups_ok = 0;
8d08fdba 5117
e1cd6e56 5118 if (name == get_identifier ("wchar_t"))
8251199e 5119 cp_pedwarn ("label named wchar_t");
e1cd6e56 5120
8d08fdba
MS
5121 if (DECL_INITIAL (decl) != NULL_TREE)
5122 {
8251199e 5123 cp_error ("duplicate label `%D'", decl);
8d08fdba
MS
5124 return 0;
5125 }
5126 else
5127 {
8d08fdba
MS
5128 /* Mark label as having been defined. */
5129 DECL_INITIAL (decl) = error_mark_node;
5130 /* Say where in the source. */
5131 DECL_SOURCE_FILE (decl) = filename;
5132 DECL_SOURCE_LINE (decl) = line;
6625cdb5
JM
5133 if (ent)
5134 {
5135 ent->names_in_scope = current_binding_level->names;
5136 ent->binding_level = current_binding_level;
5137 }
5138 check_previous_gotos (decl);
8d08fdba
MS
5139 current_function_return_value = NULL_TREE;
5140 return decl;
5141 }
5142}
5143
a5894242
MS
5144struct cp_switch
5145{
5146 struct binding_level *level;
5147 struct cp_switch *next;
56cb9733
MM
5148 /* The SWITCH_STMT being built. */
5149 tree switch_stmt;
5150 /* A splay-tree mapping the low element of a case range to the high
5151 element, or NULL_TREE if there is no high element. Used to
5152 determine whether or not a new case label duplicates an old case
5153 label. We need a tree, rather than simply a hash table, because
5154 of the GNU case range extension. */
5155 splay_tree cases;
a5894242
MS
5156};
5157
56cb9733
MM
5158/* A stack of the currently active switch statements. The innermost
5159 switch statement is on the top of the stack. There is no need to
5160 mark the stack for garbage collection because it is only active
5161 during the processing of the body of a function, and we never
5162 collect at that point. */
5362b086 5163
a5894242
MS
5164static struct cp_switch *switch_stack;
5165
56cb9733
MM
5166/* Called right after a switch-statement condition is parsed.
5167 SWITCH_STMT is the switch statement being parsed. */
5168
a5894242 5169void
56cb9733
MM
5170push_switch (switch_stmt)
5171 tree switch_stmt;
a5894242
MS
5172{
5173 struct cp_switch *p
bedda2da 5174 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
a5894242
MS
5175 p->level = current_binding_level;
5176 p->next = switch_stack;
56cb9733
MM
5177 p->switch_stmt = switch_stmt;
5178 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
5179 switch_stack = p;
5180}
5181
5182void
5183pop_switch ()
5184{
bedda2da 5185 struct cp_switch *cs;
5362b086 5186
bedda2da 5187 cs = switch_stack;
56cb9733 5188 splay_tree_delete (cs->cases);
a5894242 5189 switch_stack = switch_stack->next;
bedda2da 5190 free (cs);
a5894242
MS
5191}
5192
b0a1da19
JM
5193/* Note that we've seen a definition of a case label, and complain if this
5194 is a bad place for one. */
e92cc029 5195
3e4d04a1 5196tree
56cb9733
MM
5197finish_case_label (low_value, high_value)
5198 tree low_value;
5199 tree high_value;
8d08fdba 5200{
3e4d04a1 5201 tree cond, r;
3dc9aec6 5202 register struct binding_level *p;
a5894242 5203
b0a1da19 5204 if (! switch_stack)
56cb9733
MM
5205 {
5206 if (high_value)
5207 error ("case label not within a switch statement");
5208 else if (low_value)
5362b086 5209 cp_error ("case label `%E' not within a switch statement",
56cb9733
MM
5210 low_value);
5211 else
5212 error ("`default' label not within a switch statement");
3e4d04a1 5213 return NULL_TREE;
56cb9733
MM
5214 }
5215
56cb9733
MM
5216 if (processing_template_decl)
5217 {
8f17b5c5
MM
5218 tree label;
5219
56cb9733
MM
5220 /* For templates, just add the case label; we'll do semantic
5221 analysis at instantiation-time. */
8f17b5c5 5222 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3e4d04a1 5223 return add_stmt (build_case_label (low_value, high_value, label));
56cb9733
MM
5224 }
5225
5226 /* Find the condition on which this switch statement depends. */
5227 cond = SWITCH_COND (switch_stack->switch_stmt);
5228 if (cond && TREE_CODE (cond) == TREE_LIST)
5229 cond = TREE_VALUE (cond);
56cb9733 5230
3e4d04a1
RH
5231 r = c_add_case_label (switch_stack->cases, cond, low_value, high_value);
5232 if (r == error_mark_node)
5233 r = NULL_TREE;
8d08fdba 5234
6625cdb5 5235 check_switch_goto (switch_stack->level);
a5894242 5236
3dc9aec6 5237 /* After labels, make any new cleanups in the function go into their
8d08fdba 5238 own new (temporary) binding contour. */
3dc9aec6
WC
5239 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5240 p->more_cleanups_ok = 0;
8d08fdba 5241 current_function_return_value = NULL_TREE;
3e4d04a1
RH
5242
5243 return r;
8d08fdba
MS
5244}
5245\f
5246/* Return the list of declarations of the current level.
5247 Note that this list is in reverse order unless/until
5248 you nreverse it; and when you do nreverse it, you must
5249 store the result back using `storedecls' or you will lose. */
5250
5251tree
5252getdecls ()
5253{
5254 return current_binding_level->names;
5255}
5256
5257/* Return the list of type-tags (for structs, etc) of the current level. */
5258
5259tree
5260gettags ()
5261{
5262 return current_binding_level->tags;
5263}
5264
5265/* Store the list of declarations of the current level.
5266 This is done for the parameter declarations of a function being defined,
5267 after they are modified in the light of any missing parameters. */
5268
5269static void
5270storedecls (decls)
5271 tree decls;
5272{
5273 current_binding_level->names = decls;
5274}
5275
5276/* Similarly, store the list of tags of the current level. */
5277
280f9385 5278void
8d08fdba
MS
5279storetags (tags)
5280 tree tags;
5281{
5282 current_binding_level->tags = tags;
5283}
5284\f
5285/* Given NAME, an IDENTIFIER_NODE,
5286 return the structure (or union or enum) definition for that name.
5287 Searches binding levels from BINDING_LEVEL up to the global level.
5288 If THISLEVEL_ONLY is nonzero, searches only the specified context
5289 (but skips any tag-transparent contexts to find one that is
5290 meaningful for tags).
5291 FORM says which kind of type the caller wants;
5292 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5293 If the wrong kind of type is found, and it's not a template, an error is
5294 reported. */
5295
5296static tree
5297lookup_tag (form, name, binding_level, thislevel_only)
5298 enum tree_code form;
8d08fdba 5299 tree name;
cffa8729 5300 struct binding_level *binding_level;
8d08fdba
MS
5301 int thislevel_only;
5302{
5303 register struct binding_level *level;
74b846e0
MM
5304 /* Non-zero if, we should look past a template parameter level, even
5305 if THISLEVEL_ONLY. */
5306 int allow_template_parms_p = 1;
8d08fdba
MS
5307
5308 for (level = binding_level; level; level = level->level_chain)
5309 {
5310 register tree tail;
5311 if (ANON_AGGRNAME_P (name))
5312 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5313 {
5314 /* There's no need for error checking here, because
5315 anon names are unique throughout the compilation. */
5316 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5317 return TREE_VALUE (tail);
5318 }
2c73f9f5
ML
5319 else if (level->namespace_p)
5320 /* Do namespace lookup. */
6c011b01 5321 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
2c73f9f5 5322 {
36a117a5
MM
5323 tree old = binding_for_name (name, tail);
5324
74b846e0
MM
5325 /* If we just skipped past a template parameter level,
5326 even though THISLEVEL_ONLY, and we find a template
5327 class declaration, then we use the _TYPE node for the
36a117a5 5328 template. See the example below. */
74b846e0 5329 if (thislevel_only && !allow_template_parms_p
68642fb6 5330 && old && BINDING_VALUE (old)
36a117a5
MM
5331 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5332 old = TREE_TYPE (BINDING_VALUE (old));
68642fb6 5333 else
36a117a5
MM
5334 old = BINDING_TYPE (old);
5335
2c73f9f5
ML
5336 /* If it has an original type, it is a typedef, and we
5337 should not return it. */
5338 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5339 old = NULL_TREE;
5340 if (old && TREE_CODE (old) != form
5341 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5342 {
8251199e 5343 cp_error ("`%#D' redeclared as %C", old, form);
2c73f9f5
ML
5344 return NULL_TREE;
5345 }
5346 if (old)
5347 return old;
5348 if (thislevel_only || tail == global_namespace)
5349 return NULL_TREE;
5350 }
8d08fdba
MS
5351 else
5352 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5353 {
a80e4195 5354 if (TREE_PURPOSE (tail) == name)
8d08fdba
MS
5355 {
5356 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5357 /* Should tighten this up; it'll probably permit
5358 UNION_TYPE and a struct template, for example. */
5359 if (code != form
5566b478 5360 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
8d08fdba
MS
5361 {
5362 /* Definition isn't the kind we were looking for. */
8251199e 5363 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
8d08fdba 5364 form);
72b7eeff 5365 return NULL_TREE;
8d08fdba
MS
5366 }
5367 return TREE_VALUE (tail);
5368 }
5369 }
5370 if (thislevel_only && ! level->tag_transparent)
5566b478 5371 {
74b846e0 5372 if (level->template_parms_p && allow_template_parms_p)
5566b478 5373 {
36a117a5 5374 /* We must deal with cases like this:
68642fb6 5375
36a117a5
MM
5376 template <class T> struct S;
5377 template <class T> struct S {};
68642fb6 5378
36a117a5
MM
5379 When looking up `S', for the second declaration, we
5380 would like to find the first declaration. But, we
5381 are in the pseudo-global level created for the
5382 template parameters, rather than the (surrounding)
5383 namespace level. Thus, we keep going one more level,
5384 even though THISLEVEL_ONLY is non-zero. */
74b846e0 5385 allow_template_parms_p = 0;
36a117a5 5386 continue;
5566b478 5387 }
36a117a5
MM
5388 else
5389 return NULL_TREE;
5566b478 5390 }
8d08fdba
MS
5391 }
5392 return NULL_TREE;
5393}
5394
bd6dd845 5395#if 0
8d08fdba
MS
5396void
5397set_current_level_tags_transparency (tags_transparent)
5398 int tags_transparent;
5399{
5400 current_binding_level->tag_transparent = tags_transparent;
5401}
bd6dd845 5402#endif
8d08fdba
MS
5403
5404/* Given a type, find the tag that was defined for it and return the tag name.
5405 Otherwise return 0. However, the value can never be 0
5406 in the cases in which this is used.
5407
5408 C++: If NAME is non-zero, this is the new name to install. This is
5409 done when replacing anonymous tags with real tag names. */
5410
5411static tree
5412lookup_tag_reverse (type, name)
5413 tree type;
5414 tree name;
5415{
5416 register struct binding_level *level;
5417
5418 for (level = current_binding_level; level; level = level->level_chain)
5419 {
5420 register tree tail;
5421 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5422 {
5423 if (TREE_VALUE (tail) == type)
5424 {
5425 if (name)
5426 TREE_PURPOSE (tail) = name;
5427 return TREE_PURPOSE (tail);
5428 }
5429 }
5430 }
5431 return NULL_TREE;
5432}
8d08fdba 5433\f
a9aedbc2 5434/* Look up NAME in the NAMESPACE. */
e92cc029 5435
a9aedbc2
MS
5436tree
5437lookup_namespace_name (namespace, name)
5438 tree namespace, name;
5439{
30394414 5440 tree val;
f30c84c9 5441 tree template_id = NULL_TREE;
2c73f9f5 5442
30394414 5443 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
1231fb96 5444
1231fb96 5445 if (TREE_CODE (name) == NAMESPACE_DECL)
d8f8dca1 5446 /* This happens for A::B<int> when B is a namespace. */
1231fb96 5447 return name;
d8f8dca1
MM
5448 else if (TREE_CODE (name) == TEMPLATE_DECL)
5449 {
5450 /* This happens for A::B where B is a template, and there are no
5451 template arguments. */
5452 cp_error ("invalid use of `%D'", name);
5453 return error_mark_node;
5454 }
1231fb96 5455
b262d64c
JM
5456 namespace = ORIGINAL_NAMESPACE (namespace);
5457
f30c84c9
MM
5458 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5459 {
5460 template_id = name;
5461 name = TREE_OPERAND (name, 0);
5462 if (TREE_CODE (name) == OVERLOAD)
5463 name = DECL_NAME (OVL_CURRENT (name));
2f939d94 5464 else if (DECL_P (name))
f30c84c9
MM
5465 name = DECL_NAME (name);
5466 }
5467
30394414 5468 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
68642fb6 5469
87e3dbc9 5470 val = make_node (CPLUS_BINDING);
52c11ef6 5471 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
2c73f9f5
ML
5472 return error_mark_node;
5473
5474 if (BINDING_VALUE (val))
1c35f5b6
JM
5475 {
5476 val = BINDING_VALUE (val);
5477
f30c84c9
MM
5478 if (template_id)
5479 {
5480 if (DECL_CLASS_TEMPLATE_P (val))
68642fb6 5481 val = lookup_template_class (val,
f30c84c9
MM
5482 TREE_OPERAND (template_id, 1),
5483 /*in_decl=*/NULL_TREE,
5484 /*context=*/NULL_TREE,
f9c244b8
NS
5485 /*entering_scope=*/0,
5486 /*complain=*/1);
f30c84c9
MM
5487 else if (DECL_FUNCTION_TEMPLATE_P (val)
5488 || TREE_CODE (val) == OVERLOAD)
68642fb6 5489 val = lookup_template_function (val,
f30c84c9
MM
5490 TREE_OPERAND (template_id, 1));
5491 else
5492 {
5493 cp_error ("`%D::%D' is not a template",
5494 namespace, name);
5495 return error_mark_node;
5496 }
5497 }
5498
1c35f5b6
JM
5499 /* If we have a single function from a using decl, pull it out. */
5500 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5501 val = OVL_FUNCTION (val);
5502 return val;
5503 }
5504
8251199e 5505 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
30394414 5506 return error_mark_node;
a9aedbc2
MS
5507}
5508
7ddedda4
MM
5509/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5510
5511static unsigned long
5512typename_hash (k)
5513 hash_table_key k;
5514{
5515 unsigned long hash;
5516 tree t;
5517
5518 t = (tree) k;
5519 hash = (((unsigned long) TYPE_CONTEXT (t))
5520 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5521
5522 return hash;
5523}
5524
5525/* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5526
d6edb99e 5527static bool
7ddedda4
MM
5528typename_compare (k1, k2)
5529 hash_table_key k1;
5530 hash_table_key k2;
5531{
5532 tree t1;
5533 tree t2;
5534 tree d1;
5535 tree d2;
5536
5537 t1 = (tree) k1;
5538 t2 = (tree) k2;
5539 d1 = TYPE_NAME (t1);
5540 d2 = TYPE_NAME (t2);
68642fb6 5541
7ddedda4
MM
5542 return (DECL_NAME (d1) == DECL_NAME (d2)
5543 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
68642fb6 5544 && ((TREE_TYPE (t1) != NULL_TREE)
7ddedda4
MM
5545 == (TREE_TYPE (t2) != NULL_TREE))
5546 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5547 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5548}
5549
45869a6c
MM
5550/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5551 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5552 is non-NULL, this type is being created by the implicit typename
5553 extension, and BASE_TYPE is a type named `t' in some base class of
68642fb6 5554 `T' which depends on template parameters.
45869a6c
MM
5555
5556 Returns the new TYPENAME_TYPE. */
5557
5558tree
5559build_typename_type (context, name, fullname, base_type)
5560 tree context;
5561 tree name;
5562 tree fullname;
5563 tree base_type;
5564{
5565 tree t;
5566 tree d;
400500c4 5567 struct hash_entry *e;
45869a6c 5568
7ddedda4
MM
5569 static struct hash_table ht;
5570
9cd64686
MM
5571 if (!ht.table)
5572 {
5573 static struct hash_table *h = &ht;
400500c4
RK
5574
5575 hash_table_init (&ht, &hash_newfunc, &typename_hash, &typename_compare);
9cd64686
MM
5576 ggc_add_tree_hash_table_root (&h, 1);
5577 }
45869a6c
MM
5578
5579 /* Build the TYPENAME_TYPE. */
33848bb0 5580 t = make_aggr_type (TYPENAME_TYPE);
45869a6c
MM
5581 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5582 TYPENAME_TYPE_FULLNAME (t) = fullname;
5583 TREE_TYPE (t) = base_type;
45869a6c
MM
5584
5585 /* Build the corresponding TYPE_DECL. */
5586 d = build_decl (TYPE_DECL, name, t);
5587 TYPE_NAME (TREE_TYPE (d)) = d;
5588 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5589 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2642b9bf 5590 DECL_ARTIFICIAL (d) = 1;
45869a6c 5591
7ddedda4
MM
5592 /* See if we already have this type. */
5593 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5594 if (e)
87e3dbc9 5595 t = (tree) e->key;
7ddedda4
MM
5596 else
5597 /* Insert the type into the table. */
5598 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5599
45869a6c
MM
5600 return t;
5601}
5602
3baa501d
MM
5603/* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5604 unless an error occurs, in which case error_mark_node is returned.
5605 If COMPLAIN zero, don't complain about any errors that occur. */
5606
5566b478 5607tree
3baa501d 5608make_typename_type (context, name, complain)
5566b478 5609 tree context, name;
3baa501d 5610 int complain;
5566b478 5611{
b2b7d40a 5612 tree fullname;
a80e4195 5613
2f939d94 5614 if (TYPE_P (name))
78638e24 5615 {
68642fb6
UD
5616 if (!(TYPE_LANG_SPECIFIC (name)
5617 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
5618 || CLASSTYPE_USE_TEMPLATE (name))))
5619 name = TYPE_IDENTIFIER (name);
5620 else
5621 /* Create a TEMPLATE_ID_EXPR for the type. */
5622 name = build_nt (TEMPLATE_ID_EXPR,
5623 CLASSTYPE_TI_TEMPLATE (name),
5624 CLASSTYPE_TI_ARGS (name));
5625 }
653cc74a 5626 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 5627 name = DECL_NAME (name);
b2b7d40a
JM
5628
5629 fullname = name;
5630
5631 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
5632 {
5633 name = TREE_OPERAND (name, 0);
5634 if (TREE_CODE (name) == TEMPLATE_DECL)
5635 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5636 }
b2b7d40a 5637 if (TREE_CODE (name) != IDENTIFIER_NODE)
a80e4195 5638 my_friendly_abort (2000);
5566b478 5639
04ddee1b
BK
5640 if (TREE_CODE (context) == NAMESPACE_DECL)
5641 {
5642 /* We can get here from typename_sub0 in the explicit_template_type
5643 expansion. Just fail. */
3baa501d
MM
5644 if (complain)
5645 cp_error ("no class template named `%#T' in `%#T'",
5646 name, context);
04ddee1b
BK
5647 return error_mark_node;
5648 }
5649
85b71cf2 5650 if (! uses_template_parms (context)
b77ead33 5651 || currently_open_class (context))
5566b478 5652 {
b2b7d40a
JM
5653 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5654 {
ad810b22 5655 tree tmpl = NULL_TREE;
b2b7d40a 5656 if (IS_AGGR_TYPE (context))
ad810b22
MM
5657 tmpl = lookup_field (context, name, 0, 0);
5658 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
b2b7d40a 5659 {
3baa501d
MM
5660 if (complain)
5661 cp_error ("no class template named `%#T' in `%#T'",
5662 name, context);
b2b7d40a
JM
5663 return error_mark_node;
5664 }
ffb690bd 5665
68642fb6 5666 return lookup_template_class (tmpl,
ad810b22 5667 TREE_OPERAND (fullname, 1),
68642fb6 5668 NULL_TREE, context,
f9c244b8
NS
5669 /*entering_scope=*/0,
5670 /*complain=*/1);
b2b7d40a
JM
5671 }
5672 else
5566b478 5673 {
b4f70b3d 5674 tree t;
68642fb6 5675
b4f70b3d 5676 if (!IS_AGGR_TYPE (context))
b2b7d40a 5677 {
3baa501d
MM
5678 if (complain)
5679 cp_error ("no type named `%#T' in `%#T'", name, context);
b2b7d40a
JM
5680 return error_mark_node;
5681 }
1107c4b3 5682
b4f70b3d 5683 t = lookup_field (context, name, 0, 1);
7d4bdeed
MM
5684 if (t)
5685 return TREE_TYPE (t);
5566b478 5686 }
5566b478 5687 }
11249cf0
MM
5688
5689 /* If the CONTEXT is not a template type, then either the field is
5690 there now or its never going to be. */
b4f70b3d 5691 if (!uses_template_parms (context))
11249cf0 5692 {
3baa501d
MM
5693 if (complain)
5694 cp_error ("no type named `%#T' in `%#T'", name, context);
11249cf0
MM
5695 return error_mark_node;
5696 }
68642fb6
UD
5697
5698
45869a6c 5699 return build_typename_type (context, name, fullname, NULL_TREE);
5566b478
MS
5700}
5701
2c73f9f5
ML
5702/* Select the right _DECL from multiple choices. */
5703
5704static tree
52c11ef6 5705select_decl (binding, flags)
2c73f9f5 5706 tree binding;
52c11ef6 5707 int flags;
2c73f9f5
ML
5708{
5709 tree val;
5710 val = BINDING_VALUE (binding);
97ba1e3c
MM
5711
5712 /* When we implicitly declare some builtin entity, we mark it
5713 DECL_ANTICIPATED, so that we know to ignore it until it is
5714 really declared. */
5362b086
EC
5715 if (val && DECL_P (val)
5716 && DECL_LANG_SPECIFIC (val)
97ba1e3c
MM
5717 && DECL_ANTICIPATED (val))
5718 return NULL_TREE;
5719
52c11ef6 5720 if (LOOKUP_NAMESPACES_ONLY (flags))
3e3f722c
ML
5721 {
5722 /* We are not interested in types. */
5723 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5724 return val;
5725 return NULL_TREE;
5726 }
68642fb6 5727
2c73f9f5
ML
5728 /* If we could have a type and
5729 we have nothing or we need a type and have none. */
5730 if (BINDING_TYPE (binding)
52c11ef6
JM
5731 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5732 && TREE_CODE (val) != TYPE_DECL)))
2c73f9f5
ML
5733 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5734 /* Don't return non-types if we really prefer types. */
52c11ef6 5735 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
c592d5d2
ML
5736 && (TREE_CODE (val) != TEMPLATE_DECL
5737 || !DECL_CLASS_TEMPLATE_P (val)))
2c73f9f5 5738 val = NULL_TREE;
1c35f5b6 5739
2c73f9f5
ML
5740 return val;
5741}
5742
2c169bab
JM
5743/* Unscoped lookup of a global: iterate over current namespaces,
5744 considering using-directives. If SPACESP is non-NULL, store a list
5745 of the namespaces we've considered in it. */
ea9635c7 5746
2c169bab
JM
5747tree
5748unqualified_namespace_lookup (name, flags, spacesp)
ea9635c7 5749 tree name;
52c11ef6 5750 int flags;
2c169bab 5751 tree *spacesp;
ea9635c7 5752{
87e3dbc9 5753 tree b = make_node (CPLUS_BINDING);
ee8fc32b 5754 tree initial = current_decl_namespace ();
ea9635c7
ML
5755 tree scope = initial;
5756 tree siter;
5757 struct binding_level *level;
5758 tree val = NULL_TREE;
5759
2c169bab
JM
5760 if (spacesp)
5761 *spacesp = NULL_TREE;
5762
5763 for (; !val; scope = CP_DECL_CONTEXT (scope))
ea9635c7 5764 {
2c169bab 5765 if (spacesp)
e1b3e07d 5766 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
ea9635c7
ML
5767 val = binding_for_name (name, scope);
5768
5769 /* Initialize binding for this context. */
5770 BINDING_VALUE (b) = BINDING_VALUE (val);
5771 BINDING_TYPE (b) = BINDING_TYPE (val);
5772
5773 /* Add all _DECLs seen through local using-directives. */
68642fb6 5774 for (level = current_binding_level;
ea9635c7
ML
5775 !level->namespace_p;
5776 level = level->level_chain)
52c11ef6 5777 if (!lookup_using_namespace (name, b, level->using_directives,
2c169bab 5778 scope, flags, spacesp))
ea9635c7 5779 /* Give up because of error. */
5b163de4 5780 return error_mark_node;
ea9635c7
ML
5781
5782 /* Add all _DECLs seen through global using-directives. */
5783 /* XXX local and global using lists should work equally. */
5784 siter = initial;
5785 while (1)
5786 {
68642fb6 5787 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
2c169bab 5788 scope, flags, spacesp))
ea9635c7 5789 /* Give up because of error. */
5b163de4 5790 return error_mark_node;
ea9635c7
ML
5791 if (siter == scope) break;
5792 siter = CP_DECL_CONTEXT (siter);
5793 }
5794
52c11ef6 5795 val = select_decl (b, flags);
ea9635c7
ML
5796 if (scope == global_namespace)
5797 break;
ea9635c7
ML
5798 }
5799 return val;
5800}
5801
52c11ef6
JM
5802/* Combine prefer_type and namespaces_only into flags. */
5803
5804static int
5805lookup_flags (prefer_type, namespaces_only)
5806 int prefer_type, namespaces_only;
5807{
5808 if (namespaces_only)
5809 return LOOKUP_PREFER_NAMESPACES;
5810 if (prefer_type > 1)
5811 return LOOKUP_PREFER_TYPES;
5812 if (prefer_type > 0)
5813 return LOOKUP_PREFER_BOTH;
5814 return 0;
5815}
5816
5817/* Given a lookup that returned VAL, use FLAGS to decide if we want to
5818 ignore it or not. Subroutine of lookup_name_real. */
5819
5820static tree
5821qualify_lookup (val, flags)
5822 tree val;
5823 int flags;
5824{
5825 if (val == NULL_TREE)
5826 return val;
6b945830
JM
5827 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5828 return val;
5829 if ((flags & LOOKUP_PREFER_TYPES)
5830 && (TREE_CODE (val) == TYPE_DECL
5831 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5832 && DECL_CLASS_TEMPLATE_P (val))))
5833 return val;
5834 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
52c11ef6
JM
5835 return NULL_TREE;
5836 return val;
5837}
5838
235f734d
MM
5839/* Any other BINDING overrides an implicit TYPENAME. Warn about
5840 that. */
5841
5842static void
5843warn_about_implicit_typename_lookup (typename, binding)
5844 tree typename;
5845 tree binding;
5846{
5847 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5848 tree name = DECL_NAME (typename);
5849
5850 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5851 && CLASSTYPE_TEMPLATE_INFO (subtype)
5852 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5853 && ! (TREE_CODE (binding) == TYPE_DECL
5854 && same_type_p (TREE_TYPE (binding), subtype)))
5855 {
68642fb6 5856 cp_warning ("lookup of `%D' finds `%#D'",
235f734d
MM
5857 name, binding);
5858 cp_warning (" instead of `%D' from dependent base class",
5859 typename);
5860 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5861 constructor_name (current_class_type), name);
5862 }
5863}
5864
8d08fdba
MS
5865/* Look up NAME in the current binding level and its superiors in the
5866 namespace of variables, functions and typedefs. Return a ..._DECL
5867 node of some kind representing its definition if there is only one
5868 such declaration, or return a TREE_LIST with all the overloaded
5869 definitions if there are many, or return 0 if it is undefined.
5870
2c73f9f5
ML
5871 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5872 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
a28e3c7f 5873 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
68642fb6 5874 Otherwise we prefer non-TYPE_DECLs.
f84b4be9
JM
5875
5876 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5877 using IDENTIFIER_CLASS_VALUE. */
8d08fdba 5878
824b9a4c 5879static tree
3e3f722c 5880lookup_name_real (name, prefer_type, nonclass, namespaces_only)
8d08fdba 5881 tree name;
3e3f722c 5882 int prefer_type, nonclass, namespaces_only;
8d08fdba 5883{
235f734d
MM
5884 tree t;
5885 tree val = NULL_TREE;
a28e3c7f 5886 int yylex = 0;
e1cd6e56 5887 tree from_obj = NULL_TREE;
52c11ef6 5888 int flags;
235f734d 5889 int val_is_implicit_typename = 0;
8d08fdba 5890
3e3f722c
ML
5891 /* Hack: copy flag set by parser, if set. */
5892 if (only_namespace_names)
5893 namespaces_only = 1;
52c11ef6 5894
a28e3c7f
MS
5895 if (prefer_type == -2)
5896 {
5897 extern int looking_for_typename;
fc378698 5898 tree type = NULL_TREE;
a28e3c7f
MS
5899
5900 yylex = 1;
5901 prefer_type = looking_for_typename;
e1cd6e56 5902
52c11ef6 5903 flags = lookup_flags (prefer_type, namespaces_only);
52c11ef6
JM
5904 /* If the next thing is '<', class templates are types. */
5905 if (looking_for_template)
5906 flags |= LOOKUP_TEMPLATES_EXPECTED;
5907
653cc74a 5908 /* std:: becomes :: for now. */
6bcedb4e 5909 if (got_scope && got_scope == fake_std_node)
653cc74a
JM
5910 got_scope = void_type_node;
5911
e1cd6e56
MS
5912 if (got_scope)
5913 type = got_scope;
dff6b454 5914 else if (got_object != error_mark_node)
e1cd6e56 5915 type = got_object;
68642fb6 5916
e1cd6e56 5917 if (type)
a28e3c7f 5918 {
e1cd6e56 5919 if (type == error_mark_node)
f376e137 5920 return error_mark_node;
a80e4195
MS
5921 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5922 type = TREE_TYPE (type);
5566b478 5923
2b9dc906
JM
5924 if (TYPE_P (type))
5925 type = complete_type (type);
5566b478 5926
a1774733 5927 if (TREE_CODE (type) == VOID_TYPE)
2c73f9f5
ML
5928 type = global_namespace;
5929 if (TREE_CODE (type) == NAMESPACE_DECL)
a9aedbc2 5930 {
87e3dbc9 5931 val = make_node (CPLUS_BINDING);
6ad07332 5932 flags |= LOOKUP_COMPLAIN;
52c11ef6 5933 if (!qualified_lookup_using_namespace (name, type, val, flags))
2c73f9f5 5934 return NULL_TREE;
52c11ef6 5935 val = select_decl (val, flags);
a9aedbc2 5936 }
5566b478 5937 else if (! IS_AGGR_TYPE (type)
5156628f 5938 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
a1281f45 5939 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
5156628f 5940 || TREE_CODE (type) == TYPENAME_TYPE)
e92cc029 5941 /* Someone else will give an error about this if needed. */
a28e3c7f 5942 val = NULL_TREE;
e1cd6e56 5943 else if (type == current_class_type)
a28e3c7f 5944 val = IDENTIFIER_CLASS_VALUE (name);
a28e3c7f 5945 else
70adf8a9
JM
5946 {
5947 val = lookup_member (type, name, 0, prefer_type);
5948 type_access_control (type, val);
e69c8072
JM
5949
5950 /* Restore the containing TYPENAME_TYPE if we looked
5951 through it before. */
5952 if (got_scope && got_scope != type
5953 && val && TREE_CODE (val) == TYPE_DECL
5954 && TREE_CODE (TREE_TYPE (val)) == TYPENAME_TYPE)
5955 TYPE_CONTEXT (TREE_TYPE (val)) = got_scope;
70adf8a9 5956 }
a28e3c7f 5957 }
e1cd6e56
MS
5958 else
5959 val = NULL_TREE;
5960
594740f3 5961 if (got_scope)
e1cd6e56 5962 goto done;
594740f3 5963 else if (got_object && val)
aca77bd1
JM
5964 {
5965 from_obj = val;
5966 val = NULL_TREE;
5967 }
a28e3c7f 5968 }
52c11ef6 5969 else
5b163de4
JM
5970 {
5971 flags = lookup_flags (prefer_type, namespaces_only);
5972 /* If we're not parsing, we need to complain. */
5973 flags |= LOOKUP_COMPLAIN;
5974 }
e76a2646 5975
d8f8dca1 5976 /* First, look in non-namespace scopes. */
6f1b4c42
JM
5977
5978 if (current_class_type == NULL_TREE)
5979 nonclass = 1;
5980
235f734d 5981 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
d8f8dca1 5982 {
235f734d
MM
5983 tree binding;
5984
5985 if (!LOCAL_BINDING_P (t) && nonclass)
d8f8dca1
MM
5986 /* We're not looking for class-scoped bindings, so keep going. */
5987 continue;
68642fb6 5988
d8f8dca1 5989 /* If this is the kind of thing we're looking for, we're done. */
235f734d
MM
5990 if (qualify_lookup (BINDING_VALUE (t), flags))
5991 binding = BINDING_VALUE (t);
68642fb6 5992 else if ((flags & LOOKUP_PREFER_TYPES)
235f734d
MM
5993 && qualify_lookup (BINDING_TYPE (t), flags))
5994 binding = BINDING_TYPE (t);
5995 else
5996 binding = NULL_TREE;
5997
70adf8a9
JM
5998 /* Handle access control on types from enclosing or base classes. */
5999 if (binding && ! yylex
6000 && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
6001 type_access_control (BINDING_LEVEL (t)->this_class, binding);
6002
235f734d 6003 if (binding
83233dca 6004 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
d8f8dca1 6005 {
235f734d
MM
6006 if (val_is_implicit_typename && !yylex)
6007 warn_about_implicit_typename_lookup (val, binding);
6008 val = binding;
68642fb6 6009 val_is_implicit_typename
83233dca 6010 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
235f734d
MM
6011 if (!val_is_implicit_typename)
6012 break;
d8f8dca1
MM
6013 }
6014 }
f181d4ae 6015
235f734d
MM
6016 /* Now lookup in namespace scopes. */
6017 if (!val || val_is_implicit_typename)
e76a2646 6018 {
2c169bab 6019 t = unqualified_namespace_lookup (name, flags, 0);
235f734d 6020 if (t)
c1def683 6021 {
235f734d
MM
6022 if (val_is_implicit_typename && !yylex)
6023 warn_about_implicit_typename_lookup (val, t);
6024 val = t;
c1def683
JM
6025 }
6026 }
6027
a28e3c7f 6028 done:
8d08fdba
MS
6029 if (val)
6030 {
c91a56d2 6031 /* This should only warn about types used in qualified-ids. */
e1cd6e56 6032 if (from_obj && from_obj != val)
5566b478 6033 {
c91a56d2
MS
6034 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
6035 && TREE_CODE (val) == TYPE_DECL
aca77bd1
JM
6036 && ! same_type_p (TREE_TYPE (from_obj), TREE_TYPE (val)))
6037 cp_pedwarn ("\
bd0d5d4a
JM
6038lookup of `%D' in the scope of `%#T' (`%#D') \
6039does not match lookup in the current scope (`%#D')",
6040 name, got_object, from_obj, val);
594740f3 6041
b8b1a3c1
JM
6042 /* We don't change val to from_obj if got_object depends on
6043 template parms because that breaks implicit typename for
6044 destructor calls. */
6045 if (! uses_template_parms (got_object))
53fdbb3b 6046 val = from_obj;
5566b478 6047 }
e1cd6e56 6048
0c64a9ca
JM
6049 /* If we have a single function from a using decl, pull it out. */
6050 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
6051 val = OVL_FUNCTION (val);
8d08fdba 6052 }
e1cd6e56
MS
6053 else if (from_obj)
6054 val = from_obj;
8d08fdba
MS
6055
6056 return val;
6057}
6058
700f8a87
MS
6059tree
6060lookup_name_nonclass (name)
6061 tree name;
6062{
3e3f722c 6063 return lookup_name_real (name, 0, 1, 0);
700f8a87
MS
6064}
6065
2c73f9f5
ML
6066tree
6067lookup_function_nonclass (name, args)
6068 tree name;
6069 tree args;
6070{
6071 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
6072}
6073
3e3f722c
ML
6074tree
6075lookup_name_namespace_only (name)
6076 tree name;
6077{
6078 /* type-or-namespace, nonclass, namespace_only */
6079 return lookup_name_real (name, 1, 1, 1);
6080}
6081
700f8a87
MS
6082tree
6083lookup_name (name, prefer_type)
6084 tree name;
6085 int prefer_type;
6086{
3e3f722c 6087 return lookup_name_real (name, prefer_type, 0, 0);
700f8a87
MS
6088}
6089
a7d2d407
MM
6090/* Similar to `lookup_name' but look only in the innermost non-class
6091 binding level. */
8d08fdba
MS
6092
6093tree
6094lookup_name_current_level (name)
6095 tree name;
6096{
a7d2d407
MM
6097 struct binding_level *b;
6098 tree t = NULL_TREE;
8d08fdba 6099
a7d2d407
MM
6100 b = current_binding_level;
6101 while (b->parm_flag == 2)
6102 b = b->level_chain;
6103
6104 if (b->namespace_p)
8d08fdba 6105 {
5fdaba89 6106 t = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
6107
6108 /* extern "C" function() */
6109 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
6110 t = TREE_VALUE (t);
6111 }
68642fb6 6112 else if (IDENTIFIER_BINDING (name)
f181d4ae 6113 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
8d08fdba 6114 {
a4443a08
MS
6115 while (1)
6116 {
f181d4ae
MM
6117 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6118 return IDENTIFIER_VALUE (name);
68642fb6 6119
9ed182dc
JM
6120 if (b->keep == 2)
6121 b = b->level_chain;
6122 else
6123 break;
6124 }
6125 }
6126
6127 return t;
6128}
6129
6130/* Like lookup_name_current_level, but for types. */
6131
6132tree
6133lookup_type_current_level (name)
6134 tree name;
6135{
6136 register tree t = NULL_TREE;
6137
6138 my_friendly_assert (! current_binding_level->namespace_p, 980716);
6139
6140 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6141 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6142 {
6143 struct binding_level *b = current_binding_level;
6144 while (1)
6145 {
6146 if (purpose_member (name, b->type_shadowed))
6147 return REAL_IDENTIFIER_TYPE_VALUE (name);
a4443a08
MS
6148 if (b->keep == 2)
6149 b = b->level_chain;
6150 else
6151 break;
6152 }
8d08fdba
MS
6153 }
6154
6155 return t;
6156}
3e3f722c
ML
6157
6158void
6159begin_only_namespace_names ()
6160{
6161 only_namespace_names = 1;
6162}
6163
6164void
6165end_only_namespace_names ()
6166{
6167 only_namespace_names = 0;
6168}
8d08fdba 6169\f
8d08fdba 6170/* Push the declarations of builtin types into the namespace.
0e5921e8 6171 RID_INDEX is the index of the builtin type
8d08fdba
MS
6172 in the array RID_POINTERS. NAME is the name used when looking
6173 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6174
eaa7c03f 6175void
8d08fdba
MS
6176record_builtin_type (rid_index, name, type)
6177 enum rid rid_index;
d8e178a0 6178 const char *name;
8d08fdba
MS
6179 tree type;
6180{
6181 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 6182 tree tdecl = NULL_TREE;
8d08fdba 6183
0e5921e8 6184 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
6185 rname = ridpointers[(int) rid_index];
6186 if (name)
6187 tname = get_identifier (name);
6188
6189 TYPE_BUILT_IN (type) = 1;
68642fb6 6190
8d08fdba
MS
6191 if (tname)
6192 {
8d08fdba 6193 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
8d08fdba 6194 set_identifier_type_value (tname, NULL_TREE);
0e5921e8 6195 if ((int) rid_index < (int) RID_MAX)
2c73f9f5
ML
6196 /* Built-in types live in the global namespace. */
6197 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba
MS
6198 }
6199 if (rname != NULL_TREE)
6200 {
6201 if (tname != NULL_TREE)
6202 {
6203 set_identifier_type_value (rname, NULL_TREE);
2c73f9f5 6204 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba
MS
6205 }
6206 else
6207 {
8d08fdba 6208 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
8d08fdba
MS
6209 set_identifier_type_value (rname, NULL_TREE);
6210 }
6211 }
8d08fdba
MS
6212}
6213
eff71ab0 6214/* Record one of the standard Java types.
4d8a1dd6
MM
6215 * Declare it as having the given NAME.
6216 * If SIZE > 0, it is the size of one of the integral types;
6217 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
6218
6219static tree
6220record_builtin_java_type (name, size)
d8e178a0 6221 const char *name;
eff71ab0
PB
6222 int size;
6223{
6224 tree type, decl;
6225 if (size > 0)
6226 type = make_signed_type (size);
6227 else if (size > -32)
6228 { /* "__java_char" or ""__java_boolean". */
6229 type = make_unsigned_type (-size);
6230 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6231 }
6232 else
6233 { /* "__java_float" or ""__java_double". */
6234 type = make_node (REAL_TYPE);
6235 TYPE_PRECISION (type) = - size;
6236 layout_type (type);
6237 }
0e5921e8 6238 record_builtin_type (RID_MAX, name, type);
eff71ab0 6239 decl = TYPE_NAME (type);
e229f2cd
PB
6240
6241 /* Suppress generate debug symbol entries for these types,
6242 since for normal C++ they are just clutter.
6243 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 6244 DECL_IGNORED_P (decl) = 1;
e229f2cd 6245
eff71ab0
PB
6246 TYPE_FOR_JAVA (type) = 1;
6247 return type;
6248}
6249
036407f7
ML
6250/* Push a type into the namespace so that the back-ends ignore it. */
6251
6252static void
6253record_unknown_type (type, name)
6254 tree type;
d8e178a0 6255 const char *name;
036407f7
ML
6256{
6257 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6258 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6259 DECL_IGNORED_P (decl) = 1;
6260 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6261 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6262 TYPE_ALIGN (type) = 1;
11cf4d18 6263 TYPE_USER_ALIGN (type) = 0;
036407f7 6264 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 6265}
036407f7 6266
d43829f9
MM
6267/* An string for which we should create an IDENTIFIER_NODE at
6268 startup. */
6269
6270typedef struct predefined_identifier
6271{
6272 /* The name of the identifier. */
6273 const char *name;
6274 /* The place where the IDENTIFIER_NODE should be stored. */
6275 tree *node;
298d6f60
MM
6276 /* Non-zero if this is the name of a constructor or destructor. */
6277 int ctor_or_dtor_p;
d43829f9
MM
6278} predefined_identifier;
6279
6280/* Create all the predefined identifiers. */
6281
6282static void
5362b086 6283initialize_predefined_identifiers ()
d43829f9
MM
6284{
6285 struct predefined_identifier *pid;
6286
6287 /* A table of identifiers to create at startup. */
6288 static predefined_identifier predefined_identifiers[] = {
298d6f60
MM
6289 { "C++", &lang_name_cplusplus, 0 },
6290 { "C", &lang_name_c, 0 },
6291 { "Java", &lang_name_java, 0 },
6292 { CTOR_NAME, &ctor_identifier, 1 },
6293 { "__base_ctor", &base_ctor_identifier, 1 },
6294 { "__comp_ctor", &complete_ctor_identifier, 1 },
6295 { DTOR_NAME, &dtor_identifier, 1 },
6296 { "__comp_dtor", &complete_dtor_identifier, 1 },
6297 { "__base_dtor", &base_dtor_identifier, 1 },
6298 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6299 { VTABLE_DELTA2_NAME, &delta2_identifier, 0 },
6300 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6301 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6302 { VTABLE_INDEX_NAME, &index_identifier, 0 },
6303 { "nelts", &nelts_identifier, 0 },
6304 { THIS_NAME, &this_identifier, 0 },
6305 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6306 { "__pfn_or_delta2", &pfn_or_delta2_identifier, 0 },
6307 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 6308 { "__vtt_parm", &vtt_parm_identifier, 0 },
1f6e1acc 6309 { "std", &std_identifier, 0 },
298d6f60 6310 { NULL, NULL, 0 }
d43829f9
MM
6311 };
6312
6313 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
6314 {
6315 *pid->node = get_identifier (pid->name);
6316 if (pid->ctor_or_dtor_p)
6317 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6318 }
d43829f9
MM
6319}
6320
8d08fdba
MS
6321/* Create the predefined scalar types of C,
6322 and some nodes representing standard constants (0, 1, (void *)0).
6323 Initialize the global binding level.
6324 Make definitions for built-in primitive functions. */
6325
6326void
6327init_decl_processing ()
6328{
8d08fdba 6329 tree fields[20];
8d08fdba 6330
5bb2a292
MM
6331 /* Check to see that the user did not specify an invalid combination
6332 of command-line options. */
1f84ec23
MM
6333 if (!flag_vtable_thunks)
6334 error ("the ABI requires vtable thunks");
5bb2a292 6335
d43829f9
MM
6336 /* Create all the identifiers we need. */
6337 initialize_predefined_identifiers ();
8d08fdba 6338
8f17b5c5 6339 /* Fill in back-end hooks. */
a8f73d4b
MM
6340 init_lang_status = &push_cp_function_context;
6341 free_lang_status = &pop_cp_function_context;
b4b8bee7 6342 mark_lang_status = &mark_cp_function_context;
8f17b5c5 6343 lang_safe_from_p = &c_safe_from_p;
0a7394bc 6344 lang_dump_tree = &cp_dump_tree;
d363e7bf 6345 lang_missing_noreturn_ok_p = &cp_missing_noreturn_ok_p;
99dccabc 6346
fc6af6e3
RH
6347 cp_parse_init ();
6348 init_decl2 ();
9cd64686 6349 init_pt ();
fc6af6e3 6350
9cd64686
MM
6351 /* Create the global variables. */
6352 push_to_top_level ();
8012c983 6353
2c73f9f5 6354 /* Enter the global namespace. */
30394414 6355 my_friendly_assert (global_namespace == NULL_TREE, 375);
30394414
JM
6356 push_namespace (get_identifier ("::"));
6357 global_namespace = current_namespace;
6358 current_lang_name = NULL_TREE;
6359
bccd95ae 6360 /* Adjust various flags based on command-line settings. */
2642b9bf
JM
6361 if (! flag_permissive && ! pedantic)
6362 flag_pedantic_errors = 1;
bccd95ae 6363 if (!flag_no_inline)
b850de4f
MM
6364 {
6365 flag_inline_trees = 1;
6366 flag_no_inline = 1;
6367 }
830fcda8 6368
8d08fdba
MS
6369 /* Initially, C. */
6370 current_lang_name = lang_name_c;
6371
6372 current_function_decl = NULL_TREE;
8d08fdba
MS
6373 current_binding_level = NULL_BINDING_LEVEL;
6374 free_binding_level = NULL_BINDING_LEVEL;
6375
81b3411c
BS
6376 build_common_tree_nodes (flag_signed_char);
6377
8d08fdba
MS
6378 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6379 TREE_TYPE (error_mark_list) = error_mark_node;
6380
a28e3c7f
MS
6381 /* Make the binding_level structure for global names. */
6382 pushlevel (0);
8d08fdba 6383 global_binding_level = current_binding_level;
2c73f9f5
ML
6384 /* The global level is the namespace level of ::. */
6385 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6386 declare_namespace_level ();
8d08fdba 6387
6bcedb4e
MM
6388 /* Create the `std' namespace. */
6389 if (flag_honor_std)
6390 {
6391 push_namespace (std_identifier);
6392 std_node = current_namespace;
6393 pop_namespace ();
6394 fake_std_node = error_mark_node;
6395 }
6396 else
6397 {
6398 fake_std_node = build_decl (NAMESPACE_DECL,
6399 std_identifier,
6400 void_type_node);
6401 pushdecl (fake_std_node);
6402 }
5362b086 6403
eaa7c03f 6404 c_common_nodes_and_builtins ();
37c46b43 6405
4d8a1dd6
MM
6406 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6407 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6408 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6409 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6410 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6411 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6412 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6413 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 6414
8d08fdba
MS
6415 integer_two_node = build_int_2 (2, 0);
6416 TREE_TYPE (integer_two_node) = integer_type_node;
6417 integer_three_node = build_int_2 (3, 0);
6418 TREE_TYPE (integer_three_node) = integer_type_node;
8d08fdba 6419
255512c1
JM
6420 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6421 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
c1ea6a0b
BK
6422 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6423 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6424 TYPE_PRECISION (boolean_type_node) = 1;
255512c1
JM
6425 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6426 boolean_false_node = build_int_2 (0, 0);
6427 TREE_TYPE (boolean_false_node) = boolean_type_node;
6428 boolean_true_node = build_int_2 (1, 0);
6429 TREE_TYPE (boolean_true_node) = boolean_type_node;
2986ae00 6430
ff0bee63 6431 signed_size_zero_node = build_int_2 (0, 0);
e92cc029
MS
6432 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6433
4cc1d462 6434 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
6435
6436#if 0
6437 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6438#endif
6439
1f84ec23
MM
6440 delta_type_node = ptrdiff_type_node;
6441 vtable_index_type = ptrdiff_type_node;
c7e266a6 6442
3ec6bad3 6443 vtt_parm_type = build_pointer_type (const_ptr_type_node);
356955cf 6444 lang_type_promotes_to = convert_type_from_ellipsis;
7f4edbcb 6445
824b9a4c 6446 void_ftype_ptr
4cc1d462 6447 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 6448
8d08fdba
MS
6449 /* C++ extensions */
6450
6451 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
6452 record_unknown_type (unknown_type_node, "unknown type");
6453
8d08fdba
MS
6454 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6455 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 6456
03d0f4af 6457 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
a6967cc0
JM
6458
6459 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6460 result. */
8d08fdba
MS
6461 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6462 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6463
8926095f 6464 if (flag_vtable_thunks)
700f8a87
MS
6465 {
6466 /* Make sure we get a unique function type, so we can give
6467 its pointer type a name. (This wins for gdb.) */
6468 tree vfunc_type = make_node (FUNCTION_TYPE);
6469 TREE_TYPE (vfunc_type) = integer_type_node;
6470 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6471 layout_type (vfunc_type);
6472
6473 vtable_entry_type = build_pointer_type (vfunc_type);
6474 }
8926095f 6475 else
700f8a87 6476 {
33848bb0 6477 vtable_entry_type = make_aggr_type (RECORD_TYPE);
721c3b42
MM
6478 fields[0] = build_decl (FIELD_DECL, delta_identifier,
6479 delta_type_node);
6480 fields[1] = build_decl (FIELD_DECL, index_identifier,
6481 delta_type_node);
6482 fields[2] = build_decl (FIELD_DECL, pfn_identifier,
6483 ptr_type_node);
700f8a87
MS
6484 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6485 double_type_node);
6486
6487 /* Make this part of an invisible union. */
6488 fields[3] = copy_node (fields[2]);
6489 TREE_TYPE (fields[3]) = delta_type_node;
6490 DECL_NAME (fields[3]) = delta2_identifier;
6491 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6492 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
06ceef4e 6493 DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
700f8a87
MS
6494 TREE_UNSIGNED (fields[3]) = 0;
6495 TREE_CHAIN (fields[2]) = fields[3];
91063b51
MM
6496 vtable_entry_type = build_qualified_type (vtable_entry_type,
6497 TYPE_QUAL_CONST);
700f8a87 6498 }
0e5921e8 6499 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 6500
8d08fdba 6501 vtbl_type_node
52bf7d5d 6502 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 6503 layout_type (vtbl_type_node);
91063b51 6504 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
0e5921e8 6505 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
849da744
MM
6506 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6507 layout_type (vtbl_ptr_type_node);
0e5921e8 6508 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
8d08fdba 6509
1f84ec23
MM
6510 push_namespace (get_identifier ("__cxxabiv1"));
6511 abi_node = current_namespace;
6512 pop_namespace ();
6633d636 6513
2c73f9f5 6514 global_type_node = make_node (LANG_TYPE);
036407f7 6515 record_unknown_type (global_type_node, "global type");
2c73f9f5 6516
db5ae43f
MS
6517 /* Now, C++. */
6518 current_lang_name = lang_name_cplusplus;
8d08fdba 6519
ced78d8b 6520 {
2c73f9f5 6521 tree bad_alloc_type_node, newtype, deltype;
0ba8a114 6522
2c73f9f5 6523 if (flag_honor_std)
6bcedb4e 6524 push_namespace (std_identifier);
2c73f9f5 6525 bad_alloc_type_node = xref_tag
ca107ded 6526 (class_type_node, get_identifier ("bad_alloc"), 1);
2c73f9f5
ML
6527 if (flag_honor_std)
6528 pop_namespace ();
6529 newtype = build_exception_variant
0ba8a114
NS
6530 (ptr_ftype_sizetype, add_exception_specifier
6531 (NULL_TREE, bad_alloc_type_node, -1));
4cc1d462 6532 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
6533 push_cp_library_fn (NEW_EXPR, newtype);
6534 push_cp_library_fn (VEC_NEW_EXPR, newtype);
6535 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
6536 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 6537 }
8d08fdba
MS
6538
6539 abort_fndecl
1f84ec23 6540 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 6541
8d08fdba
MS
6542 /* Perform other language dependent initializations. */
6543 init_class_processing ();
6544 init_init_processing ();
6545 init_search_processing ();
db48b831 6546 init_rtti_processing ();
8d08fdba 6547
6467930b 6548 if (flag_exceptions)
8d2733ca 6549 init_exception_processing ();
8d08fdba
MS
6550 if (flag_no_inline)
6551 {
6552 flag_inline_functions = 0;
8d08fdba 6553 }
9e9ff709 6554
7fcdf4c2 6555 if (! supports_one_only ())
72b7eeff 6556 flag_weak = 0;
8d08fdba 6557
2ce07e2d 6558 make_fname_decl = cp_make_fname_decl;
0ba8a114 6559 start_fname_decls ();
8d08fdba
MS
6560
6561 /* Prepare to check format strings against argument lists. */
6562 init_function_format_info ();
e9a25f70
JL
6563
6564 /* Show we use EH for cleanups. */
6565 using_eh_for_cleanups ();
62c154ed 6566
e5dc5fb2 6567 valid_lang_attribute = cp_valid_lang_attribute;
d9cf7c82
JM
6568
6569 /* Maintain consistency. Perhaps we should just complain if they
6570 say -fwritable-strings? */
6571 if (flag_writable_strings)
6572 flag_const_strings = 0;
fc6af6e3
RH
6573
6574 /* Add GC roots for all of our global variables. */
6575 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6576 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
fc6af6e3
RH
6577 ggc_add_tree_root (&integer_three_node, 1);
6578 ggc_add_tree_root (&integer_two_node, 1);
fc6af6e3 6579 ggc_add_tree_root (&signed_size_zero_node, 1);
fc6af6e3
RH
6580 ggc_add_tree_root (&size_one_node, 1);
6581 ggc_add_tree_root (&size_zero_node, 1);
fc6af6e3
RH
6582 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6583 mark_binding_level);
9cd64686 6584 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
fc6af6e3
RH
6585 ggc_add_tree_root (&static_ctors, 1);
6586 ggc_add_tree_root (&static_dtors, 1);
9cd64686 6587 ggc_add_tree_root (&lastiddecl, 1);
fc6af6e3 6588
fc6af6e3
RH
6589 ggc_add_tree_root (&last_function_parm_tags, 1);
6590 ggc_add_tree_root (&current_function_return_value, 1);
fc6af6e3 6591 ggc_add_tree_root (&current_function_parm_tags, 1);
9cd64686 6592 ggc_add_tree_root (&last_function_parms, 1);
fc6af6e3 6593 ggc_add_tree_root (&error_mark_list, 1);
9cd64686 6594
fc6af6e3 6595 ggc_add_tree_root (&global_namespace, 1);
fc6af6e3
RH
6596 ggc_add_tree_root (&global_type_node, 1);
6597 ggc_add_tree_root (&anonymous_namespace_name, 1);
9cd64686
MM
6598
6599 ggc_add_tree_root (&got_object, 1);
6600 ggc_add_tree_root (&got_scope, 1);
6601
6602 ggc_add_tree_root (&current_lang_name, 1);
6603 ggc_add_tree_root (&static_aggregates, 1);
4890c2f4 6604 ggc_add_tree_root (&free_bindings, 1);
62c154ed
JM
6605}
6606
0ba8a114
NS
6607/* Generate an initializer for a function naming variable from
6608 NAME. NAME may be NULL, in which case we generate a special
6609 ERROR_MARK node which should be replaced later. */
6610
6611tree
6612cp_fname_init (name)
6613 const char *name;
6614{
6615 tree domain = NULL_TREE;
6616 tree type;
6617 tree init = NULL_TREE;
6618 size_t length = 0;
6619
6620 if (name)
6621 {
6622 length = strlen (name);
6623 domain = build_index_type (size_int (length));
6624 init = build_string (length + 1, name);
6625 }
6626
6627 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
6628 type = build_cplus_array_type (type, domain);
6629
6630 if (init)
6631 TREE_TYPE (init) = type;
6632 else
6633 /* We don't know the value until instantiation time. Make
6634 something which will be digested now, but replaced later. */
6635 init = build (ERROR_MARK, type);
6636
6637 return init;
6638}
6639
2ce07e2d
NS
6640/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6641 decl, NAME is the initialization string and TYPE_DEP indicates whether
6642 NAME depended on the type of the function. We make use of that to detect
0ba8a114
NS
6643 __PRETTY_FUNCTION__ inside a template fn. This is being done
6644 lazily at the point of first use, so we musn't push the decl now. */
2ce07e2d
NS
6645
6646static tree
0ba8a114 6647cp_make_fname_decl (id, type_dep)
2ce07e2d 6648 tree id;
2ce07e2d
NS
6649 int type_dep;
6650{
0ba8a114
NS
6651 const char *name = (type_dep && processing_template_decl
6652 ? NULL : fname_as_string (type_dep));
6653 tree init = cp_fname_init (name);
6654 tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init));
2ce07e2d 6655
0ba8a114
NS
6656 /* As we don't push the decl here, we must set the context. */
6657 DECL_CONTEXT (decl) = current_function_decl;
6658 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
6659
2ce07e2d
NS
6660 TREE_STATIC (decl) = 1;
6661 TREE_READONLY (decl) = 1;
2ce07e2d 6662 DECL_ARTIFICIAL (decl) = 1;
2ce07e2d 6663 DECL_INITIAL (decl) = init;
0ba8a114
NS
6664
6665 TREE_USED (decl) = 1;
5362b086 6666
0ba8a114
NS
6667 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6668
2ce07e2d
NS
6669 return decl;
6670}
6671
0c11ada6
JM
6672/* Entry point for the benefit of c_common_nodes_and_builtins.
6673
6674 Make a definition for a builtin function named NAME and whose data type
8d08fdba 6675 is TYPE. TYPE should be a function type with argument types.
8d08fdba 6676
0c11ada6
JM
6677 CLASS and CODE tell later passes how to compile calls to this function.
6678 See tree.h for possible values.
6679
6680 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
8d08fdba
MS
6681 the name to be called if we can't opencode the function. */
6682
6683tree
0c11ada6 6684builtin_function (name, type, code, class, libname)
d8e178a0 6685 const char *name;
8d08fdba 6686 tree type;
0c11ada6
JM
6687 int code;
6688 enum built_in_class class;
6689 const char *libname;
8d08fdba 6690{
596ea4e5 6691 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6692 DECL_BUILT_IN_CLASS (decl) = class;
6693 DECL_FUNCTION_CODE (decl) = code;
12a22e76 6694
2c73f9f5 6695 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
2c73f9f5 6696
6bcedb4e
MM
6697 /* All builtins that don't begin with an `_' should go in the `std'
6698 namespace. */
5362b086 6699 if (flag_honor_std && name[0] != '_')
6bcedb4e
MM
6700 {
6701 push_namespace (std_identifier);
6702 DECL_CONTEXT (decl) = std_node;
6703 }
6704 pushdecl (decl);
6705 if (flag_honor_std && name[0] != '_')
6706 pop_namespace ();
6707
8d08fdba
MS
6708 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6709 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6710 function in the namespace. */
0c11ada6 6711 if (libname)
92643fea
MM
6712 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
6713 make_decl_rtl (decl, NULL);
935d1834
ZW
6714
6715 /* Warn if a function in the namespace for users
6716 is used without an occasion to consider it declared. */
6717 if (name[0] != '_' || name[1] != '_')
6718 DECL_ANTICIPATED (decl) = 1;
6719
8d08fdba
MS
6720 return decl;
6721}
7f4edbcb 6722
0c11ada6
JM
6723/* Generate a FUNCTION_DECL with the typical flags for a runtime library
6724 function. Not called directly. */
6725
6726static tree
596ea4e5 6727build_library_fn_1 (name, operator_code, type)
0c11ada6 6728 tree name;
596ea4e5 6729 enum tree_code operator_code;
0c11ada6
JM
6730 tree type;
6731{
6732 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6733 DECL_EXTERNAL (fn) = 1;
6734 TREE_PUBLIC (fn) = 1;
6735 DECL_ARTIFICIAL (fn) = 1;
6736 TREE_NOTHROW (fn) = 1;
596ea4e5 6737 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 6738 SET_DECL_LANGUAGE (fn, lang_c);
0c11ada6
JM
6739 return fn;
6740}
c2a37c55 6741
0c11ada6
JM
6742/* Returns the _DECL for a library function with C linkage.
6743 We assume that such functions never throw; if this is incorrect,
6744 callers should unset TREE_NOTHROW. */
c2a37c55 6745
7f4edbcb 6746tree
0c11ada6
JM
6747build_library_fn (name, type)
6748 tree name;
6749 tree type;
6750{
19e7881c 6751 return build_library_fn_1 (name, ERROR_MARK, type);
0c11ada6
JM
6752}
6753
6754/* Returns the _DECL for a library function with C++ linkage. */
6755
596ea4e5
AS
6756static tree
6757build_cp_library_fn (name, operator_code, type)
0c11ada6 6758 tree name;
596ea4e5 6759 enum tree_code operator_code;
0c11ada6
JM
6760 tree type;
6761{
596ea4e5 6762 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 6763 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 6764 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 6765 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6 6766 set_mangled_name_for_decl (fn);
0c11ada6
JM
6767 return fn;
6768}
6769
6770/* Like build_library_fn, but takes a C string instead of an
6771 IDENTIFIER_NODE. */
6772
6773tree
6774build_library_fn_ptr (name, type)
7f4edbcb
BS
6775 const char *name;
6776 tree type;
7f4edbcb 6777{
0c11ada6
JM
6778 return build_library_fn (get_identifier (name), type);
6779}
6780
6781/* Like build_cp_library_fn, but takes a C string instead of an
6782 IDENTIFIER_NODE. */
6783
6784tree
6785build_cp_library_fn_ptr (name, type)
6786 const char *name;
6787 tree type;
6788{
596ea4e5 6789 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6790}
6791
6792/* Like build_library_fn, but also pushes the function so that we will
6793 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
6794
6795tree
6796push_library_fn (name, type)
6797 tree name, type;
6798{
6799 tree fn = build_library_fn (name, type);
6800 pushdecl_top_level (fn);
6801 return fn;
6802}
6803
6804/* Like build_cp_library_fn, but also pushes the function so that it
6805 will be found by normal lookup. */
6806
596ea4e5
AS
6807static tree
6808push_cp_library_fn (operator_code, type)
6809 enum tree_code operator_code;
0c11ada6
JM
6810 tree type;
6811{
5362b086 6812 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
6813 operator_code,
6814 type);
0c11ada6
JM
6815 pushdecl (fn);
6816 return fn;
6817}
6818
6819/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6820 a FUNCTION_TYPE. */
6821
6822tree
6823push_void_library_fn (name, parmtypes)
6824 tree name, parmtypes;
6825{
6826 tree type = build_function_type (void_type_node, parmtypes);
6827 return push_library_fn (name, type);
6828}
6829
cf74fb86 6830/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
6831 and does not return. Used for __throw_foo and the like. */
6832
6833tree
cf74fb86
JM
6834push_throw_library_fn (name, type)
6835 tree name, type;
0c11ada6 6836{
cf74fb86 6837 tree fn = push_library_fn (name, type);
0c11ada6
JM
6838 TREE_THIS_VOLATILE (fn) = 1;
6839 TREE_NOTHROW (fn) = 0;
6840 return fn;
7f4edbcb 6841}
8d08fdba 6842\f
61a127b3
MM
6843/* When we call finish_struct for an anonymous union, we create
6844 default copy constructors and such. But, an anonymous union
6845 shouldn't have such things; this function undoes the damage to the
6846 anonymous union type T.
6847
6848 (The reason that we create the synthesized methods is that we don't
6849 distinguish `union { int i; }' from `typedef union { int i; } U'.
6850 The first is an anonymous union; the second is just an ordinary
6851 union type.) */
6852
6853void
6bdb8141 6854fixup_anonymous_aggr (t)
61a127b3
MM
6855 tree t;
6856{
6857 tree *q;
6858
6859 /* Wipe out memory of synthesized methods */
6860 TYPE_HAS_CONSTRUCTOR (t) = 0;
6861 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6862 TYPE_HAS_INIT_REF (t) = 0;
6863 TYPE_HAS_CONST_INIT_REF (t) = 0;
6864 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
6865 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6866
6867 /* Splice the implicitly generated functions out of the TYPE_METHODS
6868 list. */
6869 q = &TYPE_METHODS (t);
6870 while (*q)
6871 {
6872 if (DECL_ARTIFICIAL (*q))
6873 *q = TREE_CHAIN (*q);
6874 else
6875 q = &TREE_CHAIN (*q);
6876 }
6877
cab1f180 6878 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 6879 if (TYPE_METHODS (t))
1f0d71c5 6880 cp_error_at ("an anonymous union cannot have function members", t);
a1c2b86d
JJ
6881
6882 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
6883 assignment operators (because they cannot have these methods themselves).
6884 For anonymous unions this is already checked because they are not allowed
6885 in any union, otherwise we have to check it. */
6886 if (TREE_CODE (t) != UNION_TYPE)
6887 {
6888 tree field, type;
6889
6890 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
6891 if (TREE_CODE (field) == FIELD_DECL)
6892 {
6893 type = TREE_TYPE (field);
6894 if (CLASS_TYPE_P (type))
6895 {
6896 if (TYPE_NEEDS_CONSTRUCTING (type))
6897 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
6898 field);
6899 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6900 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
6901 field);
6902 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
6903 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
6904 field);
6905 }
6906 }
6907 }
61a127b3
MM
6908}
6909
72a93143
JM
6910/* Make sure that a declaration with no declarator is well-formed, i.e.
6911 just defines a tagged type or anonymous union.
8d08fdba 6912
72a93143 6913 Returns the type defined, if any. */
8d08fdba 6914
72a93143
JM
6915tree
6916check_tag_decl (declspecs)
8d08fdba
MS
6917 tree declspecs;
6918{
72a93143 6919 int found_type = 0;
2bdb0643 6920 int saw_friend = 0;
e8186ecf 6921 int saw_typedef = 0;
2986ae00 6922 tree ob_modifier = NULL_TREE;
8d08fdba 6923 register tree link;
8d08fdba
MS
6924 register tree t = NULL_TREE;
6925
6926 for (link = declspecs; link; link = TREE_CHAIN (link))
6927 {
6928 register tree value = TREE_VALUE (link);
6929
2bdb0643 6930 if (TYPE_P (value)
bd0d5d4a 6931 || TREE_CODE (value) == TYPE_DECL
2bdb0643
JM
6932 || (TREE_CODE (value) == IDENTIFIER_NODE
6933 && IDENTIFIER_GLOBAL_VALUE (value)
bd0d5d4a 6934 && TREE_CODE (IDENTIFIER_GLOBAL_VALUE (value)) == TYPE_DECL))
8d08fdba 6935 {
72a93143 6936 ++found_type;
5566b478 6937
bd0d5d4a
JM
6938 if (found_type == 2 && TREE_CODE (value) == IDENTIFIER_NODE)
6939 {
6940 if (! in_system_header)
6941 cp_pedwarn ("redeclaration of C++ built-in type `%T'", value);
6942 return NULL_TREE;
6943 }
6944
6945 if (TYPE_P (value)
6946 && ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
6947 || TREE_CODE (value) == ENUMERAL_TYPE))
72a93143
JM
6948 {
6949 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6950 t = value;
6951 }
8d08fdba 6952 }
e8186ecf
GDR
6953 else if (value == ridpointers[(int) RID_TYPEDEF])
6954 saw_typedef = 1;
83f660b7
JM
6955 else if (value == ridpointers[(int) RID_FRIEND])
6956 {
83f660b7
JM
6957 if (current_class_type == NULL_TREE
6958 || current_scope () != current_class_type)
6959 ob_modifier = value;
2bdb0643
JM
6960 else
6961 saw_friend = 1;
83f660b7 6962 }
8d08fdba 6963 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
6964 || value == ridpointers[(int) RID_EXTERN]
6965 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
6966 || value == ridpointers[(int) RID_REGISTER]
6967 || value == ridpointers[(int) RID_INLINE]
6968 || value == ridpointers[(int) RID_VIRTUAL]
72a93143
JM
6969 || value == ridpointers[(int) RID_CONST]
6970 || value == ridpointers[(int) RID_VOLATILE]
28cbf42c 6971 || value == ridpointers[(int) RID_EXPLICIT])
2986ae00 6972 ob_modifier = value;
8d08fdba
MS
6973 }
6974
72a93143
JM
6975 if (found_type > 1)
6976 error ("multiple types in one declaration");
7e2067ca 6977
2bdb0643 6978 if (t == NULL_TREE && ! saw_friend)
7e2067ca 6979 pedwarn ("declaration does not declare anything");
0dd3962d 6980
1951a1b6 6981 /* Check for an anonymous union. */
6bdb8141 6982 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
1951a1b6 6983 && TYPE_ANONYMOUS_P (t))
0dd3962d 6984 {
e8186ecf
GDR
6985 /* 7/3 In a simple-declaration, the optional init-declarator-list
6986 can be omitted only when declaring a class (clause 9) or
6987 enumeration (7.2), that is, when the decl-specifier-seq contains
6988 either a class-specifier, an elaborated-type-specifier with
6989 a class-key (9.1), or an enum-specifier. In these cases and
6990 whenever a class-specifier or enum-specifier is present in the
6991 decl-specifier-seq, the identifiers in these specifiers are among
6992 the names being declared by the declaration (as class-name,
6993 enum-names, or enumerators, depending on the syntax). In such
6994 cases, and except for the declaration of an unnamed bit-field (9.6),
6995 the decl-specifier-seq shall introduce one or more names into the
6996 program, or shall redeclare a name introduced by a previous
6997 declaration. [Example:
6998 enum { }; // ill-formed
6999 typedef class { }; // ill-formed
7000 --end example] */
7001 if (saw_typedef)
7002 {
7003 error ("Missing type-name in typedef-declaration.");
7004 return NULL_TREE;
7005 }
0dd3962d 7006 /* Anonymous unions are objects, so they can have specifiers. */;
6bdb8141
JM
7007 SET_ANON_AGGR_TYPE_P (t);
7008
7009 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
7010 pedwarn ("ISO C++ prohibits anonymous structs");
0dd3962d
JM
7011 }
7012
83f660b7 7013 else if (ob_modifier)
8d08fdba 7014 {
83f660b7
JM
7015 if (ob_modifier == ridpointers[(int) RID_INLINE]
7016 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
7017 cp_error ("`%D' can only be specified for functions", ob_modifier);
7018 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
7019 cp_error ("`%D' can only be specified inside a class", ob_modifier);
7020 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
7021 cp_error ("`%D' can only be specified for constructors",
7022 ob_modifier);
7023 else
7024 cp_error ("`%D' can only be specified for objects and functions",
7025 ob_modifier);
72a93143 7026 }
8d08fdba 7027
72a93143
JM
7028 return t;
7029}
7030
7031/* Called when a declaration is seen that contains no names to declare.
7032 If its type is a reference to a structure, union or enum inherited
7033 from a containing scope, shadow that tag name for the current scope
7034 with a forward reference.
7035 If its type defines a new named structure or union
7036 or defines an enum, it is valid but we need not do anything here.
7037 Otherwise, it is an error.
7038
7039 C++: may have to grok the declspecs to learn about static,
7040 complain for anonymous unions. */
7041
7042void
7043shadow_tag (declspecs)
7044 tree declspecs;
7045{
7046 tree t = check_tag_decl (declspecs);
7047
7048 if (t)
7049 maybe_process_partial_specialization (t);
7050
7051 /* This is where the variables in an anonymous union are
7052 declared. An anonymous union declaration looks like:
7053 union { ... } ;
7054 because there is no declarator after the union, the parser
7055 sends that declaration here. */
6bdb8141 7056 if (t && ANON_AGGR_TYPE_P (t))
72a93143 7057 {
6bdb8141 7058 fixup_anonymous_aggr (t);
72a93143
JM
7059
7060 if (TYPE_FIELDS (t))
7061 {
7062 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
7063 NULL_TREE);
7064 finish_anon_union (decl);
7065 }
8d08fdba
MS
7066 }
7067}
7068\f
7069/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
7070
7071tree
7072groktypename (typename)
7073 tree typename;
7074{
7075 if (TREE_CODE (typename) != TREE_LIST)
7076 return typename;
7077 return grokdeclarator (TREE_VALUE (typename),
7078 TREE_PURPOSE (typename),
c11b6f21 7079 TYPENAME, 0, NULL_TREE);
8d08fdba
MS
7080}
7081
7082/* Decode a declarator in an ordinary declaration or data definition.
7083 This is called as soon as the type information and variable name
7084 have been parsed, before parsing the initializer if any.
7085 Here we create the ..._DECL node, fill in its type,
7086 and put it on the list of decls for the current context.
7087 The ..._DECL node is returned as the value.
7088
7089 Exception: for arrays where the length is not specified,
82580166 7090 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
7091
7092 Function definitions do not come here; they go to start_function
7093 instead. However, external and forward declarations of functions
7094 do go through here. Structure field declarations are done by
7095 grokfield and not through here. */
7096
8d08fdba 7097tree
a1774733 7098start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
8d08fdba
MS
7099 tree declarator, declspecs;
7100 int initialized;
a1774733 7101 tree attributes, prefix_attributes;
8d08fdba
MS
7102{
7103 register tree decl;
7104 register tree type, tem;
7105 tree context;
7106 extern int have_extern_spec;
7107 extern int used_extern_spec;
b17e2870 7108 tree attrlist;
8d08fdba 7109
5566b478
MS
7110#if 0
7111 /* See code below that used this. */
8d08fdba 7112 int init_written = initialized;
5566b478 7113#endif
8d08fdba 7114
e92cc029 7115 /* This should only be done once on the top most decl. */
8d08fdba
MS
7116 if (have_extern_spec && !used_extern_spec)
7117 {
1f8f4a0b
MM
7118 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"),
7119 declspecs);
8d08fdba
MS
7120 used_extern_spec = 1;
7121 }
7122
b17e2870 7123 if (attributes || prefix_attributes)
051e6fd7 7124 attrlist = build_tree_list (attributes, prefix_attributes);
b17e2870
JM
7125 else
7126 attrlist = NULL_TREE;
7127
c11b6f21 7128 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
b17e2870 7129 attrlist);
68642fb6 7130
a1774733 7131 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
7132 return NULL_TREE;
7133
7134 type = TREE_TYPE (decl);
7135
44689c12
ML
7136 if (type == error_mark_node)
7137 return NULL_TREE;
7138
4f1c5b7d 7139 context = DECL_CONTEXT (decl);
8d08fdba 7140
9a68c51f
JM
7141 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7142 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7143 {
7144 /* When parsing the initializer, lookup should use the object's
7145 namespace. */
7146 push_decl_namespace (context);
7147 }
7148
2c73f9f5
ML
7149 /* We are only interested in class contexts, later. */
7150 if (context && TREE_CODE (context) == NAMESPACE_DECL)
7151 context = NULL_TREE;
7152
8d08fdba
MS
7153 if (initialized)
7154 /* Is it valid for this decl to have an initializer at all?
7155 If not, set INITIALIZED to zero, which will indirectly
82580166 7156 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
7157 switch (TREE_CODE (decl))
7158 {
7159 case TYPE_DECL:
7160 /* typedef foo = bar means give foo the same type as bar.
82580166 7161 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
8d08fdba
MS
7162 Any other case of an initialization in a TYPE_DECL is an error. */
7163 if (pedantic || list_length (declspecs) > 1)
7164 {
8251199e 7165 cp_error ("typedef `%D' is initialized", decl);
8d08fdba
MS
7166 initialized = 0;
7167 }
7168 break;
7169
7170 case FUNCTION_DECL:
8251199e 7171 cp_error ("function `%#D' is initialized like a variable", decl);
8d08fdba
MS
7172 initialized = 0;
7173 break;
7174
7175 default:
3e41d13b 7176 break;
8d08fdba
MS
7177 }
7178
8d08fdba
MS
7179 if (initialized)
7180 {
a9aedbc2 7181 if (! toplevel_bindings_p ()
8d08fdba 7182 && DECL_EXTERNAL (decl))
8251199e 7183 cp_warning ("declaration of `%#D' has `extern' and is initialized",
8d08fdba
MS
7184 decl);
7185 DECL_EXTERNAL (decl) = 0;
5566b478 7186 if (toplevel_bindings_p ())
8d08fdba
MS
7187 TREE_STATIC (decl) = 1;
7188
7189 /* Tell `pushdecl' this is an initialized decl
7190 even though we don't yet have the initializer expression.
82580166 7191 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
7192 DECL_INITIAL (decl) = error_mark_node;
7193 }
7194
fa20888b
MK
7195#ifdef SET_DEFAULT_DECL_ATTRIBUTES
7196 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7197#endif
68642fb6 7198
fa20888b
MK
7199 /* Set attributes here so if duplicate decl, will have proper attributes. */
7200 cplus_decl_attributes (decl, attributes, prefix_attributes);
7201
d0f062fb 7202 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68 7203 {
6b400b21 7204 push_nested_class (context, 2);
e97e5263 7205
5b605f68
MS
7206 if (TREE_CODE (decl) == VAR_DECL)
7207 {
7208 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7209 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
8251199e 7210 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
e349ee73
MS
7211 else
7212 {
7213 if (DECL_CONTEXT (field) != context)
f2d773a2 7214 {
cb9a3ff8 7215 cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
f2d773a2
JM
7216 DECL_CONTEXT (field), DECL_NAME (decl),
7217 context, DECL_NAME (decl));
7218 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7219 }
75650646
MM
7220 /* Static data member are tricky; an in-class initialization
7221 still doesn't provide a definition, so the in-class
7222 declaration will have DECL_EXTERNAL set, but will have an
7223 initialization. Thus, duplicate_decls won't warn
7224 about this situation, and so we check here. */
7225 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
8251199e 7226 cp_error ("duplicate initialization of %D", decl);
e349ee73
MS
7227 if (duplicate_decls (decl, field))
7228 decl = field;
7229 }
5b605f68 7230 }
f30432d7
MS
7231 else
7232 {
5566b478 7233 tree field = check_classfn (context, decl);
f30432d7
MS
7234 if (field && duplicate_decls (decl, field))
7235 decl = field;
7236 }
7237
7238 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 7239 DECL_IN_AGGR_P (decl) = 0;
68642fb6 7240 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
1f6e1acc 7241 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
84e6233f
JM
7242 {
7243 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7244 /* [temp.expl.spec] An explicit specialization of a static data
7245 member of a template is a definition if the declaration
7246 includes an initializer; otherwise, it is a declaration.
7247
7248 We check for processing_specialization so this only applies
7249 to the new specialization syntax. */
7250 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7251 DECL_EXTERNAL (decl) = 1;
7252 }
f30432d7 7253
b7698cf0 7254 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
8251199e 7255 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
f30432d7 7256 decl);
5b605f68
MS
7257 }
7258
9188c363
MM
7259 /* Enter this declaration into the symbol table. */
7260 tem = maybe_push_decl (decl);
2ee887f2 7261
5156628f 7262 if (processing_template_decl)
cd9f6678 7263 tem = push_template_decl (tem);
5566b478 7264
2ee887f2 7265#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 7266 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
7267 -fconserve-space, we want this to save .data space, at the expense of
7268 wrong semantics. If we say -fno-conserve-space, we want this to
7269 produce errors about redefs; to do this we force variables into the
7270 data segment. */
a3203465 7271 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
2ee887f2 7272#endif
68642fb6 7273
5156628f 7274 if (! processing_template_decl)
5566b478 7275 start_decl_1 (tem);
8d08fdba 7276
8d08fdba
MS
7277 return tem;
7278}
7279
5566b478
MS
7280void
7281start_decl_1 (decl)
7282 tree decl;
8d08fdba 7283{
5566b478
MS
7284 tree type = TREE_TYPE (decl);
7285 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 7286
44689c12
ML
7287 if (type == error_mark_node)
7288 return;
7289
bd0d5d4a 7290 maybe_push_cleanup_level (type);
5566b478
MS
7291
7292 if (initialized)
7293 /* Is it valid for this decl to have an initializer at all?
7294 If not, set INITIALIZED to zero, which will indirectly
7295 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba 7296 {
5566b478
MS
7297 /* Don't allow initializations for incomplete types except for
7298 arrays which might be completed by the initialization. */
d0f062fb 7299 if (COMPLETE_TYPE_P (complete_type (type)))
5566b478
MS
7300 ; /* A complete type is ok. */
7301 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 7302 {
8251199e 7303 cp_error ("variable `%#D' has initializer but incomplete type",
5566b478
MS
7304 decl);
7305 initialized = 0;
25eb19ff 7306 type = TREE_TYPE (decl) = error_mark_node;
5566b478 7307 }
d0f062fb 7308 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
7309 {
7310 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
8251199e 7311 cp_error ("elements of array `%#D' have incomplete type", decl);
5566b478
MS
7312 /* else we already gave an error in start_decl. */
7313 initialized = 0;
8d08fdba 7314 }
8d08fdba
MS
7315 }
7316
5566b478
MS
7317 if (!initialized
7318 && TREE_CODE (decl) != TYPE_DECL
7319 && TREE_CODE (decl) != TEMPLATE_DECL
07c88314 7320 && type != error_mark_node
5362b086 7321 && IS_AGGR_TYPE (type)
07c88314 7322 && ! DECL_EXTERNAL (decl))
8d08fdba 7323 {
5156628f 7324 if ((! processing_template_decl || ! uses_template_parms (type))
d0f062fb 7325 && !COMPLETE_TYPE_P (complete_type (type)))
5566b478 7326 {
8251199e 7327 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
5566b478
MS
7328 decl);
7329 /* Change the type so that assemble_variable will give
7330 DECL an rtl we can live with: (mem (const_int 0)). */
25eb19ff 7331 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
7332 }
7333 else
7334 {
7335 /* If any base type in the hierarchy of TYPE needs a constructor,
7336 then we set initialized to 1. This way any nodes which are
7337 created for the purposes of initializing this aggregate
7338 will live as long as it does. This is necessary for global
7339 aggregates which do not have their initializers processed until
7340 the end of the file. */
7341 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7342 }
7343 }
7344
5566b478
MS
7345 if (! initialized)
7346 DECL_INITIAL (decl) = NULL_TREE;
7347}
7348
7349/* Handle initialization of references.
38e01259 7350 These three arguments are from `cp_finish_decl', and have the
e92cc029
MS
7351 same meaning here that they do there.
7352
7353 Quotes on semantics can be found in ARM 8.4.3. */
7354
8e4ce833 7355static tree
a703fb38 7356grok_reference_init (decl, type, init)
5566b478 7357 tree decl, type, init;
5566b478
MS
7358{
7359 tree tmp;
7360
7361 if (init == NULL_TREE)
7362 {
7363 if ((DECL_LANG_SPECIFIC (decl) == 0
7364 || DECL_IN_AGGR_P (decl) == 0)
7365 && ! DECL_THIS_EXTERN (decl))
ed5511d9 7366 cp_error ("`%D' declared as reference but not initialized", decl);
8e4ce833 7367 return NULL_TREE;
5566b478
MS
7368 }
7369
7370 if (init == error_mark_node)
8e4ce833 7371 return NULL_TREE;
5566b478 7372
ed5511d9 7373 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 7374 {
cb9a3ff8 7375 cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
8e4ce833 7376 return NULL_TREE;
8d08fdba
MS
7377 }
7378
7379 if (TREE_CODE (init) == TREE_LIST)
7380 init = build_compound_expr (init);
8d08fdba 7381
8ccc31eb
MS
7382 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7383 init = convert_from_reference (init);
7384
8d08fdba
MS
7385 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7386 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7387 {
a3203465 7388 /* Note: default conversion is only called in very special cases. */
8d08fdba
MS
7389 init = default_conversion (init);
7390 }
68642fb6 7391
24bef158
MM
7392 /* Convert INIT to the reference type TYPE. This may involve the
7393 creation of a temporary, whose lifetime must be the same as that
7394 of the reference. If so, a DECL_STMT for the temporary will be
7395 added just after the DECL_STMT for DECL. That's why we don't set
7396 DECL_INITIAL for local references (instead assigning to them
7397 explicitly); we need to allow the temporary to be initialized
7398 first. */
a3203465 7399 tmp = convert_to_reference
9a3b49ac 7400 (type, init, CONV_IMPLICIT,
ce7715bd
JM
7401 LOOKUP_ONLYCONVERTING|LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND,
7402 decl);
8d08fdba 7403
a3203465 7404 if (tmp == error_mark_node)
8e4ce833
JJ
7405 return NULL_TREE;
7406 else if (tmp == NULL_TREE)
8d08fdba 7407 {
8251199e 7408 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
8e4ce833 7409 return NULL_TREE;
8d08fdba 7410 }
8d08fdba 7411
8e4ce833
JJ
7412 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
7413 return tmp;
7414
7415 if (building_stmt_tree ())
8d08fdba 7416 {
8e4ce833
JJ
7417 /* Initialize the declaration. */
7418 tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
7419 finish_expr_stmt (tmp);
8d08fdba 7420 }
8e4ce833
JJ
7421 else
7422 DECL_INITIAL (decl) = tmp;
7423
7424 return NULL_TREE;
8d08fdba
MS
7425}
7426
6060a796
MS
7427/* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7428 mucking with forces it does not comprehend (i.e. initialization with a
7429 constructor). If we are at global scope and won't go into COMMON, fill
7430 it in with a dummy CONSTRUCTOR to force the variable into .data;
7431 otherwise we can use error_mark_node. */
7432
28cbf42c
MS
7433static tree
7434obscure_complex_init (decl, init)
7435 tree decl, init;
6060a796 7436{
28cbf42c
MS
7437 if (! flag_no_inline && TREE_STATIC (decl))
7438 {
7439 if (extract_init (decl, init))
7440 return NULL_TREE;
7441 }
7442
2ee887f2 7443#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a9aedbc2 7444 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6060a796
MS
7445 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7446 NULL_TREE);
7447 else
2ee887f2 7448#endif
6060a796 7449 DECL_INITIAL (decl) = error_mark_node;
28cbf42c
MS
7450
7451 return init;
6060a796
MS
7452}
7453
27778b73
MM
7454/* When parsing `int a[] = {1, 2};' we don't know the size of the
7455 array until we finish parsing the initializer. If that's the
7456 situation we're in, update DECL accordingly. */
7457
7458static void
7459maybe_deduce_size_from_array_init (decl, init)
7460 tree decl;
7461 tree init;
7462{
7463 tree type = TREE_TYPE (decl);
7464
7465 if (TREE_CODE (type) == ARRAY_TYPE
7466 && TYPE_DOMAIN (type) == NULL_TREE
7467 && TREE_CODE (decl) != TYPE_DECL)
7468 {
f2ae0c45
JM
7469 /* do_default is really a C-ism to deal with tentative definitions.
7470 But let's leave it here to ease the eventual merge. */
7471 int do_default = !DECL_EXTERNAL (decl);
27778b73
MM
7472 tree initializer = init ? init : DECL_INITIAL (decl);
7473 int failure = complete_array_type (type, initializer, do_default);
7474
7475 if (failure == 1)
7476 cp_error ("initializer fails to determine size of `%D'", decl);
7477
7478 if (failure == 2)
7479 {
7480 if (do_default)
7481 cp_error ("array size missing in `%D'", decl);
7482 /* If a `static' var's size isn't known, make it extern as
7483 well as static, so it does not get allocated. If it's not
7484 `static', then don't mark it extern; finish_incomplete_decl
7485 will give it a default size and it will get allocated. */
7486 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7487 DECL_EXTERNAL (decl) = 1;
7488 }
7489
7490 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7491 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7492 integer_zero_node))
7493 cp_error ("zero-size array `%D'", decl);
7494
7495 layout_decl (decl, 0);
7496 }
7497}
7498
7499/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 7500 any appropriate error messages regarding the layout. */
27778b73 7501
57b52417
MM
7502static void
7503layout_var_decl (decl)
27778b73 7504 tree decl;
27778b73 7505{
57b52417 7506 tree type = TREE_TYPE (decl);
c95cd22e 7507#if 0
57b52417 7508 tree ttype = target_type (type);
c95cd22e 7509#endif
57b52417
MM
7510
7511 /* If we haven't already layed out this declaration, do so now.
7512 Note that we must not call complete type for an external object
7513 because it's type might involve templates that we are not
68642fb6 7514 supposed to isntantiate yet. (And it's perfectly legal to say
57b52417
MM
7515 `extern X x' for some incomplete type `X'.) */
7516 if (!DECL_EXTERNAL (decl))
7517 complete_type (type);
d0f062fb 7518 if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
27778b73
MM
7519 layout_decl (decl, 0);
7520
c82dbd95 7521 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
7522 {
7523 /* An automatic variable with an incomplete type: that is an error.
7524 Don't talk about array types here, since we took care of that
7525 message in grokdeclarator. */
7526 cp_error ("storage size of `%D' isn't known", decl);
7527 TREE_TYPE (decl) = error_mark_node;
7528 }
ae673f14
JM
7529#if 0
7530 /* Keep this code around in case we later want to control debug info
7531 based on whether a type is "used". (jason 1999-11-11) */
7532
27778b73
MM
7533 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7534 /* Let debugger know it should output info for this type. */
7535 note_debug_info_needed (ttype);
7536
7537 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7538 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 7539#endif
27778b73
MM
7540
7541 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7542 && DECL_SIZE (decl) != NULL_TREE
7543 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7544 {
7545 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7546 constant_expression_warning (DECL_SIZE (decl));
7547 else
7548 cp_error ("storage size of `%D' isn't constant", decl);
7549 }
8e4ce833
JJ
7550
7551 if (TREE_STATIC (decl)
7552 && !DECL_ARTIFICIAL (decl)
7553 && current_function_decl
7554 && DECL_CONTEXT (decl) == current_function_decl)
7555 push_local_name (decl);
27778b73
MM
7556}
7557
27778b73
MM
7558/* If a local static variable is declared in an inline function, or if
7559 we have a weak definition, we must endeavor to create only one
7560 instance of the variable at link-time. */
7561
7562static void
7563maybe_commonize_var (decl)
7564 tree decl;
7565{
7566 /* Static data in a function with comdat linkage also has comdat
7567 linkage. */
7568 if (TREE_STATIC (decl)
7569 /* Don't mess with __FUNCTION__. */
cf74fb86 7570 && ! DECL_ARTIFICIAL (decl)
27778b73
MM
7571 && current_function_decl
7572 && DECL_CONTEXT (decl) == current_function_decl
79065db2 7573 && (DECL_DECLARED_INLINE_P (current_function_decl)
27778b73
MM
7574 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7575 && TREE_PUBLIC (current_function_decl))
7576 {
27778b73
MM
7577 /* If flag_weak, we don't need to mess with this, as we can just
7578 make the function weak, and let it refer to its unique local
7579 copy. This works because we don't allow the function to be
7580 inlined. */
7581 if (! flag_weak)
7582 {
7583 if (DECL_INTERFACE_KNOWN (current_function_decl))
7584 {
7585 TREE_PUBLIC (decl) = 1;
7586 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7587 }
7588 else if (DECL_INITIAL (decl) == NULL_TREE
7589 || DECL_INITIAL (decl) == error_mark_node)
7590 {
7591 TREE_PUBLIC (decl) = 1;
7592 DECL_COMMON (decl) = 1;
7593 }
7594 /* else we lose. We can only do this if we can use common,
7595 which we can't if it has been initialized. */
7596
92643fea 7597 if (!TREE_PUBLIC (decl))
27778b73
MM
7598 {
7599 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7600 cp_warning_at (" you can work around this by removing the initializer", decl);
7601 }
7602 }
8e4ce833
JJ
7603 else
7604 comdat_linkage (decl);
27778b73
MM
7605 }
7606 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7607 /* Set it up again; we might have set DECL_INITIAL since the last
7608 time. */
7609 comdat_linkage (decl);
7610}
7611
91063b51
MM
7612/* Issue an error message if DECL is an uninitialized const variable. */
7613
7614static void
7615check_for_uninitialized_const_var (decl)
7616 tree decl;
7617{
7618 tree type = TREE_TYPE (decl);
7619
7620 /* ``Unless explicitly declared extern, a const object does not have
7621 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7622 7.1.6 */
7623 if (TREE_CODE (decl) == VAR_DECL
7624 && TREE_CODE (type) != REFERENCE_TYPE
7625 && CP_TYPE_CONST_P (type)
7626 && !TYPE_NEEDS_CONSTRUCTING (type)
7627 && !DECL_INITIAL (decl))
7628 cp_error ("uninitialized const `%D'", decl);
7629}
7630
c82dbd95
MM
7631/* Verify INIT (the initializer for DECL), and record the
7632 initialization in DECL_INITIAL, if appropriate. Returns a new
7633 value for INIT. */
27778b73 7634
c82dbd95
MM
7635static tree
7636check_initializer (decl, init)
27778b73 7637 tree decl;
c82dbd95 7638 tree init;
27778b73 7639{
27778b73
MM
7640 tree type;
7641
7642 if (TREE_CODE (decl) == FIELD_DECL)
c82dbd95 7643 return init;
27778b73 7644
fc0e7bf5
MM
7645 type = TREE_TYPE (decl);
7646
27778b73
MM
7647 /* If `start_decl' didn't like having an initialization, ignore it now. */
7648 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7649 init = NULL_TREE;
27778b73 7650
c82dbd95 7651 /* Check the initializer. */
27778b73
MM
7652 if (init)
7653 {
c82dbd95
MM
7654 /* Things that are going to be initialized need to have complete
7655 type. */
7656 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7657
7658 if (type == error_mark_node)
7659 /* We will have already complained. */
7660 init = NULL_TREE;
d0f062fb 7661 else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
27778b73
MM
7662 {
7663 cp_error ("variable-sized object `%D' may not be initialized", decl);
7664 init = NULL_TREE;
7665 }
c82dbd95 7666 else if (TREE_CODE (type) == ARRAY_TYPE
d0f062fb 7667 && !COMPLETE_TYPE_P (TREE_TYPE (type)))
27778b73
MM
7668 {
7669 cp_error ("elements of array `%#D' have incomplete type", decl);
7670 init = NULL_TREE;
7671 }
d0f062fb 7672 else if (!COMPLETE_TYPE_P (type))
c82dbd95
MM
7673 {
7674 cp_error ("`%D' has incomplete type", decl);
7675 TREE_TYPE (decl) = error_mark_node;
7676 init = NULL_TREE;
7677 }
27778b73
MM
7678 }
7679
7680 if (TREE_CODE (decl) == CONST_DECL)
7681 {
7682 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7683
7684 DECL_INITIAL (decl) = init;
7685
27778b73
MM
7686 my_friendly_assert (init != NULL_TREE, 149);
7687 init = NULL_TREE;
7688 }
c82dbd95
MM
7689 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7690 {
8e4ce833
JJ
7691 init = grok_reference_init (decl, type, init);
7692 if (init)
7693 init = obscure_complex_init (decl, init);
c82dbd95 7694 }
27778b73
MM
7695 else if (init)
7696 {
7697 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7698 {
7699 if (TREE_CODE (type) == ARRAY_TYPE)
7700 init = digest_init (type, init, (tree *) 0);
7701 else if (TREE_CODE (init) == CONSTRUCTOR
7702 && TREE_HAS_CONSTRUCTOR (init))
7703 {
7704 if (TYPE_NON_AGGREGATE_CLASS (type))
7705 {
7706 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7707 decl);
7708 init = error_mark_node;
7709 }
7710 else
7711 goto dont_use_constructor;
7712 }
7713 }
7714 else
7715 {
7716 dont_use_constructor:
7717 if (TREE_CODE (init) != TREE_VEC)
7718 init = store_init_value (decl, init);
7719 }
7720
7721 if (init)
7722 /* We must hide the initializer so that expand_decl
7723 won't try to do something it does not understand. */
7724 init = obscure_complex_init (decl, init);
7725 }
7726 else if (DECL_EXTERNAL (decl))
7727 ;
2f939d94 7728 else if (TYPE_P (type)
27778b73
MM
7729 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7730 {
7731 tree core_type = strip_array_types (type);
7732
7733 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7734 {
7735 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7736 cp_error ("structure `%D' with uninitialized const members", decl);
7737 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7738 cp_error ("structure `%D' with uninitialized reference members",
7739 decl);
7740 }
7741
7742 check_for_uninitialized_const_var (decl);
7743
d0f062fb 7744 if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
27778b73
MM
7745 init = obscure_complex_init (decl, NULL_TREE);
7746
7747 }
7748 else
7749 check_for_uninitialized_const_var (decl);
68642fb6 7750
c82dbd95 7751 return init;
27778b73
MM
7752}
7753
7754/* If DECL is not a local variable, give it RTL. */
7755
7756static void
7757make_rtl_for_nonlocal_decl (decl, init, asmspec)
7758 tree decl;
7759 tree init;
7760 const char *asmspec;
7761{
95ee998c
MM
7762 int toplev = toplevel_bindings_p ();
7763 int defer_p;
27778b73 7764
f39ee884
MM
7765 /* Handle non-variables up front. */
7766 if (TREE_CODE (decl) != VAR_DECL)
7767 {
7768 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7769 return;
7770 }
7771
95ee998c
MM
7772 /* If we see a class member here, it should be a static data
7773 member. */
7774 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7775 {
7776 my_friendly_assert (TREE_STATIC (decl), 19990828);
7777 /* An in-class declaration of a static data member should be
7778 external; it is only a declaration, and not a definition. */
7779 if (init == NULL_TREE)
7780 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
7781 }
7782
f39ee884
MM
7783 /* Set the DECL_ASSEMBLER_NAME for the variable. */
7784 if (asmspec)
92643fea 7785 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
f39ee884 7786
95ee998c
MM
7787 /* We don't create any RTL for local variables. */
7788 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7789 return;
27778b73 7790
95ee998c
MM
7791 /* We defer emission of local statics until the corresponding
7792 DECL_STMT is expanded. */
7793 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
7794
7795 /* We try to defer namespace-scope static constants so that they are
7796 not emitted into the object file unncessarily. */
7797 if (!DECL_VIRTUAL_P (decl)
7798 && TREE_READONLY (decl)
7799 && DECL_INITIAL (decl) != NULL_TREE
7800 && DECL_INITIAL (decl) != error_mark_node
7801 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
7802 && toplev
7803 && !TREE_PUBLIC (decl))
7804 {
7805 /* Fool with the linkage according to #pragma interface. */
7806 if (!interface_unknown)
27778b73 7807 {
95ee998c
MM
7808 TREE_PUBLIC (decl) = 1;
7809 DECL_EXTERNAL (decl) = interface_only;
27778b73 7810 }
27778b73 7811
95ee998c 7812 defer_p = 1;
27778b73 7813 }
95ee998c 7814
92643fea
MM
7815 /* If we're deferring the variable, we only need to make RTL if
7816 there's an ASMSPEC. Otherwise, we'll lazily create it later when
7817 we need it. (There's no way to lazily create RTL for things that
7818 have assembly specs because the information about the specifier
7819 isn't stored in the tree, yet) */
7820 if (defer_p && asmspec)
6c418184 7821 make_decl_rtl (decl, asmspec);
95ee998c 7822 /* If we're not deferring, go ahead and assemble the variable. */
92643fea 7823 else if (!defer_p)
27778b73 7824 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
27778b73
MM
7825}
7826
7827/* The old ARM scoping rules injected variables declared in the
7828 initialization statement of a for-statement into the surrounding
7829 scope. We support this usage, in order to be backward-compatible.
7830 DECL is a just-declared VAR_DECL; if necessary inject its
7831 declaration into the surrounding scope. */
7832
b7b8bcd2 7833void
27778b73
MM
7834maybe_inject_for_scope_var (decl)
7835 tree decl;
7836{
c3783399
NS
7837 if (!DECL_NAME (decl))
7838 return;
5362b086 7839
27778b73
MM
7840 if (current_binding_level->is_for_scope)
7841 {
68642fb6 7842 struct binding_level *outer
27778b73
MM
7843 = current_binding_level->level_chain;
7844
7845 /* Check to see if the same name is already bound at the outer
7846 level, either because it was directly declared, or because a
7847 dead for-decl got preserved. In either case, the code would
7848 not have been valid under the ARM scope rules, so clear
7849 is_for_scope for the current_binding_level.
7850
7851 Otherwise, we need to preserve the temp slot for decl to last
7852 into the outer binding level. */
7853
68642fb6 7854 tree outer_binding
27778b73 7855 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
68642fb6 7856
27778b73 7857 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
68642fb6 7858 && (TREE_CODE (BINDING_VALUE (outer_binding))
27778b73
MM
7859 == VAR_DECL)
7860 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7861 {
7862 BINDING_VALUE (outer_binding)
7863 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7864 current_binding_level->is_for_scope = 0;
7865 }
7866 else if (DECL_IN_MEMORY_P (decl))
7867 preserve_temp_slots (DECL_RTL (decl));
7868 }
7869}
7870
ed5511d9 7871/* Generate code to initialize DECL (a local variable). */
27778b73 7872
b7b8bcd2
MM
7873void
7874initialize_local_var (decl, init, flags)
27778b73
MM
7875 tree decl;
7876 tree init;
27778b73
MM
7877 int flags;
7878{
9ed9e79a 7879 tree type = TREE_TYPE (decl);
27778b73 7880
9ed9e79a
MM
7881 /* If the type is bogus, don't bother initializing the variable. */
7882 if (type == error_mark_node)
7883 return;
b7b8bcd2 7884
b7b8bcd2
MM
7885 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7886 {
7887 /* If we used it already as memory, it must stay in memory. */
7888 DECL_INITIAL (decl) = NULL_TREE;
7889 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7890 }
7891
9ed9e79a
MM
7892 /* Local statics are handled differently from ordinary automatic
7893 variables. */
7894 if (TREE_STATIC (decl))
7895 {
7896 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 7897 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
7898 expand_static_init (decl, init);
7899 return;
7900 }
7901
27778b73
MM
7902 if (DECL_SIZE (decl) && type != error_mark_node)
7903 {
7904 int already_used;
68642fb6 7905
27778b73 7906 /* Compute and store the initial value. */
27778b73
MM
7907 already_used = TREE_USED (decl) || TREE_USED (type);
7908
7909 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7910 {
24bef158
MM
7911 int saved_stmts_are_full_exprs_p;
7912
3a0d3e1e 7913 my_friendly_assert (building_stmt_tree (), 20000906);
f2c5f623 7914 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
ae499cce 7915 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3a0d3e1e 7916 finish_expr_stmt (build_aggr_init (decl, init, flags));
5362b086 7917 current_stmt_tree ()->stmts_are_full_exprs_p =
ae499cce 7918 saved_stmts_are_full_exprs_p;
27778b73
MM
7919 }
7920
7921 /* Set this to 0 so we can tell whether an aggregate which was
7922 initialized was ever used. Don't do this if it has a
7923 destructor, so we don't complain about the 'resource
b7b8bcd2
MM
7924 allocation is initialization' idiom. Now set
7925 attribute((unused)) on types so decls of that type will be
7926 marked used. (see TREE_USED, above.) */
27778b73
MM
7927 if (TYPE_NEEDS_CONSTRUCTING (type)
7928 && ! already_used
834c6dff 7929 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
27778b73
MM
7930 && DECL_NAME (decl))
7931 TREE_USED (decl) = 0;
b7b8bcd2 7932 else if (already_used)
27778b73
MM
7933 TREE_USED (decl) = 1;
7934 }
24bef158 7935}
27778b73 7936
24bef158
MM
7937/* Generate code to destroy DECL (a local variable). */
7938
68642fb6 7939static void
24bef158
MM
7940destroy_local_var (decl)
7941 tree decl;
7942{
9d85d30c
MM
7943 tree type = TREE_TYPE (decl);
7944 tree cleanup;
7945
7946 /* Only variables get cleaned up. */
7947 if (TREE_CODE (decl) != VAR_DECL)
7948 return;
68642fb6 7949
9d85d30c 7950 /* And only things with destructors need cleaning up. */
655dc6ee
JM
7951 if (type == error_mark_node
7952 || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
9d85d30c
MM
7953 return;
7954
7955 if (TREE_CODE (decl) == VAR_DECL &&
7956 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7957 /* We don't clean up things that aren't defined in this
7958 translation unit, or that need a static cleanup. The latter
7959 are handled by finish_file. */
7960 return;
68642fb6 7961
9d85d30c
MM
7962 /* Compute the cleanup. */
7963 cleanup = maybe_build_cleanup (decl);
27778b73 7964
b7b8bcd2 7965 /* Record the cleanup required for this declaration. */
24bef158
MM
7966 if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7967 && cleanup)
7968 finish_decl_cleanup (decl, cleanup);
7969}
7970
8d08fdba
MS
7971/* Finish processing of a declaration;
7972 install its line number and initial value.
7973 If the length of an array type is not known before,
7974 it must be determined now, from the initial value, or it is an error.
7975
8b27e9ef 7976 INIT holds the value of an initializer that should be allowed to escape
8d08fdba
MS
7977 the normal rules.
7978
920f9474 7979 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 7980 if the (init) syntax was used. */
8d08fdba
MS
7981
7982void
cd9f6678 7983cp_finish_decl (decl, init, asmspec_tree, flags)
8d08fdba
MS
7984 tree decl, init;
7985 tree asmspec_tree;
6060a796 7986 int flags;
8d08fdba
MS
7987{
7988 register tree type;
27778b73 7989 tree ttype = NULL_TREE;
9c0758dd 7990 const char *asmspec = NULL;
8d08fdba
MS
7991 int was_readonly = 0;
7992
8d08fdba
MS
7993 if (! decl)
7994 {
7995 if (init)
8251199e 7996 error ("assignment (not initialization) in declaration");
8d08fdba
MS
7997 return;
7998 }
7999
a4443a08 8000 /* If a name was specified, get the string. */
8d08fdba 8001 if (asmspec_tree)
8d08fdba 8002 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 8003
2c73f9f5
ML
8004 if (init && TREE_CODE (init) == NAMESPACE_DECL)
8005 {
920f9474 8006 cp_error ("cannot initialize `%D' to namespace `%D'",
2c73f9f5
ML
8007 decl, init);
8008 init = NULL_TREE;
8009 }
8010
6ba89f8e 8011 if (current_class_type
4f1c5b7d 8012 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
8013 && TYPE_BEING_DEFINED (current_class_type)
8014 && (DECL_INITIAL (decl) || init))
3febd123 8015 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 8016
68642fb6 8017 if (TREE_CODE (decl) == VAR_DECL
9a68c51f
JM
8018 && DECL_CONTEXT (decl)
8019 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
8020 && DECL_CONTEXT (decl) != current_namespace
8021 && init)
8022 {
8023 /* Leave the namespace of the object. */
8024 pop_decl_namespace ();
8025 }
8026
c82dbd95 8027 type = TREE_TYPE (decl);
8d08fdba 8028
f376e137 8029 if (type == error_mark_node)
cd9f6678 8030 return;
5362b086 8031
24bef158 8032 /* Add this declaration to the statement-tree. */
5362b086 8033 if (building_stmt_tree ()
44835fdd
MM
8034 && at_function_scope_p ()
8035 && TREE_CODE (decl) != RESULT_DECL)
24bef158
MM
8036 add_decl_stmt (decl);
8037
a7a7710d
NS
8038 if (TYPE_HAS_MUTABLE_P (type))
8039 TREE_READONLY (decl) = 0;
24bef158 8040
5156628f 8041 if (processing_template_decl)
5566b478
MS
8042 {
8043 if (init && DECL_INITIAL (decl))
2a1e9fdd 8044 DECL_INITIAL (decl) = init;
5566b478
MS
8045 goto finish_end0;
8046 }
3e41d13b 8047
27778b73
MM
8048 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
8049 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
8050
8d08fdba
MS
8051 /* Take care of TYPE_DECLs up front. */
8052 if (TREE_CODE (decl) == TYPE_DECL)
8053 {
8054 if (init && DECL_INITIAL (decl))
8055 {
8056 /* typedef foo = bar; store the type of bar as the type of foo. */
8057 TREE_TYPE (decl) = type = TREE_TYPE (init);
8058 DECL_INITIAL (decl) = init = NULL_TREE;
8059 }
a0a33927
MS
8060 if (type != error_mark_node
8061 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
8062 {
8063 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8251199e 8064 cp_warning ("shadowing previous type declaration of `%#D'", decl);
8d08fdba
MS
8065 set_identifier_type_value (DECL_NAME (decl), type);
8066 CLASSTYPE_GOT_SEMICOLON (type) = 1;
8067 }
8068 GNU_xref_decl (current_function_decl, decl);
cffa8729
MS
8069
8070 /* If we have installed this as the canonical typedef for this
8071 type, and that type has not been defined yet, delay emitting
956d6950 8072 the debug information for it, as we will emit it later. */
d2e5ee5c 8073 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 8074 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
8075 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8076
8d08fdba 8077 rest_of_decl_compilation (decl, NULL_PTR,
5566b478 8078 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
8079 goto finish_end;
8080 }
3e41d13b 8081
8d08fdba 8082 if (TREE_CODE (decl) != FUNCTION_DECL)
3e41d13b 8083 ttype = target_type (type);
8d08fdba
MS
8084
8085 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
8086 && TYPE_NEEDS_CONSTRUCTING (type))
8087 {
8d08fdba
MS
8088 /* Currently, GNU C++ puts constants in text space, making them
8089 impossible to initialize. In the future, one would hope for
8090 an operating system which understood the difference between
8091 initialization and the running of a program. */
8092 was_readonly = 1;
8093 TREE_READONLY (decl) = 0;
8094 }
8095
27778b73 8096 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8d08fdba 8097 {
27778b73
MM
8098 /* This must override the asm specifier which was placed by
8099 grokclassfn. Lay this out fresh. */
19e7881c 8100 SET_DECL_RTL (TREE_TYPE (decl), NULL_RTX);
92643fea 8101 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
6c418184 8102 make_decl_rtl (decl, asmspec);
8d08fdba
MS
8103 }
8104
c82dbd95
MM
8105 /* Deduce size of array from initialization, if not already known. */
8106 maybe_deduce_size_from_array_init (decl, init);
8107 init = check_initializer (decl, init);
3e41d13b 8108
8d08fdba
MS
8109 GNU_xref_decl (current_function_decl, decl);
8110
8d08fdba 8111 if (TREE_CODE (decl) == VAR_DECL)
57b52417 8112 layout_var_decl (decl);
8d08fdba
MS
8113
8114 /* Output the assembler code and/or RTL code for variables and functions,
8115 unless the type is an undefined structure or union.
8116 If not, it will get done when the type is completed. */
8d08fdba
MS
8117 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8118 || TREE_CODE (decl) == RESULT_DECL)
8119 {
27778b73
MM
8120 if (TREE_CODE (decl) == VAR_DECL)
8121 maybe_commonize_var (decl);
8d08fdba 8122
27778b73 8123 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 8124
68642fb6 8125 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 8126 || TREE_CODE (type) == METHOD_TYPE)
68642fb6 8127 abstract_virtuals_error (decl,
27778b73 8128 strip_array_types (TREE_TYPE (type)));
68642fb6 8129 else
27778b73 8130 abstract_virtuals_error (decl, strip_array_types (type));
8d08fdba 8131
8d08fdba 8132 if (TREE_CODE (decl) == FUNCTION_DECL)
faae18ab 8133 ;
67d743fe
MS
8134 else if (DECL_EXTERNAL (decl)
8135 && ! (DECL_LANG_SPECIFIC (decl)
8136 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
8137 {
8138 if (init)
8139 DECL_INITIAL (decl) = init;
8140 }
b35d4555 8141 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8d08fdba 8142 {
b7b8bcd2 8143 /* This is a local declaration. */
b35d4555
MM
8144 if (doing_semantic_analysis_p ())
8145 maybe_inject_for_scope_var (decl);
b7b8bcd2
MM
8146 /* Initialize the local variable. But, if we're building a
8147 statement-tree, we'll do the initialization when we
8148 expand the tree. */
24bef158
MM
8149 if (processing_template_decl)
8150 {
8151 if (init || DECL_INITIAL (decl) == error_mark_node)
8152 DECL_INITIAL (decl) = init;
8153 }
8154 else
8155 {
b35d4555
MM
8156 /* If we're not building RTL, then we need to do so
8157 now. */
44835fdd 8158 my_friendly_assert (building_stmt_tree (), 20000906);
b35d4555 8159 /* Initialize the variable. */
24bef158
MM
8160 initialize_local_var (decl, init, flags);
8161 /* Clean up the variable. */
8162 destroy_local_var (decl);
8163 }
8d08fdba 8164 }
9ed9e79a
MM
8165 else if (TREE_STATIC (decl) && type != error_mark_node)
8166 {
8167 /* Cleanups for static variables are handled by `finish_file'. */
8168 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 8169 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
8170 expand_static_init (decl, init);
8171 }
8d08fdba
MS
8172 finish_end0:
8173
8174 /* Undo call to `pushclass' that was done in `start_decl'
8175 due to initialization of qualified member variable.
8176 I.e., Foo::x = 10; */
8177 {
4f1c5b7d 8178 tree context = CP_DECL_CONTEXT (decl);
8d08fdba 8179 if (context
2f939d94 8180 && TYPE_P (context)
8d08fdba
MS
8181 && (TREE_CODE (decl) == VAR_DECL
8182 /* We also have a pushclass done that we need to undo here
8183 if we're at top level and declare a method. */
5566b478
MS
8184 || TREE_CODE (decl) == FUNCTION_DECL)
8185 /* If size hasn't been set, we're still defining it,
8186 and therefore inside the class body; don't pop
8187 the binding level.. */
d0f062fb 8188 && COMPLETE_TYPE_P (context)
5566b478 8189 && context == current_class_type)
6b400b21 8190 pop_nested_class ();
8d08fdba
MS
8191 }
8192 }
8193
8194 finish_end:
8195
8d08fdba
MS
8196 if (was_readonly)
8197 TREE_READONLY (decl) = 1;
8d08fdba
MS
8198}
8199
82580166 8200/* This is here for a midend callback from c-common.c */
e92cc029 8201
82580166
MS
8202void
8203finish_decl (decl, init, asmspec_tree)
8204 tree decl, init;
8205 tree asmspec_tree;
8206{
cd9f6678 8207 cp_finish_decl (decl, init, asmspec_tree, 0);
82580166
MS
8208}
8209
db4283a0
MM
8210/* Returns a declaration for a VAR_DECL as if:
8211
8212 extern "C" TYPE NAME;
8213
8214 had been seen. Used to create compiler-generated global
8215 variables. */
8216
8217tree
8218declare_global_var (name, type)
8219 tree name;
8220 tree type;
8221{
8222 tree decl;
8223
8224 push_to_top_level ();
8225 decl = build_decl (VAR_DECL, name, type);
8226 TREE_PUBLIC (decl) = 1;
8227 DECL_EXTERNAL (decl) = 1;
8228 DECL_ARTIFICIAL (decl) = 1;
8229 pushdecl (decl);
8230 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8231 pop_from_top_level ();
8232
8233 return decl;
8234}
8235
8236/* Returns a pointer to the `atexit' function. Note that if
8237 FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8238 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8239
8240static tree
8241get_atexit_node ()
8242{
8243 tree atexit_fndecl;
8244 tree arg_types;
8245 tree fn_type;
8246 tree fn_ptr_type;
8247 const char *name;
8248
8249 if (atexit_node)
8250 return atexit_node;
8251
8252 if (flag_use_cxa_atexit)
8253 {
8254 /* The declaration for `__cxa_atexit' is:
8255
8256 int __cxa_atexit (void (*)(void *), void *, void *)
8257
8258 We build up the argument types and then then function type
8259 itself. */
68642fb6 8260
db4283a0
MM
8261 /* First, build the pointer-to-function type for the first
8262 argument. */
8263 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8264 fn_type = build_function_type (void_type_node, arg_types);
8265 fn_ptr_type = build_pointer_type (fn_type);
8266 /* Then, build the rest of the argument types. */
8267 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8268 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8269 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8270 /* And the final __cxa_atexit type. */
8271 fn_type = build_function_type (integer_type_node, arg_types);
8272 fn_ptr_type = build_pointer_type (fn_type);
8273 name = "__cxa_atexit";
8274 }
8275 else
8276 {
8277 /* The declaration for `atexit' is:
68642fb6 8278
db4283a0
MM
8279 int atexit (void (*)());
8280
8281 We build up the argument types and then then function type
8282 itself. */
8283 fn_type = build_function_type (void_type_node, void_list_node);
8284 fn_ptr_type = build_pointer_type (fn_type);
8285 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8286 /* Build the final atexit type. */
8287 fn_type = build_function_type (integer_type_node, arg_types);
8288 name = "atexit";
8289 }
8290
8291 /* Now, build the function declaration. */
8292 push_lang_context (lang_name_c);
0c11ada6 8293 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
8294 mark_used (atexit_fndecl);
8295 pop_lang_context ();
8296 atexit_node = default_conversion (atexit_fndecl);
8297
8298 return atexit_node;
8299}
8300
8301/* Returns the __dso_handle VAR_DECL. */
8302
8303static tree
8304get_dso_handle_node ()
8305{
8306 if (dso_handle_node)
8307 return dso_handle_node;
8308
8309 /* Declare the variable. */
8310 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8311 ptr_type_node);
8312
8313 return dso_handle_node;
8314}
8315
8316/* Begin a new function with internal linkage whose job will be simply
8317 to destroy some particular variable. */
8318
8319static tree
8320start_cleanup_fn ()
8321{
8322 static int counter = 0;
8323 int old_interface_unknown = interface_unknown;
8324 char name[32];
8325 tree parmtypes;
8326 tree fntype;
8327 tree fndecl;
8328
8329 push_to_top_level ();
8330
8331 /* No need to mangle this. */
8332 push_lang_context (lang_name_c);
8333
8334 interface_unknown = 1;
8335
8336 /* Build the parameter-types. */
8337 parmtypes = void_list_node;
8338 /* Functions passed to __cxa_atexit take an additional parameter.
8339 We'll just ignore it. After we implement the new calling
8340 convention for destructors, we can eliminate the use of
8341 additional cleanup functions entirely in the -fnew-abi case. */
8342 if (flag_use_cxa_atexit)
8343 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8344 /* Build the function type itself. */
8345 fntype = build_function_type (void_type_node, parmtypes);
8346 /* Build the name of the function. */
8347 sprintf (name, "__tcf_%d", counter++);
8348 /* Build the function declaration. */
8349 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8350 /* It's a function with internal linkage, generated by the
8351 compiler. */
8352 TREE_PUBLIC (fndecl) = 0;
8353 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
8354 /* Make the function `inline' so that it is only emitted if it is
8355 actually needed. It is unlikely that it will be inlined, since
8356 it is only called via a function pointer, but we avoid unncessary
8357 emissions this way. */
8358 DECL_INLINE (fndecl) = 1;
db4283a0
MM
8359 /* Build the parameter. */
8360 if (flag_use_cxa_atexit)
8361 {
8362 tree parmdecl;
8363
8364 parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8365 DECL_CONTEXT (parmdecl) = fndecl;
8366 DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8367 TREE_USED (parmdecl) = 1;
8368 DECL_ARGUMENTS (fndecl) = parmdecl;
8369 }
8370
09ed39ad 8371 pushdecl (fndecl);
db4283a0
MM
8372 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8373 do_pushlevel ();
8374
8375 interface_unknown = old_interface_unknown;
8376
8377 pop_lang_context ();
8378
8379 return current_function_decl;
8380}
8381
8382/* Finish the cleanup function begun by start_cleanup_fn. */
8383
8384static void
8385end_cleanup_fn ()
8386{
8387 do_poplevel ();
8388
0acf7199 8389 expand_body (finish_function (0));
db4283a0
MM
8390
8391 pop_from_top_level ();
8392}
8393
bf419747
MM
8394/* Generate code to handle the destruction of DECL, an object with
8395 static storage duration. */
f0105ed3 8396
bf419747
MM
8397void
8398register_dtor_fn (decl)
f0105ed3
MM
8399 tree decl;
8400{
db4283a0 8401 tree cleanup;
f0105ed3 8402 tree compound_stmt;
db4283a0
MM
8403 tree args;
8404 tree fcall;
f0105ed3 8405
db4283a0 8406 int saved_flag_access_control;
f0105ed3 8407
834c6dff 8408 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
bf419747
MM
8409 return;
8410
f0105ed3
MM
8411 /* Call build_cleanup before we enter the anonymous function so that
8412 any access checks will be done relative to the current scope,
8413 rather than the scope of the anonymous function. */
8414 build_cleanup (decl);
8415
8416 /* Now start the function. */
db4283a0 8417 cleanup = start_cleanup_fn ();
f0105ed3
MM
8418
8419 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8420 to the original function, rather than the anonymous one. That
8421 will make the back-end think that nested functions are in use,
8422 which causes confusion. */
8423 saved_flag_access_control = flag_access_control;
8424 flag_access_control = 0;
8425 fcall = build_cleanup (decl);
8426 flag_access_control = saved_flag_access_control;
8427
8428 /* Create the body of the anonymous function. */
8429 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8430 finish_expr_stmt (fcall);
8431 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
db4283a0 8432 end_cleanup_fn ();
f0105ed3
MM
8433
8434 /* Call atexit with the cleanup function. */
8435 mark_addressable (cleanup);
8436 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
db4283a0
MM
8437 if (flag_use_cxa_atexit)
8438 {
8439 args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8440 args = tree_cons (NULL_TREE, null_pointer_node, args);
8441 args = tree_cons (NULL_TREE, cleanup, args);
8442 }
8443 else
8444 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8445 finish_expr_stmt (build_function_call (get_atexit_node (), args));
f0105ed3
MM
8446}
8447
8d08fdba
MS
8448void
8449expand_static_init (decl, init)
8450 tree decl;
8451 tree init;
8452{
8453 tree oldstatic = value_member (decl, static_aggregates);
a4443a08 8454
8d08fdba
MS
8455 if (oldstatic)
8456 {
8457 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8251199e 8458 cp_error ("multiple initializations given for `%D'", decl);
8d08fdba 8459 }
0aafb128 8460 else if (! toplevel_bindings_p ())
8d08fdba
MS
8461 {
8462 /* Emit code to perform this initialization but once. */
b7b8bcd2 8463 tree if_stmt;
f0105ed3 8464 tree then_clause;
f1dedc31 8465 tree assignment;
c395453c
MM
8466 tree guard;
8467 tree guard_init;
8d08fdba 8468
2036a15c
MM
8469 /* Emit code to perform this initialization but once. This code
8470 looks like:
8471
c395453c
MM
8472 static int guard = 0;
8473 if (!guard) {
2036a15c 8474 // Do initialization.
c395453c 8475 guard = 1;
2036a15c
MM
8476 // Register variable for destruction at end of program.
8477 }
8478
8479 Note that the `temp' variable is only set to 1 *after* the
8480 initialization is complete. This ensures that an exception,
8481 thrown during the construction, will cause the variable to
8482 reinitialized when we pass through this code again, as per:
68642fb6 8483
2036a15c
MM
8484 [stmt.dcl]
8485
8486 If the initialization exits by throwing an exception, the
8487 initialization is not complete, so it will be tried again
8488 the next time control enters the declaration.
8489
8490 In theory, this process should be thread-safe, too; multiple
8491 threads should not be able to initialize the variable more
8492 than once. We don't yet attempt to ensure thread-safety. */
c395453c
MM
8493
8494 /* Create the guard variable. */
8495 guard = get_guard (decl);
2036a15c
MM
8496
8497 /* Begin the conditional initialization. */
b7b8bcd2 8498 if_stmt = begin_if_stmt ();
c395453c 8499 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
f0105ed3 8500 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
72b7eeff 8501
2036a15c 8502 /* Do the initialization itself. */
28cbf42c 8503 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
f30432d7 8504 || (init && TREE_CODE (init) == TREE_LIST))
f1dedc31 8505 assignment = build_aggr_init (decl, init, 0);
f30432d7 8506 else if (init)
c557501d
MM
8507 /* The initialization we're doing here is just a bitwise
8508 copy. */
8509 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
f1dedc31
MM
8510 else
8511 assignment = NULL_TREE;
8512
8513 /* Once the assignment is complete, set TEMP to 1. Since the
8514 construction of the static object is complete at this point,
8515 we want to make sure TEMP is set to 1 even if a temporary
8516 constructed during the initialization throws an exception
8517 when it is destroyed. So, we combine the initialization and
8518 the assignment to TEMP into a single expression, ensuring
8519 that when we call finish_expr_stmt the cleanups will not be
8520 run until after TEMP is set to 1. */
c395453c 8521 guard_init = set_guard (guard);
f1dedc31
MM
8522 if (assignment)
8523 {
8524 assignment = tree_cons (NULL_TREE, assignment,
68642fb6 8525 build_tree_list (NULL_TREE,
c395453c 8526 guard_init));
f1dedc31
MM
8527 assignment = build_compound_expr (assignment);
8528 }
8529 else
c395453c 8530 assignment = guard_init;
f1dedc31 8531 finish_expr_stmt (assignment);
72b7eeff 8532
2036a15c
MM
8533 /* Use atexit to register a function for destroying this static
8534 variable. */
bf419747 8535 register_dtor_fn (decl);
72b7eeff 8536
f0105ed3 8537 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
b7b8bcd2
MM
8538 finish_then_clause (if_stmt);
8539 finish_if_stmt ();
8d08fdba
MS
8540 }
8541 else
bbd15aac 8542 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 8543}
3c5c0849
MM
8544
8545/* Finish the declaration of a catch-parameter. */
8546
b35d4555 8547tree
3c5c0849
MM
8548start_handler_parms (declspecs, declarator)
8549 tree declspecs;
8550 tree declarator;
8551{
8552 tree decl;
8553 if (declspecs)
8554 {
8555 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8556 1, NULL_TREE);
8557 if (decl == NULL_TREE)
8558 error ("invalid catch parameter");
8559 }
8560 else
8561 decl = NULL_TREE;
b35d4555
MM
8562
8563 return decl;
3c5c0849
MM
8564}
8565
8d08fdba
MS
8566\f
8567/* Make TYPE a complete type based on INITIAL_VALUE.
8568 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6ab5c740 8569 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8d08fdba
MS
8570
8571int
8572complete_array_type (type, initial_value, do_default)
8573 tree type, initial_value;
8574 int do_default;
8575{
8576 register tree maxindex = NULL_TREE;
8577 int value = 0;
68642fb6 8578
8d08fdba
MS
8579 if (initial_value)
8580 {
7b019c19
MM
8581 /* An array of character type can be initialized from a
8582 brace-enclosed string constant. */
8583 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
8584 && TREE_CODE (initial_value) == CONSTRUCTOR
8585 && CONSTRUCTOR_ELTS (initial_value)
8586 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
8587 == STRING_CST)
8588 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
8589 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
8590
8591 /* Note MAXINDEX is really the maximum index, one less than the
8592 size. */
8d08fdba 8593 if (TREE_CODE (initial_value) == STRING_CST)
e1cd6e56
MS
8594 {
8595 int eltsize
8596 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8597 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8598 / eltsize) - 1, 0);
8599 }
8d08fdba
MS
8600 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8601 {
e1cd6e56 8602 tree elts = CONSTRUCTOR_ELTS (initial_value);
fed3cef0
RK
8603
8604 maxindex = ssize_int (-1);
e1cd6e56
MS
8605 for (; elts; elts = TREE_CHAIN (elts))
8606 {
8607 if (TREE_PURPOSE (elts))
8608 maxindex = TREE_PURPOSE (elts);
8609 else
fed3cef0 8610 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
e1cd6e56
MS
8611 }
8612 maxindex = copy_node (maxindex);
8d08fdba
MS
8613 }
8614 else
8615 {
8616 /* Make an error message unless that happened already. */
8617 if (initial_value != error_mark_node)
8618 value = 1;
0db982be
ML
8619 else
8620 initial_value = NULL_TREE;
8d08fdba
MS
8621
8622 /* Prevent further error messages. */
8623 maxindex = build_int_2 (0, 0);
8624 }
8625 }
8626
8627 if (!maxindex)
8628 {
8629 if (do_default)
8630 maxindex = build_int_2 (0, 0);
8631 value = 2;
8632 }
8633
8634 if (maxindex)
8635 {
51c184be 8636 tree itype;
6ab5c740
NS
8637 tree domain;
8638
8639 domain = build_index_type (maxindex);
8640 TYPE_DOMAIN (type) = domain;
51c184be 8641
dff6b454 8642 if (! TREE_TYPE (maxindex))
6ab5c740 8643 TREE_TYPE (maxindex) = domain;
51c184be
MS
8644 if (initial_value)
8645 itype = TREE_TYPE (initial_value);
8646 else
8647 itype = NULL;
8648 if (itype && !TYPE_DOMAIN (itype))
6ab5c740 8649 TYPE_DOMAIN (itype) = domain;
dff6b454
RK
8650 /* The type of the main variant should never be used for arrays
8651 of different sizes. It should only ever be completed with the
8652 size of the array. */
8653 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
6ab5c740 8654 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8d08fdba
MS
8655 }
8656
8657 /* Lay out the type now that we can get the real answer. */
8658
8659 layout_type (type);
8660
8661 return value;
8662}
8663\f
8664/* Return zero if something is declared to be a member of type
8665 CTYPE when in the context of CUR_TYPE. STRING is the error
8666 message to print in that case. Otherwise, quietly return 1. */
e92cc029 8667
8d08fdba 8668static int
4dacf5bd 8669member_function_or_else (ctype, cur_type, flags)
8d08fdba 8670 tree ctype, cur_type;
4dacf5bd 8671 enum overload_flags flags;
8d08fdba
MS
8672{
8673 if (ctype && ctype != cur_type)
8674 {
4dacf5bd 8675 if (flags == DTOR_FLAG)
2ae7bada
NS
8676 cp_error ("destructor for alien class `%T' cannot be a member",
8677 ctype);
4dacf5bd 8678 else
2ae7bada
NS
8679 cp_error ("constructor for alien class `%T' cannot be a member",
8680 ctype);
8d08fdba
MS
8681 return 0;
8682 }
8683 return 1;
8684}
8685\f
8686/* Subroutine of `grokdeclarator'. */
8687
8688/* Generate errors possibly applicable for a given set of specifiers.
8689 This is for ARM $7.1.2. */
e92cc029 8690
8d08fdba
MS
8691static void
8692bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8693 tree object;
d8e178a0 8694 const char *type;
8d08fdba
MS
8695 int virtualp, quals, friendp, raises, inlinep;
8696{
8697 if (virtualp)
8251199e 8698 cp_error ("`%D' declared as a `virtual' %s", object, type);
8d08fdba 8699 if (inlinep)
8251199e 8700 cp_error ("`%D' declared as an `inline' %s", object, type);
8d08fdba 8701 if (quals)
8251199e 8702 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
a28e3c7f 8703 object, type);
8d08fdba 8704 if (friendp)
f8e55f34 8705 cp_error_at ("`%D' declared as a friend", object);
a714e5c5
JM
8706 if (raises && !TYPE_PTRFN_P (TREE_TYPE (object))
8707 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))
f8e55f34 8708 cp_error_at ("`%D' declared with an exception specification", object);
8d08fdba
MS
8709}
8710
8711/* CTYPE is class type, or null if non-class.
8712 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8713 or METHOD_TYPE.
8714 DECLARATOR is the function's name.
8715 VIRTUALP is truthvalue of whether the function is virtual or not.
8716 FLAGS are to be passed through to `grokclassfn'.
8717 QUALS are qualifiers indicating whether the function is `const'
8718 or `volatile'.
8719 RAISES is a list of exceptions that this function can raise.
8720 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 8721 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 8722
20496fa2 8723 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 8724 applicable error messages. */
e92cc029 8725
8d08fdba 8726static tree
386b8a85 8727grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7a8f9fa9 8728 raises, check, friendp, publicp, inlinep, funcdef_flag,
2c73f9f5 8729 template_count, in_namespace)
8d08fdba
MS
8730 tree ctype, type;
8731 tree declarator;
386b8a85 8732 tree orig_declarator;
8d08fdba
MS
8733 int virtualp;
8734 enum overload_flags flags;
7a8f9fa9 8735 tree quals, raises;
386b8a85 8736 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
2c73f9f5 8737 tree in_namespace;
8d08fdba 8738{
1951a1b6 8739 tree decl;
8d08fdba 8740 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
856216bb 8741 int has_default_arg = 0;
42976354 8742 tree t;
8d08fdba 8743
8d08fdba
MS
8744 if (raises)
8745 {
f30432d7 8746 type = build_exception_variant (type, raises);
8d08fdba 8747 }
c11b6f21 8748
8d08fdba 8749 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
2c73f9f5 8750 /* Propagate volatile out from type to decl. */
8d08fdba 8751 if (TYPE_VOLATILE (type))
893de33c 8752 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 8753
79c4d4b7 8754 /* If this decl has namespace scope, set that up. */
2c73f9f5 8755 if (in_namespace)
b262d64c 8756 set_decl_namespace (decl, in_namespace, friendp);
adae082f 8757 else if (!ctype)
79c4d4b7 8758 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 8759
0f8766b8
JM
8760 /* `main' and builtins have implicit 'C' linkage. */
8761 if ((MAIN_NAME_P (declarator)
8762 || (IDENTIFIER_LENGTH (declarator) > 10
8763 && IDENTIFIER_POINTER (declarator)[0] == '_'
8764 && IDENTIFIER_POINTER (declarator)[1] == '_'
8765 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8766 && current_lang_name == lang_name_cplusplus
94706a5c 8767 && ctype == NULL_TREE
79c4d4b7
JM
8768 /* NULL_TREE means global namespace. */
8769 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 8770 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 8771
8d08fdba
MS
8772 /* Should probably propagate const out from type to decl I bet (mrs). */
8773 if (staticp)
8774 {
8775 DECL_STATIC_FUNCTION_P (decl) = 1;
8776 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
8777 }
8778
e76a2646 8779 if (ctype)
4f1c5b7d 8780 DECL_CONTEXT (decl) = ctype;
e76a2646 8781
0f8766b8 8782 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 8783 {
848b92e1 8784 if (processing_template_decl)
cb9a3ff8 8785 error ("cannot declare `::main' to be a template");
faae18ab 8786 if (inlinep)
cb9a3ff8 8787 error ("cannot declare `::main' to be inline");
f22967f3 8788 if (!publicp)
cb9a3ff8 8789 error ("cannot declare `::main' to be static");
f22967f3
MM
8790 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8791 integer_type_node))
8792 error ("`main' must return `int'");
faae18ab
MS
8793 inlinep = 0;
8794 publicp = 1;
8795 }
50a6dbd7 8796
59e76fc6
JM
8797 /* Members of anonymous types and local classes have no linkage; make
8798 them internal. */
1951a1b6
JM
8799 /* FIXME what if it gets a name from typedef? */
8800 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 8801 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
8802 publicp = 0;
8803
8804 if (publicp)
8805 {
8806 /* [basic.link]: A name with no linkage (notably, the name of a class
8807 or enumeration declared in a local scope) shall not be used to
8808 declare an entity with linkage.
8809
8810 Only check this for public decls for now. */
8811 t = no_linkage_check (TREE_TYPE (decl));
8812 if (t)
8813 {
1951a1b6 8814 if (TYPE_ANONYMOUS_P (t))
7f7c930e 8815 {
eb68cb58 8816 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
8817 /* Allow this; it's pretty common in C. */;
8818 else
1951a1b6
JM
8819 {
8820 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8821 decl);
8822 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
8823 cp_pedwarn_at ("\
8824`%#D' does not refer to the unqualified type, so it is not used for linkage",
8825 TYPE_NAME (t));
8826 }
7f7c930e 8827 }
50a6dbd7 8828 else
8251199e 8829 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
cce2be43 8830 decl, t);
50a6dbd7
JM
8831 }
8832 }
8833
893de33c 8834 TREE_PUBLIC (decl) = publicp;
faae18ab 8835 if (! publicp)
893de33c
JM
8836 {
8837 DECL_INTERFACE_KNOWN (decl) = 1;
8838 DECL_NOT_REALLY_EXTERN (decl) = 1;
8839 }
faae18ab
MS
8840
8841 if (inlinep)
79065db2 8842 DECL_DECLARED_INLINE_P (decl) = DECL_INLINE (decl) = 1;
8d08fdba
MS
8843
8844 DECL_EXTERNAL (decl) = 1;
8845 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8846 {
8251199e 8847 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8d08fdba
MS
8848 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8849 quals = NULL_TREE;
8850 }
8851
596ea4e5 8852 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8d08fdba
MS
8853 grok_op_properties (decl, virtualp, check < 0);
8854
4f1c5b7d 8855 if (ctype && decl_function_context (decl))
893de33c 8856 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 8857
42976354
BK
8858 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8859 if (TREE_PURPOSE (t)
8860 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8861 {
856216bb 8862 has_default_arg = 1;
42976354
BK
8863 break;
8864 }
8865
f9d94ea4
JM
8866 if (friendp
8867 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8868 {
8869 if (funcdef_flag)
8251199e
JM
8870 cp_error
8871 ("defining explicit specialization `%D' in friend declaration",
f9d94ea4
JM
8872 orig_declarator);
8873 else
8874 {
76e57b45
NS
8875 tree fns = TREE_OPERAND (orig_declarator, 0);
8876 tree args = TREE_OPERAND (orig_declarator, 1);
d363e7bf 8877
7e2421f7
MM
8878 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8879 {
8880 /* Something like `template <class T> friend void f<T>()'. */
cb9a3ff8 8881 cp_error ("invalid use of template-id `%D' in declaration of primary template",
7e2421f7 8882 orig_declarator);
20496fa2 8883 return NULL_TREE;
7e2421f7
MM
8884 }
8885
856216bb 8886
f9d94ea4
JM
8887 /* A friend declaration of the form friend void f<>(). Record
8888 the information in the TEMPLATE_ID_EXPR. */
8889 SET_DECL_IMPLICIT_INSTANTIATION (decl);
76e57b45
NS
8890
8891 if (TREE_CODE (fns) == COMPONENT_REF)
8892 {
8893 /* Due to bison parser ickiness, we will have already looked
8894 up an operator_name or PFUNCNAME within the current class
8895 (see template_id in parse.y). If the current class contains
8896 such a name, we'll get a COMPONENT_REF here. Undo that. */
d363e7bf 8897
76e57b45
NS
8898 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
8899 == current_class_type, 20001120);
8900 fns = TREE_OPERAND (fns, 1);
8901 }
8902 my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
8903 || TREE_CODE (fns) == LOOKUP_EXPR
8904 || TREE_CODE (fns) == OVERLOAD, 20001120);
8905 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
856216bb
MM
8906
8907 if (has_default_arg)
8908 {
8909 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8910 decl);
8911 return NULL_TREE;
8912 }
8913
8914 if (inlinep)
8915 {
68642fb6 8916 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
856216bb
MM
8917 decl);
8918 return NULL_TREE;
8919 }
f9d94ea4 8920 }
f84b4be9 8921 }
386b8a85 8922
856216bb
MM
8923 if (has_default_arg)
8924 add_defarg_fn (decl);
8925
1eb0072d
JM
8926 if (funcdef_flag)
8927 /* Make the init_value nonzero so pushdecl knows this is not
8928 tentative. error_mark_node is replaced later with the BLOCK. */
8929 DECL_INITIAL (decl) = error_mark_node;
8930
93ca4ba7 8931 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
8932 TREE_NOTHROW (decl) = 1;
8933
75650646 8934 /* Caller will do the rest of this. */
8d08fdba
MS
8935 if (check < 0)
8936 return decl;
8937
1951a1b6 8938 if (flags == NO_SPECIAL && ctype && constructor_name (ctype) == declarator)
74b846e0
MM
8939 DECL_CONSTRUCTOR_P (decl) = 1;
8940
8941 /* Function gets the ugly name, field gets the nice one. This call
8942 may change the type of the function (because of default
8943 parameters)! */
8944 if (ctype != NULL_TREE)
8945 grokclassfn (ctype, decl, flags, quals);
8946
8947 decl = check_explicit_specialization (orig_declarator, decl,
8948 template_count,
8949 2 * (funcdef_flag != 0) +
8950 4 * (friendp != 0));
8951 if (decl == error_mark_node)
8952 return NULL_TREE;
98c1c668 8953
74b846e0
MM
8954 if (ctype != NULL_TREE
8955 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8956 && check)
8d08fdba 8957 {
74b846e0 8958 tree old_decl;
8d08fdba 8959
74b846e0 8960 old_decl = check_classfn (ctype, decl);
8d08fdba 8961
74b846e0
MM
8962 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
8963 /* Because grokfndecl is always supposed to return a
8964 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8965 here. We depend on our callers to figure out that its
8966 really a template that's being returned. */
8967 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6c30752f 8968
74b846e0
MM
8969 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
8970 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5566b478 8971 {
74b846e0
MM
8972 /* Remove the `this' parm added by grokclassfn.
8973 XXX Isn't this done in start_function, too? */
3afb32a4 8974 revert_static_member_fn (decl);
74b846e0 8975 last_function_parms = TREE_CHAIN (last_function_parms);
5566b478 8976 }
74b846e0
MM
8977 if (old_decl && DECL_ARTIFICIAL (old_decl))
8978 cp_error ("definition of implicitly-declared `%D'", old_decl);
8d08fdba 8979
74b846e0 8980 if (old_decl)
8d08fdba 8981 {
74b846e0
MM
8982 /* Since we've smashed OLD_DECL to its
8983 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8984 if (TREE_CODE (decl) == TEMPLATE_DECL)
8985 decl = DECL_TEMPLATE_RESULT (decl);
8986
8987 /* Attempt to merge the declarations. This can fail, in
8988 the case of some illegal specialization declarations. */
8989 if (!duplicate_decls (decl, old_decl))
8990 cp_error ("no `%#D' member function declared in class `%T'",
8991 decl, ctype);
8992 return old_decl;
8d08fdba
MS
8993 }
8994 }
74b846e0
MM
8995
8996 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8997 return NULL_TREE;
8998
8999 if (ctype == NULL_TREE || check)
9000 return decl;
9001
9002 if (virtualp)
cbb40945 9003 DECL_VIRTUAL_P (decl) = 1;
74b846e0 9004
8d08fdba
MS
9005 return decl;
9006}
9007
9008static tree
2c73f9f5 9009grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8d08fdba
MS
9010 tree type;
9011 tree declarator;
d2e5ee5c 9012 RID_BIT_TYPE *specbits_in;
8d08fdba 9013 int initialized;
a9aedbc2 9014 int constp;
2c73f9f5 9015 tree in_namespace;
8d08fdba
MS
9016{
9017 tree decl;
f7da6097
MS
9018 RID_BIT_TYPE specbits;
9019
9020 specbits = *specbits_in;
8d08fdba
MS
9021
9022 if (TREE_CODE (type) == OFFSET_TYPE)
9023 {
9024 /* If you declare a static member so that it
9025 can be initialized, the code will reach here. */
5b605f68
MS
9026 tree basetype = TYPE_OFFSET_BASETYPE (type);
9027 type = TREE_TYPE (type);
4ce3d537 9028 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68 9029 DECL_CONTEXT (decl) = basetype;
8d08fdba
MS
9030 }
9031 else
30394414 9032 {
79c4d4b7
JM
9033 tree context;
9034
9035 if (in_namespace)
9036 context = in_namespace;
9037 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
9038 context = current_namespace;
820fcad8
JM
9039 else
9040 context = NULL_TREE;
79c4d4b7 9041
5d2ed28c
MM
9042 /* For namespace-scope variables, declared in a template, we
9043 need the full lang_decl. The same is true for
9044 namespace-scope variables that do not have C++ language
9045 linkage. */
9046 if (context
9047 && (processing_template_decl
9048 || current_lang_name != lang_name_cplusplus))
cd9f6678 9049 decl = build_lang_decl (VAR_DECL, declarator, type);
9188c363 9050 else
c82dbd95 9051 decl = build_decl (VAR_DECL, declarator, type);
79c4d4b7
JM
9052
9053 if (context)
b262d64c 9054 set_decl_namespace (decl, context, 0);
79c4d4b7
JM
9055
9056 context = DECL_CONTEXT (decl);
5362b086 9057 if (declarator && context && current_lang_name != lang_name_c)
92643fea
MM
9058 /* We can't mangle lazily here because we don't have any
9059 way to recover whether or not a variable was `extern
9060 "C"' later. */
9061 mangle_decl (decl);
30394414 9062 }
6060a796 9063
2c73f9f5 9064 if (in_namespace)
b262d64c 9065 set_decl_namespace (decl, in_namespace, 0);
2c73f9f5 9066
8d08fdba
MS
9067 if (RIDBIT_SETP (RID_EXTERN, specbits))
9068 {
9069 DECL_THIS_EXTERN (decl) = 1;
9070 DECL_EXTERNAL (decl) = !initialized;
9071 }
9072
9073 /* In class context, static means one per class,
9074 public access, and static storage. */
2b9dc906 9075 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba
MS
9076 {
9077 TREE_PUBLIC (decl) = 1;
9078 TREE_STATIC (decl) = 1;
5b605f68 9079 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
9080 }
9081 /* At top level, either `static' or no s.c. makes a definition
9082 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 9083 else if (toplevel_bindings_p ())
8d08fdba 9084 {
a9aedbc2 9085 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 9086 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
9087 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9088 }
9089 /* Not at top level, only `static' makes a static definition. */
9090 else
9091 {
9092 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9093 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9094 }
50a6dbd7
JM
9095
9096 if (TREE_PUBLIC (decl))
9097 {
9098 /* [basic.link]: A name with no linkage (notably, the name of a class
9099 or enumeration declared in a local scope) shall not be used to
9100 declare an entity with linkage.
9101
9102 Only check this for public decls for now. */
9103 tree t = no_linkage_check (TREE_TYPE (decl));
9104 if (t)
9105 {
1951a1b6 9106 if (TYPE_ANONYMOUS_P (t))
50a6dbd7
JM
9107 /* Ignore for now; `enum { foo } e' is pretty common. */;
9108 else
8251199e 9109 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
50a6dbd7
JM
9110 decl, t);
9111 }
9112 }
9113
8d08fdba
MS
9114 return decl;
9115}
9116
d8f8dca1
MM
9117/* Create and return a canonical pointer to member function type, for
9118 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
9119
9120tree
9121build_ptrmemfunc_type (type)
9122 tree type;
9123{
9124 tree fields[4];
9125 tree t;
46cbda4a 9126 tree unqualified_variant = NULL_TREE;
8d08fdba 9127
d48ebde1
NS
9128 if (type == error_mark_node)
9129 return type;
d363e7bf 9130
8d08fdba
MS
9131 /* If a canonical type already exists for this type, use it. We use
9132 this method instead of type_hash_canon, because it only does a
9133 simple equality check on the list of field members. */
9134
9135 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9136 return t;
9137
46cbda4a
MM
9138 /* Make sure that we always have the unqualified pointer-to-member
9139 type first. */
9140 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
68642fb6 9141 unqualified_variant
46cbda4a
MM
9142 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9143
33848bb0 9144 t = make_aggr_type (RECORD_TYPE);
2c73f9f5 9145 /* Let the front-end know this is a pointer to member function... */
db5ae43f 9146 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 9147 /* ... and not really an aggregate. */
7ddedda4 9148 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 9149
1f84ec23
MM
9150 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
9151 fields[1] = build_decl (FIELD_DECL, delta_identifier,
9152 delta_type_node);
9153 finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8d08fdba 9154
8d08fdba
MS
9155 /* Zap out the name so that the back-end will give us the debugging
9156 information for this anonymous RECORD_TYPE. */
9157 TYPE_NAME (t) = NULL_TREE;
9158
46cbda4a
MM
9159 /* If this is not the unqualified form of this pointer-to-member
9160 type, set the TYPE_MAIN_VARIANT for this type to be the
9161 unqualified type. Since they are actually RECORD_TYPEs that are
9162 not variants of each other, we must do this manually. */
9163 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9164 {
9165 t = build_qualified_type (t, CP_TYPE_QUALS (type));
9166 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9167 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9168 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9169 }
9170
9171 /* Cache this pointer-to-member type so that we can find it again
9172 later. */
8d08fdba
MS
9173 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9174
e92cc029 9175 /* Seems to be wanted. */
8d08fdba 9176 CLASSTYPE_GOT_SEMICOLON (t) = 1;
46cbda4a 9177
8d08fdba
MS
9178 return t;
9179}
9180
b17e2870
JM
9181/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9182 Check to see that the definition is valid. Issue appropriate error
9183 messages. Return 1 if the definition is particularly bad, or 0
9184 otherwise. */
9185
9186int
9187check_static_variable_definition (decl, type)
9188 tree decl;
9189 tree type;
9190{
9191 /* Motion 10 at San Diego: If a static const integral data member is
9192 initialized with an integral constant expression, the initializer
9193 may appear either in the declaration (within the class), or in
9194 the definition, but not both. If it appears in the class, the
9195 member is a member constant. The file-scope definition is always
9196 required. */
9197 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9198 {
cb9a3ff8 9199 cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
b17e2870
JM
9200 type);
9201 /* If we just return the declaration, crashes will sometimes
9202 occur. We therefore return void_type_node, as if this was a
9203 friend declaration, to cause callers to completely ignore
9204 this declaration. */
9205 return 1;
9206 }
9207 else if (!CP_TYPE_CONST_P (type))
cb9a3ff8 9208 cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
b17e2870
JM
9209 decl);
9210 else if (pedantic && !INTEGRAL_TYPE_P (type))
cb9a3ff8 9211 cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
b17e2870
JM
9212
9213 return 0;
9214}
9215
2848ad0f
MM
9216/* Given the SIZE (i.e., number of elements) in an array, compute an
9217 appropriate index type for the array. If non-NULL, NAME is the
9218 name of the thing being declared. */
9219
c95cd22e 9220tree
2848ad0f
MM
9221compute_array_index_type (name, size)
9222 tree name;
9223 tree size;
9224{
9225 tree itype;
9226
9227 /* The size might be the result of a cast. */
9228 STRIP_TYPE_NOPS (size);
9229
9230 /* It might be a const variable or enumeration constant. */
fc611ce0 9231 size = decl_constant_value (size);
2848ad0f
MM
9232
9233 /* If this involves a template parameter, it will be a constant at
9234 instantiation time, but we don't know what the value is yet.
9235 Even if no template parameters are involved, we may an expression
9236 that is not a constant; we don't even simplify `1 + 2' when
9237 processing a template. */
9238 if (processing_template_decl)
9239 {
9240 /* Resolve a qualified reference to an enumerator or static
9241 const data member of ours. */
9242 if (TREE_CODE (size) == SCOPE_REF
9243 && TREE_OPERAND (size, 0) == current_class_type)
9244 {
9245 tree t = lookup_field (current_class_type,
9246 TREE_OPERAND (size, 1), 0, 0);
9247 if (t)
9248 size = t;
9249 }
9250
9251 return build_index_type (build_min (MINUS_EXPR, sizetype,
9252 size, integer_one_node));
9253 }
9254
9255 /* The array bound must be an integer type. */
9256 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9257 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9258 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9259 {
d67cdbc3
JM
9260 if (name)
9261 cp_error ("size of array `%D' has non-integer type", name);
9262 else
9263 cp_error ("size of array has non-integer type");
2848ad0f
MM
9264 size = integer_one_node;
9265 }
9266
9267 /* Normally, the array-bound will be a constant. */
2bb5d995 9268 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
9269 {
9270 /* Check to see if the array bound overflowed. Make that an
9271 error, no matter how generous we're being. */
9272 int old_flag_pedantic_errors = flag_pedantic_errors;
9273 int old_pedantic = pedantic;
9274 pedantic = flag_pedantic_errors = 1;
9275 constant_expression_warning (size);
9276 pedantic = old_pedantic;
9277 flag_pedantic_errors = old_flag_pedantic_errors;
9278
9279 /* An array must have a positive number of elements. */
9280 if (INT_CST_LT (size, integer_zero_node))
9281 {
d67cdbc3
JM
9282 if (name)
9283 cp_error ("size of array `%D' is negative", name);
9284 else
9285 cp_error ("size of array is negative");
2848ad0f
MM
9286 size = integer_one_node;
9287 }
9288 /* Except that an extension we allow zero-sized arrays. We
68642fb6 9289 always allow them in system headers because glibc uses
2848ad0f
MM
9290 them. */
9291 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
9292 {
9293 if (name)
cb9a3ff8 9294 cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
d67cdbc3 9295 else
cb9a3ff8 9296 cp_pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 9297 }
2848ad0f 9298 }
2bb5d995
JM
9299 else if (TREE_CONSTANT (size))
9300 {
9301 /* `(int) &fn' is not a valid array bound. */
9302 if (name)
9303 cp_error ("size of array `%D' is not an integral constant-expression",
9304 name);
9305 else
9306 cp_error ("size of array is not an integral constant-expression");
9307 }
2848ad0f
MM
9308
9309 /* Compute the index of the largest element in the array. It is
9310 one less than the number of elements in the array. */
9311 itype
ab76ca54
MM
9312 = fold (cp_build_binary_op (MINUS_EXPR,
9313 cp_convert (ssizetype, size),
9314 cp_convert (ssizetype,
9315 integer_one_node)));
68642fb6 9316
2848ad0f
MM
9317 /* Check for variable-sized arrays. We allow such things as an
9318 extension, even though they are not allowed in ANSI/ISO C++. */
9319 if (!TREE_CONSTANT (itype))
9320 {
9321 if (pedantic)
9322 {
9323 if (name)
cb9a3ff8 9324 cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
2848ad0f
MM
9325 name);
9326 else
cb9a3ff8 9327 cp_pedwarn ("ISO C++ forbids variable-size array");
2848ad0f
MM
9328 }
9329
9330 /* Create a variable-sized array index type. */
9331 itype = variable_size (itype);
9332 }
9333 /* Make sure that there was no overflow when creating to a signed
9334 index type. (For example, on a 32-bit machine, an array with
9335 size 2^32 - 1 is too big.) */
9336 else if (TREE_OVERFLOW (itype))
9337 {
9338 error ("overflow in array dimension");
9339 TREE_OVERFLOW (itype) = 0;
9340 }
68642fb6 9341
2848ad0f
MM
9342 /* Create and return the appropriate index type. */
9343 return build_index_type (itype);
9344}
9345
9346/* Returns an ARRAY_TYPE for an array with SIZE elements of the
9347 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9348 with this type. */
9349
9350static tree
9351create_array_type_for_decl (name, type, size)
9352 tree name;
9353 tree type;
9354 tree size;
9355{
9356 tree itype = NULL_TREE;
9357 const char* error_msg;
9358
9359 /* If things have already gone awry, bail now. */
9360 if (type == error_mark_node || size == error_mark_node)
9361 return error_mark_node;
9362
9363 /* Assume that everything will go OK. */
9364 error_msg = NULL;
9365
9366 /* There are some types which cannot be array elements. */
9367 switch (TREE_CODE (type))
9368 {
9369 case VOID_TYPE:
9370 error_msg = "array of void";
9371 break;
9372
9373 case FUNCTION_TYPE:
9374 error_msg = "array of functions";
9375 break;
9376
9377 case REFERENCE_TYPE:
9378 error_msg = "array of references";
9379 break;
9380
9381 case OFFSET_TYPE:
9382 error_msg = "array of data members";
9383 break;
9384
9385 case METHOD_TYPE:
9386 error_msg = "array of function members";
9387 break;
9388
9389 default:
9390 break;
9391 }
9392
9393 /* If something went wrong, issue an error-message and return. */
9394 if (error_msg)
9395 {
9396 if (name)
9397 cp_error ("declaration of `%D' as %s", name, error_msg);
9398 else
9399 cp_error ("creating %s", error_msg);
9400
9401 return error_mark_node;
9402 }
9403
9404 /* [dcl.array]
68642fb6 9405
2848ad0f
MM
9406 The constant expressions that specify the bounds of the arrays
9407 can be omitted only for the first member of the sequence. */
9408 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9409 {
cb9a3ff8 9410 cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
2848ad0f 9411 name);
2848ad0f
MM
9412
9413 return error_mark_node;
9414 }
9415
9416 /* Figure out the index type for the array. */
9417 if (size)
9418 itype = compute_array_index_type (name, size);
9419
9420 return build_cplus_array_type (type, itype);
9421}
9422
3dbc07b6
MM
9423/* Check that it's OK to declare a function with the indicated TYPE.
9424 SFK indicates the kind of special function (if any) that this
1f84ec23 9425 function is. OPTYPE is the type given in a conversion operator
3dbc07b6
MM
9426 declaration. Returns the actual return type of the function; that
9427 may be different than TYPE if an error occurs, or for certain
9428 special functions. */
9429
9430static tree
1f84ec23 9431check_special_function_return_type (sfk, type, optype)
3dbc07b6
MM
9432 special_function_kind sfk;
9433 tree type;
3dbc07b6
MM
9434 tree optype;
9435{
9436 switch (sfk)
9437 {
9438 case sfk_constructor:
9439 if (type)
9440 cp_error ("return type specification for constructor invalid");
5362b086 9441
1f84ec23
MM
9442 /* In the new ABI constructors do not return a value. */
9443 type = void_type_node;
3dbc07b6
MM
9444 break;
9445
9446 case sfk_destructor:
9447 if (type)
9448 cp_error ("return type specification for destructor invalid");
9449 type = void_type_node;
9450 break;
9451
9452 case sfk_conversion:
9453 if (type && !same_type_p (type, optype))
9454 cp_error ("operator `%T' declared to return `%T'", optype, type);
9455 else if (type)
9456 cp_pedwarn ("return type specified for `operator %T'", optype);
9457 type = optype;
9458 break;
9459
9460 default:
9461 my_friendly_abort (20000408);
9462 break;
9463 }
9464
9465 return type;
9466}
9467
8d08fdba
MS
9468/* Given declspecs and a declarator,
9469 determine the name and type of the object declared
9470 and construct a ..._DECL node for it.
9471 (In one case we can return a ..._TYPE node instead.
9472 For invalid input we sometimes return 0.)
9473
9474 DECLSPECS is a chain of tree_list nodes whose value fields
9475 are the storage classes and type specifiers.
9476
9477 DECL_CONTEXT says which syntactic context this declaration is in:
9478 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9479 FUNCDEF for a function definition. Like NORMAL but a few different
9480 error messages in each case. Return value may be zero meaning
9481 this definition is too screwy to try to parse.
9482 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9483 handle member functions (which have FIELD context).
9484 Return value may be zero meaning this definition is too screwy to
9485 try to parse.
9486 PARM for a parameter declaration (either within a function prototype
9487 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 9488 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
9489 TYPENAME if for a typename (in a cast or sizeof).
9490 Don't make a DECL node; just return the ..._TYPE node.
9491 FIELD for a struct or union field; make a FIELD_DECL.
9492 BITFIELD for a field with specified width.
9493 INITIALIZED is 1 if the decl has an initializer.
9494
b17e2870
JM
9495 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9496 normal attributes in TREE_PURPOSE, or NULL_TREE.
9497
70adf8a9 9498 In the TYPENAME case, DECLARATOR is really an abstract declarator.
8d08fdba
MS
9499 It may also be so in the PARM case, for a prototype where the
9500 argument type is specified but not the name.
9501
9502 This function is where the complicated C meanings of `static'
9503 and `extern' are interpreted.
9504
9505 For C++, if there is any monkey business to do, the function which
9506 calls this one must do it, i.e., prepending instance variables,
9507 renaming overloaded function names, etc.
9508
9509 Note that for this C++, it is an error to define a method within a class
9510 which does not belong to that class.
9511
9512 Except in the case where SCOPE_REFs are implicitly known (such as
9513 methods within a class being redundantly qualified),
9514 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9515 (class_name::decl_name). The caller must also deal with this.
9516
9517 If a constructor or destructor is seen, and the context is FIELD,
9518 then the type gains the attribute TREE_HAS_x. If such a declaration
9519 is erroneous, NULL_TREE is returned.
9520
9521 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
535233a8
NS
9522 function, these are the qualifiers to give to the `this' pointer. We
9523 apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
8d08fdba
MS
9524
9525 May return void_type_node if the declarator turned out to be a friend.
9526 See grokfield for details. */
9527
8d08fdba 9528tree
c11b6f21 9529grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8d08fdba
MS
9530 tree declspecs;
9531 tree declarator;
9532 enum decl_context decl_context;
9533 int initialized;
c11b6f21 9534 tree attrlist;
8d08fdba
MS
9535{
9536 RID_BIT_TYPE specbits;
9537 int nclasses = 0;
9538 tree spec;
9539 tree type = NULL_TREE;
9540 int longlong = 0;
9541 int constp;
91063b51 9542 int restrictp;
8d08fdba 9543 int volatilep;
91063b51 9544 int type_quals;
db5ae43f 9545 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
9546 int explicit_int = 0;
9547 int explicit_char = 0;
37c46b43 9548 int defaulted_int = 0;
8d08fdba 9549 tree typedef_decl = NULL_TREE;
9c0758dd 9550 const char *name;
8d08fdba
MS
9551 tree typedef_type = NULL_TREE;
9552 int funcdef_flag = 0;
9553 enum tree_code innermost_code = ERROR_MARK;
9554 int bitfield = 0;
6125f3be
DE
9555#if 0
9556 /* See the code below that used this. */
f6abb50a 9557 tree decl_machine_attr = NULL_TREE;
6125f3be 9558#endif
8d08fdba
MS
9559 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9560 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9561 tree init = NULL_TREE;
9562
9563 /* Keep track of what sort of function is being processed
9564 so that we can warn about default return values, or explicit
9565 return values which do not match prescribed defaults. */
3dbc07b6 9566 special_function_kind sfk = sfk_none;
8d08fdba
MS
9567
9568 tree dname = NULL_TREE;
9569 tree ctype = current_class_type;
9570 tree ctor_return_type = NULL_TREE;
9571 enum overload_flags flags = NO_SPECIAL;
8d08fdba 9572 tree quals = NULL_TREE;
c11b6f21 9573 tree raises = NULL_TREE;
386b8a85 9574 int template_count = 0;
2c73f9f5 9575 tree in_namespace = NULL_TREE;
1eab9b56
JM
9576 tree inner_attrs;
9577 int ignore_attrs;
8d08fdba
MS
9578
9579 RIDBIT_RESET_ALL (specbits);
9580 if (decl_context == FUNCDEF)
9581 funcdef_flag = 1, decl_context = NORMAL;
9582 else if (decl_context == MEMFUNCDEF)
9583 funcdef_flag = -1, decl_context = FIELD;
9584 else if (decl_context == BITFIELD)
9585 bitfield = 1, decl_context = FIELD;
9586
8d08fdba
MS
9587 /* Look inside a declarator for the name being declared
9588 and get it as a string, for an error message. */
9589 {
be99da77
MS
9590 tree *next = &declarator;
9591 register tree decl;
8d08fdba
MS
9592 name = NULL;
9593
be99da77
MS
9594 while (next && *next)
9595 {
9596 decl = *next;
9597 switch (TREE_CODE (decl))
8d08fdba 9598 {
52fbc847
JM
9599 case TREE_LIST:
9600 /* For attributes. */
9601 next = &TREE_VALUE (decl);
9602 break;
9603
be99da77
MS
9604 case COND_EXPR:
9605 ctype = NULL_TREE;
9606 next = &TREE_OPERAND (decl, 0);
9607 break;
8d08fdba 9608
2c73f9f5 9609 case BIT_NOT_EXPR: /* For C++ destructors! */
8d08fdba 9610 {
be99da77
MS
9611 tree name = TREE_OPERAND (decl, 0);
9612 tree rename = NULL_TREE;
9613
9614 my_friendly_assert (flags == NO_SPECIAL, 152);
9615 flags = DTOR_FLAG;
3dbc07b6 9616 sfk = sfk_destructor;
5566b478
MS
9617 if (TREE_CODE (name) == TYPE_DECL)
9618 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
9619 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9620 if (ctype == NULL_TREE)
9621 {
9622 if (current_class_type == NULL_TREE)
9623 {
8251199e 9624 error ("destructors must be member functions");
be99da77
MS
9625 flags = NO_SPECIAL;
9626 }
9627 else
9628 {
9629 tree t = constructor_name (current_class_name);
9630 if (t != name)
9631 rename = t;
9632 }
9633 }
8d08fdba 9634 else
be99da77
MS
9635 {
9636 tree t = constructor_name (ctype);
9637 if (t != name)
9638 rename = t;
9639 }
51c184be 9640
be99da77 9641 if (rename)
39211cd5 9642 {
8251199e 9643 cp_error ("destructor `%T' must match class name `%T'",
5566b478 9644 name, rename);
be99da77 9645 TREE_OPERAND (decl, 0) = rename;
39211cd5 9646 }
be99da77 9647 next = &name;
51c184be 9648 }
be99da77 9649 break;
8d08fdba 9650
be99da77 9651 case ADDR_EXPR: /* C++ reference declaration */
2c73f9f5 9652 /* Fall through. */
be99da77
MS
9653 case ARRAY_REF:
9654 case INDIRECT_REF:
9655 ctype = NULL_TREE;
9656 innermost_code = TREE_CODE (decl);
9657 next = &TREE_OPERAND (decl, 0);
9658 break;
8d08fdba 9659
be99da77 9660 case CALL_EXPR:
43f887f9 9661 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8d08fdba 9662 {
b17e2870
JM
9663 /* This is actually a variable declaration using
9664 constructor syntax. We need to call start_decl and
9665 cp_finish_decl so we can get the variable
9666 initialized... */
9667
9668 tree attributes, prefix_attributes;
be99da77
MS
9669
9670 *next = TREE_OPERAND (decl, 0);
43f887f9 9671 init = CALL_DECLARATOR_PARMS (decl);
be99da77 9672
b17e2870
JM
9673 if (attrlist)
9674 {
9675 attributes = TREE_PURPOSE (attrlist);
9676 prefix_attributes = TREE_VALUE (attrlist);
9677 }
9678 else
9679 {
9680 attributes = NULL_TREE;
9681 prefix_attributes = NULL_TREE;
9682 }
9683
9684 decl = start_decl (declarator, declspecs, 1,
9685 attributes, prefix_attributes);
9fc336c7 9686 decl_type_access_control (decl);
1eb0072d
JM
9687 if (decl)
9688 {
9689 /* Look for __unused__ attribute */
9690 if (TREE_USED (TREE_TYPE (decl)))
9691 TREE_USED (decl) = 1;
9692 finish_decl (decl, init, NULL_TREE);
9693 }
9694 else
9695 cp_error ("invalid declarator");
be99da77 9696 return 0;
8d08fdba 9697 }
be99da77
MS
9698 innermost_code = TREE_CODE (decl);
9699 if (decl_context == FIELD && ctype == NULL_TREE)
9700 ctype = current_class_type;
45537677 9701 if (ctype
c11b6f21 9702 && TREE_OPERAND (decl, 0)
45537677
MS
9703 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9704 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9705 == constructor_name_full (ctype))
9706 || (DECL_NAME (TREE_OPERAND (decl, 0))
9707 == constructor_name (ctype)))))
be99da77
MS
9708 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9709 next = &TREE_OPERAND (decl, 0);
9710 decl = *next;
9711 if (ctype != NULL_TREE
9712 && decl != NULL_TREE && flags != DTOR_FLAG
9713 && decl == constructor_name (ctype))
8d08fdba 9714 {
3dbc07b6 9715 sfk = sfk_constructor;
be99da77 9716 ctor_return_type = ctype;
8d08fdba 9717 }
be99da77
MS
9718 ctype = NULL_TREE;
9719 break;
68642fb6 9720
386b8a85
JM
9721 case TEMPLATE_ID_EXPR:
9722 {
9723 tree fns = TREE_OPERAND (decl, 0);
9724
9725 if (TREE_CODE (fns) == LOOKUP_EXPR)
9726 fns = TREE_OPERAND (fns, 0);
9727
8f032717
MM
9728 dname = fns;
9729 if (TREE_CODE (dname) == COMPONENT_REF)
9730 dname = TREE_OPERAND (dname, 1);
9731 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9732 {
9733 my_friendly_assert (is_overloaded_fn (dname),
9734 19990331);
9735 dname = DECL_NAME (get_first_fn (dname));
9736 }
386b8a85 9737 }
2c73f9f5 9738 /* Fall through. */
be99da77
MS
9739
9740 case IDENTIFIER_NODE:
386b8a85
JM
9741 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9742 dname = decl;
9743
be99da77
MS
9744 next = 0;
9745
0e5921e8 9746 if (C_IS_RESERVED_WORD (dname))
8d08fdba 9747 {
8251199e 9748 cp_error ("declarator-id missing; using reserved word `%D'",
be99da77
MS
9749 dname);
9750 name = IDENTIFIER_POINTER (dname);
8d08fdba 9751 }
596ea4e5 9752 else if (!IDENTIFIER_TYPENAME_P (dname))
be99da77 9753 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
9754 else
9755 {
596ea4e5
AS
9756 my_friendly_assert (flags == NO_SPECIAL, 154);
9757 flags = TYPENAME_FLAG;
9758 ctor_return_type = TREE_TYPE (dname);
9759 sfk = sfk_conversion;
9760 if (IDENTIFIER_GLOBAL_VALUE (dname)
5362b086 9761 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (dname))
596ea4e5
AS
9762 == TYPE_DECL))
9763 name = IDENTIFIER_POINTER (dname);
9764 else
9765 name = "<invalid operator>";
8d08fdba 9766 }
be99da77 9767 break;
8d08fdba 9768
be99da77
MS
9769 /* C++ extension */
9770 case SCOPE_REF:
9771 {
9772 /* Perform error checking, and decide on a ctype. */
9773 tree cname = TREE_OPERAND (decl, 0);
9774 if (cname == NULL_TREE)
9775 ctype = NULL_TREE;
2c73f9f5
ML
9776 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9777 {
9778 ctype = NULL_TREE;
9779 in_namespace = TREE_OPERAND (decl, 0);
9780 TREE_OPERAND (decl, 0) = NULL_TREE;
9781 }
be99da77
MS
9782 else if (! is_aggr_type (cname, 1))
9783 TREE_OPERAND (decl, 0) = NULL_TREE;
9784 /* Must test TREE_OPERAND (decl, 1), in case user gives
9785 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9786 else if (TREE_OPERAND (decl, 1)
9787 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9788 ctype = cname;
73b0fce8 9789 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
a1281f45 9790 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
5566b478 9791 {
8251199e 9792 cp_error ("`%T::%D' is not a valid declarator", cname,
5566b478 9793 TREE_OPERAND (decl, 1));
8251199e 9794 cp_error (" perhaps you want `typename %T::%D' to make it a type",
5566b478
MS
9795 cname, TREE_OPERAND (decl, 1));
9796 return void_type_node;
9797 }
be99da77
MS
9798 else if (ctype == NULL_TREE)
9799 ctype = cname;
9800 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9801 TREE_OPERAND (decl, 0) = ctype;
9802 else
9803 {
9804 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9805 {
8251199e 9806 cp_error ("type `%T' is not derived from type `%T'",
be99da77
MS
9807 cname, ctype);
9808 TREE_OPERAND (decl, 0) = NULL_TREE;
9809 }
9810 else
9811 ctype = cname;
9812 }
9813
c91a56d2
MS
9814 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9815 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9816 == constructor_name_full (ctype))
9817 || (DECL_NAME (TREE_OPERAND (decl, 1))
9818 == constructor_name (ctype))))
be99da77
MS
9819 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9820 next = &TREE_OPERAND (decl, 1);
9821 decl = *next;
9822 if (ctype)
9823 {
9824 if (TREE_CODE (decl) == IDENTIFIER_NODE
9825 && constructor_name (ctype) == decl)
9826 {
3dbc07b6 9827 sfk = sfk_constructor;
be99da77
MS
9828 ctor_return_type = ctype;
9829 }
9830 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9831 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9832 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9833 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9834 {
3dbc07b6 9835 sfk = sfk_destructor;
be99da77
MS
9836 ctor_return_type = ctype;
9837 flags = DTOR_FLAG;
9838 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9839 next = &TREE_OPERAND (decl, 0);
9840 }
9841 }
9842 }
9843 break;
9844
9845 case ERROR_MARK:
9846 next = 0;
9847 break;
9848
45537677
MS
9849 case TYPE_DECL:
9850 /* Parse error puts this typespec where
9851 a declarator should go. */
8251199e 9852 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
45537677 9853 if (TREE_TYPE (decl) == current_class_type)
8251199e 9854 cp_error (" perhaps you want `%T' for a constructor",
45537677
MS
9855 current_class_name);
9856 dname = DECL_NAME (decl);
9857 name = IDENTIFIER_POINTER (dname);
9858
e92cc029 9859 /* Avoid giving two errors for this. */
45537677
MS
9860 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9861
58010b57 9862 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
45537677
MS
9863 *next = dname;
9864 next = 0;
9865 break;
9866
be99da77 9867 default:
8251199e 9868 cp_compiler_error ("`%D' as declarator", decl);
be99da77 9869 return 0; /* We used to do a 155 abort here. */
8d08fdba 9870 }
be99da77 9871 }
8d08fdba
MS
9872 }
9873
9874 /* A function definition's declarator must have the form of
9875 a function declarator. */
9876
9877 if (funcdef_flag && innermost_code != CALL_EXPR)
9878 return 0;
9879
e1cd6e56
MS
9880 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9881 && innermost_code != CALL_EXPR
9882 && ! (ctype && declspecs == NULL_TREE))
9883 {
8251199e 9884 cp_error ("declaration of `%D' as non-function", dname);
e1cd6e56
MS
9885 return void_type_node;
9886 }
9887
8d08fdba
MS
9888 /* Anything declared one level down from the top level
9889 must be one of the parameters of a function
9890 (because the body is at least two levels down). */
9891
9892 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9893 by not allowing C++ class definitions to specify their parameters
9894 with xdecls (must be spec.d in the parmlist).
9895
9896 Since we now wait to push a class scope until we are sure that
9897 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
9898 explicitly (since current_class_name is not yet alive).
9899
9900 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 9901
9188c363 9902 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2
MS
9903 {
9904 struct binding_level *b = current_binding_level;
9905 current_binding_level = b->level_chain;
9906 if (current_binding_level != 0 && toplevel_bindings_p ())
9907 decl_context = PARM;
9908 current_binding_level = b;
9909 }
8d08fdba 9910
34fc957d
NS
9911 if (name == NULL)
9912 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 9913
8d08fdba
MS
9914 /* Look through the decl specs and record which ones appear.
9915 Some typespecs are defined as built-in typenames.
9916 Others, the ones that are modifiers of other types,
9917 are represented by bits in SPECBITS: set the bits for
9918 the modifiers that appear. Storage class keywords are also in SPECBITS.
9919
9920 If there is a typedef name or a type, store the type in TYPE.
9921 This includes builtin typedefs such as `int'.
9922
9923 Set EXPLICIT_INT if the type is `int' or `char' and did not
9924 come from a user typedef.
9925
9926 Set LONGLONG if `long' is mentioned twice.
9927
9928 For C++, constructors and destructors have their own fast treatment. */
9929
9930 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9931 {
9932 register int i;
9933 register tree id;
9934
9935 /* Certain parse errors slip through. For example,
9936 `int class;' is not caught by the parser. Try
9937 weakly to recover here. */
9938 if (TREE_CODE (spec) != TREE_LIST)
9939 return 0;
9940
9941 id = TREE_VALUE (spec);
9942
9943 if (TREE_CODE (id) == IDENTIFIER_NODE)
9944 {
a3203465
MS
9945 if (id == ridpointers[(int) RID_INT]
9946 || id == ridpointers[(int) RID_CHAR]
9947 || id == ridpointers[(int) RID_BOOL]
9948 || id == ridpointers[(int) RID_WCHAR])
8d08fdba
MS
9949 {
9950 if (type)
8ccc31eb
MS
9951 {
9952 if (id == ridpointers[(int) RID_BOOL])
8251199e 9953 error ("`bool' is now a keyword");
8ccc31eb 9954 else
8251199e 9955 cp_error ("extraneous `%T' ignored", id);
8ccc31eb 9956 }
8d08fdba
MS
9957 else
9958 {
a3203465
MS
9959 if (id == ridpointers[(int) RID_INT])
9960 explicit_int = 1;
9961 else if (id == ridpointers[(int) RID_CHAR])
9962 explicit_char = 1;
8d08fdba
MS
9963 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9964 }
9965 goto found;
9966 }
e92cc029 9967 /* C++ aggregate types. */
8d08fdba
MS
9968 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9969 {
9970 if (type)
8251199e 9971 cp_error ("multiple declarations `%T' and `%T'", type, id);
8d08fdba
MS
9972 else
9973 type = IDENTIFIER_TYPE_VALUE (id);
9974 goto found;
9975 }
9976
f376e137 9977 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
9978 {
9979 if (ridpointers[i] == id)
9980 {
9981 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9982 {
795add94 9983 if (pedantic && ! in_system_header && warn_long_long)
cb9a3ff8 9984 pedwarn ("ISO C++ does not support `long long'");
9a3b49ac 9985 if (longlong)
8251199e 9986 error ("`long long long' is too long for GCC");
8d08fdba
MS
9987 else
9988 longlong = 1;
9989 }
9990 else if (RIDBIT_SETP (i, specbits))
8251199e 9991 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
8d08fdba
MS
9992 RIDBIT_SET (i, specbits);
9993 goto found;
9994 }
9995 }
9996 }
e92cc029 9997 /* C++ aggregate types. */
1899c3a4 9998 else if (TREE_CODE (id) == TYPE_DECL)
45537677
MS
9999 {
10000 if (type)
8251199e 10001 cp_error ("multiple declarations `%T' and `%T'", type,
45537677
MS
10002 TREE_TYPE (id));
10003 else
5566b478
MS
10004 {
10005 type = TREE_TYPE (id);
10006 TREE_VALUE (spec) = type;
10007 }
45537677
MS
10008 goto found;
10009 }
8d08fdba 10010 if (type)
8251199e 10011 error ("two or more data types in declaration of `%s'", name);
8d08fdba
MS
10012 else if (TREE_CODE (id) == IDENTIFIER_NODE)
10013 {
10014 register tree t = lookup_name (id, 1);
10015 if (!t || TREE_CODE (t) != TYPE_DECL)
8251199e 10016 error ("`%s' fails to be a typedef or built in type",
8d08fdba
MS
10017 IDENTIFIER_POINTER (id));
10018 else
10019 {
10020 type = TREE_TYPE (t);
6125f3be
DE
10021#if 0
10022 /* See the code below that used this. */
f6abb50a 10023 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
6125f3be 10024#endif
8d08fdba
MS
10025 typedef_decl = t;
10026 }
10027 }
bd6dd845 10028 else if (id != error_mark_node)
8d08fdba
MS
10029 /* Can't change CLASS nodes into RECORD nodes here! */
10030 type = id;
10031
10032 found: ;
10033 }
10034
10035 typedef_type = type;
10036
37c46b43 10037 /* No type at all: default to `int', and set DEFAULTED_INT
6eabb241 10038 because it was not a user-defined typedef. */
8d08fdba 10039
a3203465
MS
10040 if (type == NULL_TREE
10041 && (RIDBIT_SETP (RID_SIGNED, specbits)
10042 || RIDBIT_SETP (RID_UNSIGNED, specbits)
10043 || RIDBIT_SETP (RID_LONG, specbits)
10044 || RIDBIT_SETP (RID_SHORT, specbits)))
10045 {
10046 /* These imply 'int'. */
10047 type = integer_type_node;
37c46b43 10048 defaulted_int = 1;
a3203465
MS
10049 }
10050
3dbc07b6
MM
10051 if (sfk != sfk_none)
10052 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
10053 ctor_return_type);
10054 else if (type == NULL_TREE)
8d08fdba 10055 {
3dbc07b6
MM
10056 int is_main;
10057
8d08fdba 10058 explicit_int = -1;
3dbc07b6 10059
41eff652
JM
10060 /* We handle `main' specially here, because 'main () { }' is so
10061 common. With no options, it is allowed. With -Wreturn-type,
10062 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6
MM
10063 is_main = (funcdef_flag
10064 && MAIN_NAME_P (dname)
10065 && ctype == NULL_TREE
10066 && in_namespace == NULL_TREE
10067 && current_namespace == global_namespace);
10068
10069 if (in_system_header || flag_ms_extensions)
10070 /* Allow it, sigh. */;
10071 else if (pedantic || ! is_main)
10072 cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
10073 name);
10074 else if (warn_return_type)
10075 cp_warning ("ISO C++ forbids declaration of `%s' with no type",
10076 name);
41eff652 10077
3dbc07b6 10078 type = integer_type_node;
51c184be 10079 }
8d08fdba
MS
10080
10081 ctype = NULL_TREE;
10082
10083 /* Now process the modifiers that were specified
10084 and check for invalid combinations. */
10085
10086 /* Long double is a special combination. */
10087
10088 if (RIDBIT_SETP (RID_LONG, specbits)
10089 && TYPE_MAIN_VARIANT (type) == double_type_node)
10090 {
10091 RIDBIT_RESET (RID_LONG, specbits);
68642fb6 10092 type = build_qualified_type (long_double_type_node,
91063b51 10093 CP_TYPE_QUALS (type));
8d08fdba
MS
10094 }
10095
10096 /* Check all other uses of type modifiers. */
10097
10098 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10099 || RIDBIT_SETP (RID_SIGNED, specbits)
10100 || RIDBIT_SETP (RID_LONG, specbits)
10101 || RIDBIT_SETP (RID_SHORT, specbits))
10102 {
10103 int ok = 0;
10104
10105 if (TREE_CODE (type) == REAL_TYPE)
8251199e 10106 error ("short, signed or unsigned invalid for `%s'", name);
b7484fbe 10107 else if (TREE_CODE (type) != INTEGER_TYPE)
8251199e 10108 error ("long, short, signed or unsigned invalid for `%s'", name);
8d08fdba
MS
10109 else if (RIDBIT_SETP (RID_LONG, specbits)
10110 && RIDBIT_SETP (RID_SHORT, specbits))
8251199e 10111 error ("long and short specified together for `%s'", name);
8d08fdba
MS
10112 else if ((RIDBIT_SETP (RID_LONG, specbits)
10113 || RIDBIT_SETP (RID_SHORT, specbits))
10114 && explicit_char)
8251199e 10115 error ("long or short specified with char for `%s'", name);
8d08fdba
MS
10116 else if ((RIDBIT_SETP (RID_LONG, specbits)
10117 || RIDBIT_SETP (RID_SHORT, specbits))
10118 && TREE_CODE (type) == REAL_TYPE)
8251199e 10119 error ("long or short specified with floating type for `%s'", name);
8d08fdba
MS
10120 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10121 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8251199e 10122 error ("signed and unsigned given together for `%s'", name);
8d08fdba
MS
10123 else
10124 {
10125 ok = 1;
37c46b43 10126 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 10127 {
8251199e 10128 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8d08fdba
MS
10129 name);
10130 if (flag_pedantic_errors)
10131 ok = 0;
10132 }
10133 }
10134
10135 /* Discard the type modifiers if they are invalid. */
10136 if (! ok)
10137 {
10138 RIDBIT_RESET (RID_UNSIGNED, specbits);
10139 RIDBIT_RESET (RID_SIGNED, specbits);
10140 RIDBIT_RESET (RID_LONG, specbits);
10141 RIDBIT_RESET (RID_SHORT, specbits);
10142 longlong = 0;
10143 }
10144 }
10145
37c46b43
MS
10146 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10147 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10148 {
8251199e 10149 error ("complex invalid for `%s'", name);
37c46b43
MS
10150 RIDBIT_RESET (RID_COMPLEX, specbits);
10151 }
10152
8d08fdba
MS
10153 /* Decide whether an integer type is signed or not.
10154 Optionally treat bitfields as signed by default. */
10155 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
b89c5a7b
MM
10156 /* [class.bit]
10157
10158 It is implementation-defined whether a plain (neither
10159 explicitly signed or unsigned) char, short, int, or long
10160 bit-field is signed or unsigned.
68642fb6 10161
b89c5a7b
MM
10162 Naturally, we extend this to long long as well. Note that
10163 this does not include wchar_t. */
10164 || (bitfield && !flag_signed_bitfields
10165 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10166 /* A typedef for plain `int' without `signed' can be
10167 controlled just like plain `int', but a typedef for
10168 `signed int' cannot be so controlled. */
68642fb6 10169 && !(typedef_decl
29bbeb1c 10170 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b89c5a7b
MM
10171 && (TREE_CODE (type) == INTEGER_TYPE
10172 || TREE_CODE (type) == CHAR_TYPE)
29bbeb1c 10173 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
10174 {
10175 if (longlong)
10176 type = long_long_unsigned_type_node;
10177 else if (RIDBIT_SETP (RID_LONG, specbits))
10178 type = long_unsigned_type_node;
10179 else if (RIDBIT_SETP (RID_SHORT, specbits))
10180 type = short_unsigned_type_node;
10181 else if (type == char_type_node)
10182 type = unsigned_char_type_node;
10183 else if (typedef_decl)
10184 type = unsigned_type (type);
10185 else
10186 type = unsigned_type_node;
10187 }
10188 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10189 && type == char_type_node)
10190 type = signed_char_type_node;
10191 else if (longlong)
10192 type = long_long_integer_type_node;
10193 else if (RIDBIT_SETP (RID_LONG, specbits))
10194 type = long_integer_type_node;
10195 else if (RIDBIT_SETP (RID_SHORT, specbits))
10196 type = short_integer_type_node;
10197
37c46b43
MS
10198 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10199 {
10200 /* If we just have "complex", it is equivalent to
10201 "complex double", but if any modifiers at all are specified it is
10202 the complex form of TYPE. E.g, "complex short" is
10203 "complex short int". */
10204
10205 if (defaulted_int && ! longlong
10206 && ! (RIDBIT_SETP (RID_LONG, specbits)
10207 || RIDBIT_SETP (RID_SHORT, specbits)
10208 || RIDBIT_SETP (RID_SIGNED, specbits)
10209 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10210 type = complex_double_type_node;
10211 else if (type == integer_type_node)
10212 type = complex_integer_type_node;
10213 else if (type == float_type_node)
10214 type = complex_float_type_node;
10215 else if (type == double_type_node)
10216 type = complex_double_type_node;
10217 else if (type == long_double_type_node)
10218 type = complex_long_double_type_node;
10219 else
10220 type = build_complex_type (type);
10221 }
10222
3dbc07b6 10223 if (sfk == sfk_conversion
3ac3d9ea 10224 && (RIDBIT_SETP (RID_CONST, specbits)
91063b51
MM
10225 || RIDBIT_SETP (RID_VOLATILE, specbits)
10226 || RIDBIT_SETP (RID_RESTRICT, specbits)))
10227 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
3ac3d9ea
MM
10228 ctor_return_type);
10229
8d08fdba
MS
10230 /* Set CONSTP if this declaration is `const', whether by
10231 explicit specification or via a typedef.
10232 Likewise for VOLATILEP. */
10233
91063b51 10234 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
68642fb6 10235 restrictp =
91063b51 10236 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
68642fb6 10237 volatilep =
91063b51
MM
10238 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10239 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10240 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10241 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10242 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10243 staticp = 0;
10244 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8d08fdba 10245 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
10246 RIDBIT_RESET (RID_VIRTUAL, specbits);
10247 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10248 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 10249
8d08fdba
MS
10250 if (RIDBIT_SETP (RID_STATIC, specbits))
10251 staticp = 1 + (decl_context == FIELD);
10252
10253 if (virtualp && staticp == 2)
10254 {
8251199e 10255 cp_error ("member `%D' cannot be declared both virtual and static",
8d08fdba
MS
10256 dname);
10257 staticp = 0;
10258 }
10259 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8d08fdba
MS
10260 RIDBIT_RESET (RID_FRIEND, specbits);
10261
8d08fdba
MS
10262 /* Warn if two storage classes are given. Default to `auto'. */
10263
10264 if (RIDBIT_ANY_SET (specbits))
10265 {
10266 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10267 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10268 if (decl_context == PARM && nclasses > 0)
8251199e 10269 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
10270 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10271 {
10272 if (decl_context == PARM)
8251199e 10273 error ("typedef declaration invalid in parameter declaration");
8d08fdba
MS
10274 nclasses++;
10275 }
10276 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10277 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10278 }
10279
10280 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
10281 if (virtualp
10282 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 10283 {
8251199e 10284 error ("virtual outside class declaration");
8d08fdba
MS
10285 virtualp = 0;
10286 }
8d08fdba
MS
10287
10288 /* Static anonymous unions are dealt with here. */
10289 if (staticp && decl_context == TYPENAME
10290 && TREE_CODE (declspecs) == TREE_LIST
6bdb8141 10291 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
8d08fdba
MS
10292 decl_context = FIELD;
10293
8d08fdba
MS
10294 /* Warn about storage classes that are invalid for certain
10295 kinds of declarations (parameters, typenames, etc.). */
10296
10297 if (nclasses > 1)
8251199e 10298 error ("multiple storage classes in declaration of `%s'", name);
8d08fdba
MS
10299 else if (decl_context != NORMAL && nclasses > 0)
10300 {
db5ae43f 10301 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
10302 && (RIDBIT_SETP (RID_REGISTER, specbits)
10303 || RIDBIT_SETP (RID_AUTO, specbits)))
10304 ;
fc378698
MS
10305 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10306 ;
8d08fdba 10307 else if (decl_context == FIELD
d363e7bf
AJ
10308 /* C++ allows static class elements */
10309 && RIDBIT_SETP (RID_STATIC, specbits))
10310 /* C++ also allows inlines and signed and unsigned elements,
10311 but in those cases we don't come in here. */
8d08fdba
MS
10312 ;
10313 else
10314 {
10315 if (decl_context == FIELD)
10316 {
b7484fbe
MS
10317 tree tmp = NULL_TREE;
10318 register int op = 0;
10319
10320 if (declarator)
10321 {
68642fb6 10322 /* Avoid trying to get an operand off an identifier node. */
9e9ff709
MS
10323 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10324 tmp = declarator;
10325 else
10326 tmp = TREE_OPERAND (declarator, 0);
b7484fbe 10327 op = IDENTIFIER_OPNAME_P (tmp);
596ea4e5
AS
10328 if (IDENTIFIER_TYPENAME_P (tmp))
10329 {
10330 if (IDENTIFIER_GLOBAL_VALUE (tmp)
5362b086 10331 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (tmp))
596ea4e5
AS
10332 == TYPE_DECL))
10333 name = IDENTIFIER_POINTER (tmp);
10334 else
10335 name = "<invalid operator>";
10336 }
b7484fbe 10337 }
8251199e 10338 error ("storage class specified for %s `%s'",
6eabb241 10339 op ? "member operator" : "field",
596ea4e5 10340 name);
8d08fdba
MS
10341 }
10342 else
b9d12519
KG
10343 {
10344 if (decl_context == PARM || decl_context == CATCHPARM)
10345 error ("storage class specified for parameter `%s'", name);
10346 else
10347 error ("storage class specified for typename");
10348 }
8d08fdba
MS
10349 RIDBIT_RESET (RID_REGISTER, specbits);
10350 RIDBIT_RESET (RID_AUTO, specbits);
10351 RIDBIT_RESET (RID_EXTERN, specbits);
8d08fdba
MS
10352 }
10353 }
10354 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10355 {
a9aedbc2 10356 if (toplevel_bindings_p ())
8d08fdba 10357 {
59be0cdd 10358 /* It's common practice (and completely valid) to have a const
8d08fdba 10359 be initialized and declared extern. */
950ad3c3 10360 if (!(type_quals & TYPE_QUAL_CONST))
8251199e 10361 warning ("`%s' initialized and declared `extern'", name);
8d08fdba
MS
10362 }
10363 else
8251199e 10364 error ("`%s' has both `extern' and initializer", name);
8d08fdba
MS
10365 }
10366 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
a9aedbc2 10367 && ! toplevel_bindings_p ())
8251199e 10368 error ("nested function `%s' declared `extern'", name);
a9aedbc2 10369 else if (toplevel_bindings_p ())
8d08fdba
MS
10370 {
10371 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 10372 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba
MS
10373 }
10374
909e536a 10375 if (nclasses > 0 && friendp)
8251199e 10376 error ("storage class specifiers invalid in friend function declarations");
909e536a 10377
8d08fdba
MS
10378 /* Now figure out the structure of the declarator proper.
10379 Descend through it, creating more complex types, until we reach
10380 the declared identifier (or NULL_TREE, in an absolute declarator). */
10381
1eab9b56 10382 inner_attrs = NULL_TREE;
68642fb6 10383 ignore_attrs = 0;
1eab9b56 10384
386b8a85
JM
10385 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10386 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
10387 {
10388 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10389 an INDIRECT_REF (for *...),
10390 a CALL_EXPR (for ...(...)),
10391 an identifier (for the name being declared)
10392 or a null pointer (for the place in an absolute declarator
10393 where the name was omitted).
10394 For the last two cases, we have just exited the loop.
10395
10396 For C++ it could also be
10397 a SCOPE_REF (for class :: ...). In this case, we have converted
10398 sensible names to types, and those are the values we use to
10399 qualify the member name.
10400 an ADDR_EXPR (for &...),
10401 a BIT_NOT_EXPR (for destructors)
8d08fdba
MS
10402
10403 At this point, TYPE is the type of elements of an array,
10404 or for a function to return, or for a pointer to point to.
10405 After this sequence of ifs, TYPE is the type of the
10406 array or function or pointer, and DECLARATOR has had its
10407 outermost layer removed. */
10408
bd6dd845 10409 if (type == error_mark_node)
8d08fdba
MS
10410 {
10411 if (TREE_CODE (declarator) == SCOPE_REF)
10412 declarator = TREE_OPERAND (declarator, 1);
10413 else
10414 declarator = TREE_OPERAND (declarator, 0);
10415 continue;
10416 }
10417 if (quals != NULL_TREE
10418 && (declarator == NULL_TREE
10419 || TREE_CODE (declarator) != SCOPE_REF))
10420 {
10421 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10422 ctype = TYPE_METHOD_BASETYPE (type);
10423 if (ctype != NULL_TREE)
10424 {
8d08fdba 10425 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
535233a8 10426 grok_method_quals (ctype, dummy, quals);
8d08fdba 10427 type = TREE_TYPE (dummy);
535233a8 10428 ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
8d08fdba
MS
10429 quals = NULL_TREE;
10430 }
10431 }
1eab9b56
JM
10432
10433 /* See the comment for the TREE_LIST case, below. */
10434 if (ignore_attrs)
10435 ignore_attrs = 0;
10436 else if (inner_attrs)
10437 {
10438 decl_attributes (type, inner_attrs, NULL_TREE);
10439 inner_attrs = NULL_TREE;
10440 }
10441
8d08fdba
MS
10442 switch (TREE_CODE (declarator))
10443 {
52fbc847
JM
10444 case TREE_LIST:
10445 {
10446 /* We encode a declarator with embedded attributes using
1eab9b56
JM
10447 a TREE_LIST. The attributes apply to the declarator
10448 directly inside them, so we have to skip an iteration
10449 before applying them to the type. If the declarator just
10450 inside is the declarator-id, we apply the attrs to the
10451 decl itself. */
10452 inner_attrs = TREE_PURPOSE (declarator);
10453 ignore_attrs = 1;
52fbc847 10454 declarator = TREE_VALUE (declarator);
52fbc847
JM
10455 }
10456 break;
10457
8d08fdba
MS
10458 case ARRAY_REF:
10459 {
2848ad0f 10460 register tree size;
8d08fdba 10461
2848ad0f 10462 size = TREE_OPERAND (declarator, 1);
8d08fdba 10463
f2e2cbd4 10464 /* VC++ spells a zero-sized array with []. */
e8ea7036
MM
10465 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10466 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
f2e2cbd4
JM
10467 size = integer_zero_node;
10468
2848ad0f 10469 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10470
2848ad0f 10471 type = create_array_type_for_decl (dname, type, size);
c1b177ec
ML
10472
10473 /* VLAs never work as fields. */
5362b086 10474 if (decl_context == FIELD && !processing_template_decl
c1b177ec
ML
10475 && TREE_CODE (type) == ARRAY_TYPE
10476 && TYPE_DOMAIN (type) != NULL_TREE
10477 && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
10478 {
10479 cp_error ("size of member `%D' is not constant", dname);
10480 /* Proceed with arbitrary constant size, so that offset
10481 computations don't get confused. */
10482 type = create_array_type_for_decl (dname, TREE_TYPE (type),
10483 integer_one_node);
10484 }
10485
8d08fdba
MS
10486 ctype = NULL_TREE;
10487 }
10488 break;
10489
10490 case CALL_EXPR:
10491 {
10492 tree arg_types;
f376e137 10493 int funcdecl_p;
43f887f9 10494 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
f376e137 10495 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
10496
10497 /* Declaring a function type.
10498 Make sure we have a valid type for the function to return. */
8d08fdba 10499
91063b51 10500 /* We now know that the TYPE_QUALS don't apply to the
14ae7e7d 10501 decl, but to its return type. */
91063b51 10502 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
10503
10504 /* Warn about some types functions can't return. */
10505
10506 if (TREE_CODE (type) == FUNCTION_TYPE)
10507 {
8251199e 10508 error ("`%s' declared as function returning a function", name);
8d08fdba
MS
10509 type = integer_type_node;
10510 }
10511 if (TREE_CODE (type) == ARRAY_TYPE)
10512 {
8251199e 10513 error ("`%s' declared as function returning an array", name);
8d08fdba
MS
10514 type = integer_type_node;
10515 }
10516
f376e137
MS
10517 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10518 inner_decl = TREE_OPERAND (inner_decl, 1);
10519
68642fb6 10520 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
386b8a85
JM
10521 inner_decl = dname;
10522
b7484fbe 10523 /* Pick up type qualifiers which should be applied to `this'. */
43f887f9 10524 quals = CALL_DECLARATOR_QUALS (declarator);
b7484fbe 10525
c11b6f21 10526 /* Pick up the exception specifications. */
43f887f9 10527 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
c11b6f21 10528
f376e137
MS
10529 /* Say it's a definition only for the CALL_EXPR
10530 closest to the identifier. */
beb53fb8 10531 funcdecl_p
68642fb6 10532 = inner_decl
386b8a85 10533 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
68642fb6 10534 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
386b8a85 10535 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
68642fb6 10536
8d08fdba
MS
10537 if (ctype == NULL_TREE
10538 && decl_context == FIELD
f376e137 10539 && funcdecl_p
8d08fdba
MS
10540 && (friendp == 0 || dname == current_class_name))
10541 ctype = current_class_type;
10542
3dbc07b6 10543 if (ctype && sfk == sfk_conversion)
8d08fdba
MS
10544 TYPE_HAS_CONVERSION (ctype) = 1;
10545 if (ctype && constructor_name (ctype) == dname)
10546 {
10547 /* We are within a class's scope. If our declarator name
10548 is the same as the class name, and we are defining
10549 a function, then it is a constructor/destructor, and
10550 therefore returns a void type. */
10551
10552 if (flags == DTOR_FLAG)
10553 {
cab1f180
ML
10554 /* ISO C++ 12.4/2. A destructor may not be
10555 declared const or volatile. A destructor may
10556 not be static. */
8d08fdba 10557 if (staticp == 2)
8251199e 10558 error ("destructor cannot be static member function");
b7484fbe 10559 if (quals)
8d08fdba 10560 {
4f70a846
MM
10561 cp_error ("destructors may not be `%s'",
10562 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10563 quals = NULL_TREE;
8d08fdba
MS
10564 }
10565 if (decl_context == FIELD)
10566 {
4dacf5bd
KG
10567 if (! member_function_or_else (ctype,
10568 current_class_type,
10569 flags))
8d08fdba
MS
10570 return void_type_node;
10571 }
10572 }
2c73f9f5 10573 else /* It's a constructor. */
8d08fdba 10574 {
db5ae43f
MS
10575 if (explicitp == 1)
10576 explicitp = 2;
cab1f180
ML
10577 /* ISO C++ 12.1. A constructor may not be
10578 declared const or volatile. A constructor may
10579 not be virtual. A constructor may not be
10580 static. */
8d08fdba 10581 if (staticp == 2)
8251199e 10582 error ("constructor cannot be static member function");
8d08fdba
MS
10583 if (virtualp)
10584 {
8251199e 10585 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
10586 virtualp = 0;
10587 }
b7484fbe 10588 if (quals)
8d08fdba 10589 {
4f70a846
MM
10590 cp_error ("constructors may not be `%s'",
10591 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10592 quals = NULL_TREE;
d363e7bf 10593 }
8d08fdba 10594 {
51c184be 10595 RID_BIT_TYPE tmp_bits;
4e135bdd 10596 memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
51c184be
MS
10597 RIDBIT_RESET (RID_INLINE, tmp_bits);
10598 RIDBIT_RESET (RID_STATIC, tmp_bits);
10599 if (RIDBIT_ANY_SET (tmp_bits))
8251199e 10600 error ("return value type specifier for constructor ignored");
8d08fdba 10601 }
6eabb241 10602 if (decl_context == FIELD)
8d08fdba 10603 {
4dacf5bd
KG
10604 if (! member_function_or_else (ctype,
10605 current_class_type,
10606 flags))
8d08fdba
MS
10607 return void_type_node;
10608 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
3dbc07b6 10609 if (sfk != sfk_constructor)
8d08fdba
MS
10610 return NULL_TREE;
10611 }
10612 }
10613 if (decl_context == FIELD)
10614 staticp = 0;
10615 }
b7484fbe 10616 else if (friendp)
8d08fdba 10617 {
b7484fbe 10618 if (initialized)
8251199e 10619 error ("can't initialize friend function `%s'", name);
b7484fbe
MS
10620 if (virtualp)
10621 {
10622 /* Cannot be both friend and virtual. */
8251199e 10623 error ("virtual functions cannot be friends");
b7484fbe
MS
10624 RIDBIT_RESET (RID_FRIEND, specbits);
10625 friendp = 0;
10626 }
28cbf42c 10627 if (decl_context == NORMAL)
8251199e 10628 error ("friend declaration not in class definition");
28cbf42c 10629 if (current_function_decl && funcdef_flag)
8251199e 10630 cp_error ("can't define friend function `%s' in a local class definition",
28cbf42c 10631 name);
8d08fdba
MS
10632 }
10633
8d08fdba
MS
10634 /* Construct the function type and go to the next
10635 inner layer of declarator. */
10636
f376e137 10637 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10638
f376e137
MS
10639 /* FIXME: This is where default args should be fully
10640 processed. */
8d08fdba 10641
5cce22b6 10642 arg_types = grokparms (inner_parms);
8d08fdba 10643
4f70a846 10644 if (declarator && flags == DTOR_FLAG)
8d08fdba 10645 {
4f70a846
MM
10646 /* A destructor declared in the body of a class will
10647 be represented as a BIT_NOT_EXPR. But, we just
10648 want the underlying IDENTIFIER. */
8d08fdba 10649 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
4f70a846 10650 declarator = TREE_OPERAND (declarator, 0);
68642fb6 10651
8b27e9ef 10652 if (arg_types != void_list_node)
8d08fdba 10653 {
4f70a846
MM
10654 cp_error ("destructors may not have parameters");
10655 arg_types = void_list_node;
10656 last_function_parms = NULL_TREE;
8d08fdba
MS
10657 }
10658 }
10659
d22c8596 10660 /* ANSI says that `const int foo ();'
8d08fdba 10661 does not make the function foo const. */
d22c8596 10662 type = build_function_type (type, arg_types);
42976354
BK
10663
10664 {
10665 tree t;
10666 for (t = arg_types; t; t = TREE_CHAIN (t))
10667 if (TREE_PURPOSE (t)
10668 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10669 {
10670 add_defarg_fn (type);
10671 break;
10672 }
10673 }
8d08fdba
MS
10674 }
10675 break;
10676
10677 case ADDR_EXPR:
10678 case INDIRECT_REF:
10679 /* Filter out pointers-to-references and references-to-references.
10680 We can get these if a TYPE_DECL is used. */
10681
10682 if (TREE_CODE (type) == REFERENCE_TYPE)
10683 {
8251199e 10684 error ("cannot declare %s to references",
8d08fdba
MS
10685 TREE_CODE (declarator) == ADDR_EXPR
10686 ? "references" : "pointers");
10687 declarator = TREE_OPERAND (declarator, 0);
10688 continue;
10689 }
10690
a5894242
MS
10691 if (TREE_CODE (type) == OFFSET_TYPE
10692 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10693 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10694 {
8251199e 10695 cp_error ("cannot declare pointer to `%#T' member",
a5894242
MS
10696 TREE_TYPE (type));
10697 type = TREE_TYPE (type);
10698 }
10699
61a127b3
MM
10700 /* Merge any constancy or volatility into the target type
10701 for the pointer. */
10702
91063b51
MM
10703 /* We now know that the TYPE_QUALS don't apply to the decl,
10704 but to the target of the pointer. */
10705 type_quals = TYPE_UNQUALIFIED;
8d08fdba 10706
6eabb241 10707 if (TREE_CODE (declarator) == ADDR_EXPR)
8d08fdba 10708 {
69851283
MM
10709 if (TREE_CODE (type) == VOID_TYPE)
10710 error ("invalid type: `void &'");
8d08fdba 10711 else
69851283 10712 type = build_reference_type (type);
8d08fdba
MS
10713 }
10714 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 10715 type = build_ptrmemfunc_type (build_pointer_type (type));
8d08fdba
MS
10716 else
10717 type = build_pointer_type (type);
10718
10719 /* Process a list of type modifier keywords (such as
10720 const or volatile) that were given inside the `*' or `&'. */
10721
10722 if (TREE_TYPE (declarator))
10723 {
10724 register tree typemodlist;
10725 int erred = 0;
91063b51
MM
10726
10727 constp = 0;
10728 volatilep = 0;
10729 restrictp = 0;
8d08fdba
MS
10730 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10731 typemodlist = TREE_CHAIN (typemodlist))
10732 {
91063b51
MM
10733 tree qualifier = TREE_VALUE (typemodlist);
10734
10735 if (qualifier == ridpointers[(int) RID_CONST])
8d08fdba 10736 constp++;
91063b51 10737 else if (qualifier == ridpointers[(int) RID_VOLATILE])
8d08fdba 10738 volatilep++;
91063b51
MM
10739 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10740 restrictp++;
8d08fdba
MS
10741 else if (!erred)
10742 {
10743 erred = 1;
91063b51 10744 error ("invalid type modifier within pointer declarator");
8d08fdba
MS
10745 }
10746 }
10747 if (constp > 1)
8251199e 10748 pedwarn ("duplicate `const'");
8d08fdba 10749 if (volatilep > 1)
8251199e 10750 pedwarn ("duplicate `volatile'");
91063b51
MM
10751 if (restrictp > 1)
10752 pedwarn ("duplicate `restrict'");
10753
10754 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10755 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10756 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
a0a33927
MS
10757 if (TREE_CODE (declarator) == ADDR_EXPR
10758 && (constp || volatilep))
10759 {
10760 if (constp)
8251199e 10761 pedwarn ("discarding `const' applied to a reference");
a0a33927 10762 if (volatilep)
8251199e 10763 pedwarn ("discarding `volatile' applied to a reference");
91063b51 10764 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
a0a33927 10765 }
91063b51 10766 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10767 }
10768 declarator = TREE_OPERAND (declarator, 0);
10769 ctype = NULL_TREE;
10770 break;
10771
10772 case SCOPE_REF:
10773 {
10774 /* We have converted type names to NULL_TREE if the
10775 name was bogus, or to a _TYPE node, if not.
10776
10777 The variable CTYPE holds the type we will ultimately
10778 resolve to. The code here just needs to build
10779 up appropriate member types. */
10780 tree sname = TREE_OPERAND (declarator, 1);
386b8a85
JM
10781 tree t;
10782
8d08fdba
MS
10783 /* Destructors can have their visibilities changed as well. */
10784 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10785 sname = TREE_OPERAND (sname, 0);
10786
10787 if (TREE_COMPLEXITY (declarator) == 0)
10788 /* This needs to be here, in case we are called
10789 multiple times. */ ;
9a68c51f
JM
10790 else if (TREE_COMPLEXITY (declarator) == -1)
10791 /* Namespace member. */
10792 pop_decl_namespace ();
8d08fdba 10793 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
2c73f9f5 10794 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
5566b478
MS
10795 else if (! IS_AGGR_TYPE_CODE
10796 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10797 ;
8d08fdba
MS
10798 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10799 {
9a3b49ac
MS
10800 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10801 that refer to ctype. They couldn't be resolved earlier
10802 because we hadn't pushed into the class yet.
10803 Example: resolve 'B<T>::type' in
10804 'B<typename B<T>::type> B<T>::f () { }'. */
10805 if (current_template_parms
10806 && uses_template_parms (type)
10807 && uses_template_parms (current_class_type))
10808 {
10809 tree args = current_template_args ();
4393e105 10810 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
9a3b49ac
MS
10811 }
10812
a28e3c7f
MS
10813 /* This pop_nested_class corresponds to the
10814 push_nested_class used to push into class scope for
10815 parsing the argument list of a function decl, in
10816 qualified_id. */
b74a0560 10817 pop_nested_class ();
8d08fdba
MS
10818 TREE_COMPLEXITY (declarator) = current_class_depth;
10819 }
10820 else
10821 my_friendly_abort (16);
10822
10823 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10824 {
10825 /* We had a reference to a global decl, or
10826 perhaps we were given a non-aggregate typedef,
10827 in which case we cleared this out, and should just
10828 keep going as though it wasn't there. */
10829 declarator = sname;
10830 continue;
10831 }
10832 ctype = TREE_OPERAND (declarator, 0);
10833
386b8a85 10834 t = ctype;
68642fb6 10835 while (t != NULL_TREE && CLASS_TYPE_P (t))
386b8a85 10836 {
5362b086 10837 /* You're supposed to have one `template <...>'
da8a7456
MM
10838 for every template class, but you don't need one
10839 for a full specialization. For example:
10840
10841 template <class T> struct S{};
10842 template <> struct S<int> { void f(); };
10843 void S<int>::f () {}
10844
10845 is correct; there shouldn't be a `template <>' for
10846 the definition of `S<int>::f'. */
10847 if (CLASSTYPE_TEMPLATE_INFO (t)
10848 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
92ecdfb7
NS
10849 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
10850 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
386b8a85 10851 template_count += 1;
da8a7456 10852
386b8a85 10853 t = TYPE_MAIN_DECL (t);
92ecdfb7 10854 t = DECL_CONTEXT (t);
386b8a85
JM
10855 }
10856
8d08fdba
MS
10857 if (sname == NULL_TREE)
10858 goto done_scoping;
10859
10860 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10861 {
10862 /* This is the `standard' use of the scoping operator:
10863 basetype :: member . */
10864
db5ae43f 10865 if (ctype == current_class_type)
28cbf42c
MS
10866 {
10867 /* class A {
10868 void A::f ();
10869 };
10870
10871 Is this ill-formed? */
10872
10873 if (pedantic)
8251199e 10874 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
28cbf42c
MS
10875 ctype, name);
10876 }
db5ae43f 10877 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 10878 {
eeb75383 10879 if (current_class_type == NULL_TREE || friendp)
14ae7e7d
JM
10880 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10881 TYPE_ARG_TYPES (type));
8d08fdba
MS
10882 else
10883 {
8251199e 10884 cp_error ("cannot declare member function `%T::%s' within `%T'",
a3203465 10885 ctype, name, current_class_type);
8d08fdba
MS
10886 return void_type_node;
10887 }
10888 }
5566b478 10889 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
d0f062fb 10890 || COMPLETE_TYPE_P (complete_type (ctype)))
8d08fdba 10891 {
2c73f9f5 10892 /* Have to move this code elsewhere in this function.
db5ae43f
MS
10893 this code is used for i.e., typedef int A::M; M *pm;
10894
10895 It is? How? jason 10/2/94 */
8d08fdba 10896
8d08fdba
MS
10897 if (current_class_type)
10898 {
8251199e 10899 cp_error ("cannot declare member `%T::%s' within `%T'",
db5ae43f
MS
10900 ctype, name, current_class_type);
10901 return void_type_node;
8d08fdba
MS
10902 }
10903 type = build_offset_type (ctype, type);
10904 }
8d08fdba 10905 else
eeb75383
NS
10906 {
10907 incomplete_type_error (NULL_TREE, ctype);
10908 return error_mark_node;
d363e7bf 10909 }
8d08fdba
MS
10910
10911 declarator = sname;
10912 }
8d08fdba
MS
10913 else if (TREE_CODE (sname) == SCOPE_REF)
10914 my_friendly_abort (17);
10915 else
10916 {
10917 done_scoping:
10918 declarator = TREE_OPERAND (declarator, 1);
10919 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10920 /* In this case, we will deal with it later. */
10921 ;
10922 else
10923 {
10924 if (TREE_CODE (type) == FUNCTION_TYPE)
14ae7e7d
JM
10925 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10926 TYPE_ARG_TYPES (type));
8d08fdba
MS
10927 else
10928 type = build_offset_type (ctype, type);
10929 }
10930 }
10931 }
10932 break;
10933
10934 case BIT_NOT_EXPR:
10935 declarator = TREE_OPERAND (declarator, 0);
10936 break;
10937
8d08fdba
MS
10938 case RECORD_TYPE:
10939 case UNION_TYPE:
10940 case ENUMERAL_TYPE:
10941 declarator = NULL_TREE;
10942 break;
10943
10944 case ERROR_MARK:
10945 declarator = NULL_TREE;
10946 break;
10947
10948 default:
10949 my_friendly_abort (158);
10950 }
10951 }
10952
1eab9b56
JM
10953 /* See the comment for the TREE_LIST case, above. */
10954 if (inner_attrs)
10955 {
10956 if (! ignore_attrs)
10957 decl_attributes (type, inner_attrs, NULL_TREE);
10958 else if (attrlist)
10959 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10960 else
1f8f4a0b 10961 attrlist = build_tree_list (NULL_TREE, inner_attrs);
1eab9b56
JM
10962 }
10963
419c6212
JM
10964 /* Now TYPE has the actual type. */
10965
34fc957d 10966 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 10967 {
34fc957d
NS
10968 /* [dcl.fct.spec] The explicit specifier shall only be used in
10969 declarations of constructors within a class definition. */
10970 error ("only declarations of constructors can be `explicit'");
db5ae43f
MS
10971 explicitp = 0;
10972 }
10973
f30432d7
MS
10974 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10975 {
34fc957d
NS
10976 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10977 {
10978 error ("non-member `%s' cannot be declared `mutable'", name);
10979 RIDBIT_RESET (RID_MUTABLE, specbits);
10980 }
10981 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
f30432d7 10982 {
34fc957d 10983 error ("non-object member `%s' cannot be declared `mutable'", name);
f30432d7
MS
10984 RIDBIT_RESET (RID_MUTABLE, specbits);
10985 }
34fc957d
NS
10986 else if (TREE_CODE (type) == FUNCTION_TYPE
10987 || TREE_CODE (type) == METHOD_TYPE)
10988 {
10989 error ("function `%s' cannot be declared `mutable'", name);
10990 RIDBIT_RESET (RID_MUTABLE, specbits);
10991 }
f30432d7
MS
10992 else if (staticp)
10993 {
8251199e 10994 error ("static `%s' cannot be declared `mutable'", name);
f30432d7
MS
10995 RIDBIT_RESET (RID_MUTABLE, specbits);
10996 }
34fc957d
NS
10997 else if (type_quals & TYPE_QUAL_CONST)
10998 {
10999 error ("const `%s' cannot be declared `mutable'", name);
11000 RIDBIT_RESET (RID_MUTABLE, specbits);
11001 }
f30432d7
MS
11002 }
11003
efe38fab
JM
11004 if (declarator == NULL_TREE
11005 || TREE_CODE (declarator) == IDENTIFIER_NODE
11006 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
11007 && (TREE_CODE (type) == FUNCTION_TYPE
11008 || TREE_CODE (type) == METHOD_TYPE)))
11009 /* OK */;
11010 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11011 {
11012 cp_error ("template-id `%D' used as a declarator", declarator);
11013 declarator = dname;
11014 }
11015 else
419c6212 11016 /* Unexpected declarator format. */
efe38fab
JM
11017 my_friendly_abort (990210);
11018
419c6212
JM
11019 /* If this is declaring a typedef name, return a TYPE_DECL. */
11020
fc378698 11021 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
11022 {
11023 tree decl;
11024
11025 /* Note that the grammar rejects storage classes
11026 in typenames, fields or parameters. */
eff71ab0
PB
11027 if (current_lang_name == lang_name_java)
11028 TYPE_FOR_JAVA (type) = 1;
8d08fdba 11029
d2e5ee5c
MS
11030 if (decl_context == FIELD)
11031 {
094fe153 11032 if (declarator == constructor_name (current_class_type))
cb9a3ff8 11033 cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
d2e5ee5c
MS
11034 declarator);
11035 decl = build_lang_decl (TYPE_DECL, declarator, type);
d2e5ee5c
MS
11036 }
11037 else
6dfbb909 11038 decl = build_decl (TYPE_DECL, declarator, type);
d2e5ee5c 11039
9188c363
MM
11040 /* If the user declares "typedef struct {...} foo" then the
11041 struct will have an anonymous name. Fill that name in now.
11042 Nothing can refer to it, so nothing needs know about the name
11043 change. */
8d08fdba 11044 if (type != error_mark_node
2bdb0643 11045 && declarator
8d08fdba
MS
11046 && TYPE_NAME (type)
11047 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 11048 && TYPE_ANONYMOUS_P (type)
b537d120 11049 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
8d08fdba 11050 {
dcd08efc
JM
11051 tree oldname = TYPE_NAME (type);
11052 tree t;
11053
2c73f9f5 11054 /* Replace the anonymous name with the real name everywhere. */
8d08fdba 11055 lookup_tag_reverse (type, declarator);
dcd08efc
JM
11056 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11057 if (TYPE_NAME (t) == oldname)
11058 TYPE_NAME (t) = decl;
8d08fdba
MS
11059
11060 if (TYPE_LANG_SPECIFIC (type))
11061 TYPE_WAS_ANONYMOUS (type) = 1;
11062
33964bf4
MM
11063 /* If this is a typedef within a template class, the nested
11064 type is a (non-primary) template. The name for the
11065 template needs updating as well. */
11066 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 11067 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
11068 = TYPE_IDENTIFIER (type);
11069
50a6dbd7
JM
11070 /* FIXME remangle member functions; member functions of a
11071 type with external linkage have external linkage. */
fc378698 11072 }
fc378698 11073
8d08fdba
MS
11074 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
11075 {
8251199e 11076 cp_error_at ("typedef name may not be class-qualified", decl);
a3203465 11077 return NULL_TREE;
8d08fdba
MS
11078 }
11079 else if (quals)
11080 {
11081 if (ctype == NULL_TREE)
11082 {
11083 if (TREE_CODE (type) != METHOD_TYPE)
cb9a3ff8 11084 cp_error_at ("invalid type qualifier for non-member function type", decl);
8d08fdba
MS
11085 else
11086 ctype = TYPE_METHOD_BASETYPE (type);
11087 }
11088 if (ctype != NULL_TREE)
11089 grok_method_quals (ctype, decl, quals);
11090 }
11091
11092 if (RIDBIT_SETP (RID_SIGNED, specbits)
11093 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11094 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11095
c91a56d2
MS
11096 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11097 inlinep, friendp, raises != NULL_TREE);
11098
11099 if (initialized)
8251199e 11100 error ("typedef declaration includes an initializer");
c91a56d2 11101
8d08fdba
MS
11102 return decl;
11103 }
11104
11105 /* Detect the case of an array type of unspecified size
11106 which came, as such, direct from a typedef name.
11107 We must copy the type, so that each identifier gets
11108 a distinct type, so that each identifier's size can be
11109 controlled separately by its own initializer. */
11110
11111 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11112 && TYPE_DOMAIN (type) == NULL_TREE)
11113 {
11114 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11115 }
11116
11117 /* If this is a type name (such as, in a cast or sizeof),
11118 compute the type and return it now. */
11119
11120 if (decl_context == TYPENAME)
11121 {
11122 /* Note that the grammar rejects storage classes
11123 in typenames, fields or parameters. */
91063b51 11124 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 11125 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
11126
11127 /* Special case: "friend class foo" looks like a TYPENAME context. */
11128 if (friendp)
11129 {
91063b51 11130 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 11131 {
91063b51
MM
11132 cp_error ("type qualifiers specified for friend class declaration");
11133 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
11134 }
11135 if (inlinep)
11136 {
8251199e 11137 cp_error ("`inline' specified for friend class declaration");
b7484fbe
MS
11138 inlinep = 0;
11139 }
f2ae0c45
JM
11140
11141 /* Until core issue 180 is resolved, allow 'friend typename A::B'.
c00996a3 11142 But don't allow implicit typenames except with a class-key. */
f2ae0c45
JM
11143 if (!current_aggr && (TREE_CODE (type) != TYPENAME_TYPE
11144 || IMPLICIT_TYPENAME_P (type)))
4b054b80
NS
11145 {
11146 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
f2ae0c45
JM
11147 cp_pedwarn ("template parameters cannot be friends");
11148 else if (TREE_CODE (type) == TYPENAME_TYPE)
11149 cp_pedwarn ("\
11150friend declaration requires class-key, i.e. `friend class %T::%T'",
11151 constructor_name (current_class_type),
11152 TYPE_IDENTIFIER (type));
4b054b80 11153 else
f2ae0c45
JM
11154 cp_pedwarn ("\
11155friend declaration requires class-key, i.e. `friend %#T'",
11156 type);
4b054b80 11157 }
b7484fbe
MS
11158
11159 /* Only try to do this stuff if we didn't already give up. */
11160 if (type != integer_type_node)
11161 {
788bf0e3
NS
11162 /* DR 209. The friendly class does not need to be accessible
11163 in the scope of the class granting friendship. */
11164 skip_type_access_control ();
d363e7bf 11165
b7484fbe
MS
11166 /* A friendly class? */
11167 if (current_class_type)
11168 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11169 else
2ae7bada
NS
11170 cp_error ("trying to make class `%T' a friend of global scope",
11171 type);
d363e7bf 11172
b7484fbe
MS
11173 type = void_type_node;
11174 }
8d08fdba
MS
11175 }
11176 else if (quals)
11177 {
8d08fdba
MS
11178 if (ctype == NULL_TREE)
11179 {
41cbc04c
NS
11180 if (TREE_CODE (type) != METHOD_TYPE)
11181 cp_error ("invalid qualifiers on non-member function type");
11182 else
11183 ctype = TYPE_METHOD_BASETYPE (type);
11184 }
11185 if (ctype)
11186 {
11187 tree dummy = build_decl (TYPE_DECL, declarator, type);
11188 grok_method_quals (ctype, dummy, quals);
11189 type = TREE_TYPE (dummy);
8d08fdba 11190 }
8d08fdba
MS
11191 }
11192
11193 return type;
11194 }
11195 else if (declarator == NULL_TREE && decl_context != PARM
db5ae43f 11196 && decl_context != CATCHPARM
8d08fdba
MS
11197 && TREE_CODE (type) != UNION_TYPE
11198 && ! bitfield)
11199 {
8251199e 11200 cp_error ("abstract declarator `%T' used as declaration", type);
8d08fdba
MS
11201 declarator = make_anon_name ();
11202 }
11203
11204 /* `void' at top level (not within pointer)
11205 is allowed only in typedefs or type names.
11206 We don't complain about parms either, but that is because
11207 a better error message can be made later. */
11208
a1774733 11209 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
8d08fdba 11210 {
b7484fbe 11211 if (! declarator)
8251199e 11212 error ("unnamed variable or field declared void");
b7484fbe 11213 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
11214 {
11215 if (IDENTIFIER_OPNAME_P (declarator))
8d08fdba 11216 my_friendly_abort (356);
8d08fdba 11217 else
8251199e 11218 error ("variable or field `%s' declared void", name);
8d08fdba
MS
11219 }
11220 else
8251199e 11221 error ("variable or field declared void");
8d08fdba
MS
11222 type = integer_type_node;
11223 }
11224
11225 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11226 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11227
14ae7e7d
JM
11228 if (decl_context == PARM || decl_context == CATCHPARM)
11229 {
11230 if (ctype || in_namespace)
11231 error ("cannot use `::' in parameter declaration");
11232
11233 /* A parameter declared as an array of T is really a pointer to T.
11234 One declared as a function is really a pointer to a function.
11235 One declared as a member is really a pointer to member. */
11236
11237 if (TREE_CODE (type) == ARRAY_TYPE)
11238 {
11239 /* Transfer const-ness of array into that of type pointed to. */
11240 type = build_pointer_type (TREE_TYPE (type));
91063b51 11241 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
11242 }
11243 else if (TREE_CODE (type) == FUNCTION_TYPE)
11244 type = build_pointer_type (type);
11245 else if (TREE_CODE (type) == OFFSET_TYPE)
11246 type = build_pointer_type (type);
14ae7e7d 11247 }
68642fb6 11248
8d08fdba
MS
11249 {
11250 register tree decl;
11251
11252 if (decl_context == PARM)
11253 {
ff350acd 11254 decl = build_decl (PARM_DECL, declarator, type);
8d08fdba
MS
11255
11256 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11257 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
11258
11259 /* Compute the type actually passed in the parmlist,
11260 for the case where there is no prototype.
11261 (For example, shorts and chars are passed as ints.)
11262 When there is a prototype, this is overridden later. */
11263
39211cd5 11264 DECL_ARG_TYPE (decl) = type_promotes_to (type);
8d08fdba
MS
11265 }
11266 else if (decl_context == FIELD)
11267 {
11268 if (type == error_mark_node)
11269 {
11270 /* Happens when declaring arrays of sizes which
11271 are error_mark_node, for example. */
11272 decl = NULL_TREE;
11273 }
997a088c 11274 else if (in_namespace && !friendp)
05008fb9
MM
11275 {
11276 /* Something like struct S { int N::j; }; */
8251199e 11277 cp_error ("invalid use of `::'");
05008fb9
MM
11278 decl = NULL_TREE;
11279 }
8d08fdba
MS
11280 else if (TREE_CODE (type) == FUNCTION_TYPE)
11281 {
11282 int publicp = 0;
e1467ff2 11283 tree function_context;
8d08fdba 11284
72b7eeff
MS
11285 /* We catch the others as conflicts with the builtin
11286 typedefs. */
11287 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11288 {
8251199e 11289 cp_error ("function `%D' cannot be declared friend",
72b7eeff
MS
11290 declarator);
11291 friendp = 0;
11292 }
11293
8d08fdba
MS
11294 if (friendp == 0)
11295 {
11296 if (ctype == NULL_TREE)
11297 ctype = current_class_type;
11298
11299 if (ctype == NULL_TREE)
11300 {
8251199e 11301 cp_error ("can't make `%D' into a method -- not in a class",
8d08fdba
MS
11302 declarator);
11303 return void_type_node;
11304 }
11305
11306 /* ``A union may [ ... ] not [ have ] virtual functions.''
11307 ARM 9.5 */
11308 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11309 {
8251199e 11310 cp_error ("function `%D' declared virtual inside a union",
8d08fdba
MS
11311 declarator);
11312 return void_type_node;
11313 }
11314
596ea4e5
AS
11315 if (declarator == ansi_opname (NEW_EXPR)
11316 || declarator == ansi_opname (VEC_NEW_EXPR)
11317 || declarator == ansi_opname (DELETE_EXPR)
11318 || declarator == ansi_opname (VEC_DELETE_EXPR))
8d08fdba
MS
11319 {
11320 if (virtualp)
11321 {
8251199e 11322 cp_error ("`%D' cannot be declared virtual, since it is always static",
8d08fdba
MS
11323 declarator);
11324 virtualp = 0;
11325 }
11326 }
11327 else if (staticp < 2)
14ae7e7d
JM
11328 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11329 TYPE_ARG_TYPES (type));
8d08fdba
MS
11330 }
11331
11332 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 11333 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 11334 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
11335 publicp = (! friendp || ! staticp)
11336 && function_context == NULL_TREE;
68642fb6 11337 decl = grokfndecl (ctype, type,
386b8a85
JM
11338 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11339 ? declarator : dname,
11340 declarator,
7a8f9fa9 11341 virtualp, flags, quals, raises,
386b8a85 11342 friendp ? -1 : 0, friendp, publicp, inlinep,
2c73f9f5 11343 funcdef_flag, template_count, in_namespace);
20496fa2 11344 if (decl == NULL_TREE)
3ddfb0e6 11345 return decl;
6125f3be
DE
11346#if 0
11347 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11348 /* The decl and setting of decl_machine_attr is also turned off. */
71851aaa 11349 decl = build_decl_attribute_variant (decl, decl_machine_attr);
6125f3be 11350#endif
f0e01782 11351
cc804e51
MM
11352 /* [class.conv.ctor]
11353
11354 A constructor declared without the function-specifier
11355 explicit that can be called with a single parameter
11356 specifies a conversion from the type of its first
11357 parameter to the type of its class. Such a constructor
11358 is called a converting constructor. */
db5ae43f
MS
11359 if (explicitp == 2)
11360 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
11361 else if (DECL_CONSTRUCTOR_P (decl))
11362 {
11363 /* The constructor can be called with exactly one
11364 parameter if there is at least one parameter, and
11365 any subsequent parameters have default arguments.
e0fff4b3
JM
11366 Ignore any compiler-added parms. */
11367 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51
MM
11368
11369 if (arg_types == void_list_node
68642fb6
UD
11370 || (arg_types
11371 && TREE_CHAIN (arg_types)
cc804e51
MM
11372 && TREE_CHAIN (arg_types) != void_list_node
11373 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11374 DECL_NONCONVERTING_P (decl) = 1;
11375 }
8d08fdba
MS
11376 }
11377 else if (TREE_CODE (type) == METHOD_TYPE)
11378 {
faae18ab
MS
11379 /* We only get here for friend declarations of
11380 members of other classes. */
8d08fdba
MS
11381 /* All method decls are public, so tell grokfndecl to set
11382 TREE_PUBLIC, also. */
386b8a85 11383 decl = grokfndecl (ctype, type, declarator, declarator,
7a8f9fa9 11384 virtualp, flags, quals, raises,
386b8a85 11385 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
2c73f9f5 11386 template_count, in_namespace);
f0e01782
MS
11387 if (decl == NULL_TREE)
11388 return NULL_TREE;
8d08fdba 11389 }
5566b478 11390 else if (!staticp && ! processing_template_decl
d0f062fb 11391 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
11392 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11393 {
b7484fbe 11394 if (declarator)
8251199e 11395 cp_error ("field `%D' has incomplete type", declarator);
b7484fbe 11396 else
8251199e 11397 cp_error ("name `%T' has incomplete type", type);
8d08fdba
MS
11398
11399 /* If we're instantiating a template, tell them which
11400 instantiation made the field's type be incomplete. */
11401 if (current_class_type
11402 && TYPE_NAME (current_class_type)
d2e5ee5c 11403 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
11404 && declspecs && TREE_VALUE (declspecs)
11405 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
8251199e 11406 cp_error (" in instantiation of template `%T'",
db5ae43f
MS
11407 current_class_type);
11408
8d08fdba
MS
11409 type = error_mark_node;
11410 decl = NULL_TREE;
11411 }
11412 else
11413 {
11414 if (friendp)
11415 {
cb9a3ff8 11416 error ("`%s' is neither function nor member function; cannot be declared friend",
8d08fdba
MS
11417 IDENTIFIER_POINTER (declarator));
11418 friendp = 0;
11419 }
11420 decl = NULL_TREE;
11421 }
11422
11423 if (friendp)
11424 {
11425 /* Friends are treated specially. */
788bf0e3
NS
11426 tree t = NULL_TREE;
11427
11428 /* DR 209. The friend does not need to be accessible at this
11429 point. */
11430 skip_type_access_control ();
11431
8d08fdba 11432 if (ctype == current_class_type)
8251199e 11433 warning ("member functions are implicitly friends of their class");
6c30752f 11434
788bf0e3
NS
11435 if (decl && DECL_NAME (decl))
11436 {
11437 if (template_class_depth (current_class_type) == 0)
11438 {
11439 decl = check_explicit_specialization
11440 (declarator, decl,
11441 template_count, 2 * (funcdef_flag != 0) + 4);
11442 if (decl == error_mark_node)
11443 return error_mark_node;
11444 }
11445
11446 t = do_friend (ctype, declarator, decl,
11447 last_function_parms, attrlist, flags, quals,
11448 funcdef_flag);
11449 }
11450 if (t && funcdef_flag)
11451 return t;
11452 return void_type_node;
8d08fdba
MS
11453 }
11454
11455 /* Structure field. It may not be a function, except for C++ */
11456
11457 if (decl == NULL_TREE)
11458 {
8d08fdba
MS
11459 if (initialized)
11460 {
3ac3d9ea
MM
11461 if (!staticp)
11462 {
11463 /* An attempt is being made to initialize a non-static
11464 member. But, from [class.mem]:
68642fb6 11465
3ac3d9ea
MM
11466 4 A member-declarator can contain a
11467 constant-initializer only if it declares a static
11468 member (_class.static_) of integral or enumeration
68642fb6 11469 type, see _class.static.data_.
3ac3d9ea
MM
11470
11471 This used to be relatively common practice, but
11472 the rest of the compiler does not correctly
11473 handle the initialization unless the member is
11474 static so we make it static below. */
cab1f180 11475 cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
3ac3d9ea 11476 declarator);
8251199e 11477 cp_pedwarn ("making `%D' static", declarator);
3ac3d9ea
MM
11478 staticp = 1;
11479 }
11480
6ba89f8e
MM
11481 if (uses_template_parms (type))
11482 /* We'll check at instantiation time. */
11483 ;
11484 else if (check_static_variable_definition (declarator,
11485 type))
11486 /* If we just return the declaration, crashes
11487 will sometimes occur. We therefore return
72a93143
JM
11488 void_type_node, as if this was a friend
11489 declaration, to cause callers to completely
11490 ignore this declaration. */
6ba89f8e 11491 return void_type_node;
8d08fdba
MS
11492 }
11493
8ebeee52 11494 /* 9.2p13 [class.mem] */
4d7614e9 11495 if (declarator == constructor_name (current_class_type)
e54930f9
JM
11496 /* The standard does not allow non-static data members
11497 here either, but we agreed at the 10/99 meeting
11498 to change that in TC 1 so that they are allowed in
11499 classes with no user-defined constructors. */
11500 && staticp)
11501 cp_pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
8ebeee52
JM
11502 declarator);
11503
3ac3d9ea 11504 if (staticp)
8d08fdba 11505 {
f18a14bc
MM
11506 /* C++ allows static class members. All other work
11507 for this is done by grokfield. */
4ce3d537 11508 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68
MS
11509 TREE_STATIC (decl) = 1;
11510 /* In class context, 'static' means public access. */
3ac3d9ea 11511 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8d08fdba
MS
11512 }
11513 else
11514 {
721c3b42 11515 decl = build_decl (FIELD_DECL, declarator, type);
2bf105ab 11516 DECL_NONADDRESSABLE_P (decl) = bitfield;
8d08fdba
MS
11517 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11518 {
11519 DECL_MUTABLE_P (decl) = 1;
11520 RIDBIT_RESET (RID_MUTABLE, specbits);
11521 }
11522 }
11523
11524 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11525 inlinep, friendp, raises != NULL_TREE);
11526 }
11527 }
11528 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11529 {
386b8a85 11530 tree original_name;
8d08fdba
MS
11531 int publicp = 0;
11532
11533 if (! declarator)
11534 return NULL_TREE;
11535
386b8a85
JM
11536 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11537 original_name = dname;
11538 else
11539 original_name = declarator;
11540
8926095f 11541 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 11542 error ("storage class `auto' invalid for function `%s'", name);
8926095f 11543 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 11544 error ("storage class `register' invalid for function `%s'", name);
8d08fdba
MS
11545
11546 /* Function declaration not at top level.
11547 Storage classes other than `extern' are not allowed
11548 and `extern' makes no difference. */
a9aedbc2 11549 if (! toplevel_bindings_p ()
8926095f
MS
11550 && (RIDBIT_SETP (RID_STATIC, specbits)
11551 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 11552 && pedantic)
8926095f
MS
11553 {
11554 if (RIDBIT_SETP (RID_STATIC, specbits))
8251199e 11555 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8926095f 11556 else
8251199e 11557 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8926095f 11558 }
68642fb6 11559
8d08fdba
MS
11560 if (ctype == NULL_TREE)
11561 {
11562 if (virtualp)
11563 {
8251199e 11564 error ("virtual non-class function `%s'", name);
8d08fdba
MS
11565 virtualp = 0;
11566 }
8d08fdba
MS
11567 }
11568 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
14ae7e7d
JM
11569 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11570 TYPE_ARG_TYPES (type));
8d08fdba 11571
eb66be0e 11572 /* Record presence of `static'. */
faae18ab 11573 publicp = (ctype != NULL_TREE
a9aedbc2 11574 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 11575 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 11576
386b8a85 11577 decl = grokfndecl (ctype, type, original_name, declarator,
7a8f9fa9 11578 virtualp, flags, quals, raises,
75650646 11579 1, friendp,
68642fb6 11580 publicp, inlinep, funcdef_flag,
2c73f9f5 11581 template_count, in_namespace);
f0e01782
MS
11582 if (decl == NULL_TREE)
11583 return NULL_TREE;
8d08fdba 11584
8d08fdba
MS
11585 if (staticp == 1)
11586 {
11587 int illegal_static = 0;
11588
11589 /* Don't allow a static member function in a class, and forbid
11590 declaring main to be static. */
11591 if (TREE_CODE (type) == METHOD_TYPE)
11592 {
8251199e 11593 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8d08fdba
MS
11594 illegal_static = 1;
11595 }
8d08fdba
MS
11596 else if (current_function_decl)
11597 {
11598 /* FIXME need arm citation */
8251199e 11599 error ("cannot declare static function inside another function");
8d08fdba
MS
11600 illegal_static = 1;
11601 }
11602
11603 if (illegal_static)
11604 {
11605 staticp = 0;
11606 RIDBIT_RESET (RID_STATIC, specbits);
11607 }
11608 }
8d08fdba
MS
11609 }
11610 else
11611 {
11612 /* It's a variable. */
11613
11614 /* An uninitialized decl with `extern' is a reference. */
68642fb6
UD
11615 decl = grokvardecl (type, declarator, &specbits,
11616 initialized,
11617 (type_quals & TYPE_QUAL_CONST) != 0,
950ad3c3 11618 in_namespace);
8d08fdba
MS
11619 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11620 inlinep, friendp, raises != NULL_TREE);
11621
11622 if (ctype)
11623 {
f0e01782 11624 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
11625 if (staticp == 1)
11626 {
8251199e 11627 cp_pedwarn ("static member `%D' re-declared as static", decl);
8d08fdba
MS
11628 staticp = 0;
11629 RIDBIT_RESET (RID_STATIC, specbits);
11630 }
b7484fbe
MS
11631 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11632 {
8251199e 11633 cp_error ("static member `%D' declared `register'", decl);
b7484fbe
MS
11634 RIDBIT_RESET (RID_REGISTER, specbits);
11635 }
f30432d7 11636 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 11637 {
8251199e 11638 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
f30432d7 11639 decl);
8d08fdba
MS
11640 RIDBIT_RESET (RID_EXTERN, specbits);
11641 }
11642 }
11643 }
11644
34fc957d 11645 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8d08fdba
MS
11646
11647 /* Record `register' declaration for warnings on &
11648 and in case doing stupid register allocation. */
11649
11650 if (RIDBIT_SETP (RID_REGISTER, specbits))
11651 DECL_REGISTER (decl) = 1;
11652
8926095f
MS
11653 if (RIDBIT_SETP (RID_EXTERN, specbits))
11654 DECL_THIS_EXTERN (decl) = 1;
11655
faae18ab
MS
11656 if (RIDBIT_SETP (RID_STATIC, specbits))
11657 DECL_THIS_STATIC (decl) = 1;
11658
adecb3f4
MM
11659 /* Record constancy and volatility. There's no need to do this
11660 when processing a template; we'll do this for the instantiated
11661 declaration based on the type of DECL. */
11662 if (!processing_template_decl)
11663 c_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
11664
11665 return decl;
11666 }
11667}
11668\f
11669/* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11670 An empty exprlist is a parmlist. An exprlist which
11671 contains only identifiers at the global level
11672 is a parmlist. Otherwise, it is an exprlist. */
e92cc029 11673
8d08fdba
MS
11674int
11675parmlist_is_exprlist (exprs)
11676 tree exprs;
11677{
11678 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11679 return 0;
11680
a9aedbc2 11681 if (toplevel_bindings_p ())
8d08fdba
MS
11682 {
11683 /* At the global level, if these are all identifiers,
11684 then it is a parmlist. */
11685 while (exprs)
11686 {
11687 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11688 return 1;
11689 exprs = TREE_CHAIN (exprs);
11690 }
11691 return 0;
11692 }
11693 return 1;
11694}
11695
f181d4ae
MM
11696/* Subroutine of start_function. Ensure that each of the parameter
11697 types (as listed in PARMS) is complete, as is required for a
11698 function definition. */
e92cc029 11699
8d08fdba
MS
11700static void
11701require_complete_types_for_parms (parms)
11702 tree parms;
11703{
07c88314 11704 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 11705 {
5cce22b6
NS
11706 if (VOID_TYPE_P (TREE_TYPE (parms)))
11707 /* grokparms will have already issued an error */
11708 TREE_TYPE (parms) = error_mark_node;
11709 else if (complete_type_or_else (TREE_TYPE (parms), parms))
42f989ff 11710 layout_decl (parms, 0);
5cce22b6
NS
11711 else
11712 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
11713 }
11714}
11715
46e8c075 11716/* Returns non-zero if T is a local variable. */
297e73d8 11717
46e8c075
MM
11718int
11719local_variable_p (t)
11720 tree t;
297e73d8 11721{
68642fb6 11722 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
11723 /* A VAR_DECL with a context that is a _TYPE is a static data
11724 member. */
11725 && !TYPE_P (CP_DECL_CONTEXT (t))
11726 /* Any other non-local variable must be at namespace scope. */
46e8c075 11727 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 11728 || (TREE_CODE (t) == PARM_DECL))
46e8c075 11729 return 1;
297e73d8 11730
46e8c075
MM
11731 return 0;
11732}
11733
11734/* Returns non-zero if T is an automatic local variable or a label.
11735 (These are the declarations that need to be remapped when the code
11736 containing them is duplicated.) */
11737
11738int
11739nonstatic_local_decl_p (t)
11740 tree t;
11741{
11742 return ((local_variable_p (t) && !TREE_STATIC (t))
11743 || TREE_CODE (t) == LABEL_DECL
11744 || TREE_CODE (t) == RESULT_DECL);
11745}
11746
11747/* Like local_variable_p, but suitable for use as a tree-walking
11748 function. */
11749
11750static tree
11751local_variable_p_walkfn (tp, walk_subtrees, data)
11752 tree *tp;
11753 int *walk_subtrees ATTRIBUTE_UNUSED;
11754 void *data ATTRIBUTE_UNUSED;
11755{
68642fb6 11756 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
46e8c075 11757 ? *tp : NULL_TREE);
297e73d8
MM
11758}
11759
11760/* Check that ARG, which is a default-argument expression for a
11761 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11762 something goes wrong. DECL may also be a _TYPE node, rather than a
11763 DECL, if there is no DECL available. */
11764
11765tree
11766check_default_argument (decl, arg)
11767 tree decl;
11768 tree arg;
11769{
11770 tree var;
11771 tree decl_type;
11772
11773 if (TREE_CODE (arg) == DEFAULT_ARG)
11774 /* We get a DEFAULT_ARG when looking at an in-class declaration
11775 with a default argument. Ignore the argument for now; we'll
11776 deal with it after the class is complete. */
11777 return arg;
11778
11779 if (processing_template_decl || uses_template_parms (arg))
11780 /* We don't do anything checking until instantiation-time. Note
11781 that there may be uninstantiated arguments even for an
11782 instantiated function, since default arguments are not
11783 instantiated until they are needed. */
11784 return arg;
11785
11786 if (TYPE_P (decl))
11787 {
11788 decl_type = decl;
11789 decl = NULL_TREE;
11790 }
11791 else
11792 decl_type = TREE_TYPE (decl);
11793
68642fb6 11794 if (arg == error_mark_node
297e73d8
MM
11795 || decl == error_mark_node
11796 || TREE_TYPE (arg) == error_mark_node
11797 || decl_type == error_mark_node)
11798 /* Something already went wrong. There's no need to check
11799 further. */
11800 return error_mark_node;
11801
11802 /* [dcl.fct.default]
68642fb6 11803
297e73d8
MM
11804 A default argument expression is implicitly converted to the
11805 parameter type. */
11806 if (!TREE_TYPE (arg)
11807 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11808 {
11809 if (decl)
68642fb6 11810 cp_error ("default argument for `%#D' has type `%T'",
297e73d8
MM
11811 decl, TREE_TYPE (arg));
11812 else
8614a1d6 11813 cp_error ("default argument for parameter of type `%T' has type `%T'",
297e73d8
MM
11814 decl_type, TREE_TYPE (arg));
11815
11816 return error_mark_node;
11817 }
11818
11819 /* [dcl.fct.default]
11820
11821 Local variables shall not be used in default argument
68642fb6 11822 expressions.
297e73d8
MM
11823
11824 The keyword `this' shall not be used in a default argument of a
11825 member function. */
5362b086 11826 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
ee94fce6 11827 NULL);
297e73d8
MM
11828 if (var)
11829 {
11830 cp_error ("default argument `%E' uses local variable `%D'",
11831 arg, var);
11832 return error_mark_node;
11833 }
11834
11835 /* All is well. */
11836 return arg;
11837}
11838
8d08fdba
MS
11839/* Decode the list of parameter types for a function type.
11840 Given the list of things declared inside the parens,
11841 return a list of types.
11842
5cce22b6
NS
11843 We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
11844 flag. If unset, we append void_list_node. A parmlist declared
11845 as `(void)' is accepted as the empty parmlist.
11846
11847 Also set last_function_parms to the chain of PARM_DECLs. */
8d08fdba
MS
11848
11849static tree
5cce22b6 11850grokparms (first_parm)
8d08fdba 11851 tree first_parm;
8d08fdba
MS
11852{
11853 tree result = NULL_TREE;
11854 tree decls = NULL_TREE;
5cce22b6
NS
11855 int ellipsis = !first_parm || PARMLIST_ELLIPSIS_P (first_parm);
11856 tree parm, chain;
11857 int any_error = 0;
8d08fdba 11858
5cce22b6
NS
11859 my_friendly_assert (!first_parm || TREE_PARMLIST (first_parm), 20001115);
11860
11861 for (parm = first_parm; parm != NULL_TREE; parm = chain)
8d08fdba 11862 {
0657c69c 11863 tree type = NULL_TREE;
5cce22b6
NS
11864 register tree decl = TREE_VALUE (parm);
11865 tree init = TREE_PURPOSE (parm);
8d08fdba 11866
5cce22b6
NS
11867 chain = TREE_CHAIN (parm);
11868 /* @@ weak defense against parse errors. */
11869 if (TREE_CODE (decl) != VOID_TYPE
11870 && TREE_CODE (decl) != TREE_LIST)
8d08fdba 11871 {
5cce22b6
NS
11872 /* Give various messages as the need arises. */
11873 if (TREE_CODE (decl) == STRING_CST)
11874 cp_error ("invalid string constant `%E'", decl);
11875 else if (TREE_CODE (decl) == INTEGER_CST)
11876 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11877 continue;
11878 }
8d08fdba 11879
5cce22b6
NS
11880 if (parm == void_list_node)
11881 break;
8d08fdba 11882
5cce22b6 11883 decl = grokdeclarator (TREE_VALUE (decl), TREE_PURPOSE (decl),
d363e7bf 11884 PARM, init != NULL_TREE, NULL_TREE);
5cce22b6
NS
11885 if (! decl || TREE_TYPE (decl) == error_mark_node)
11886 continue;
d363e7bf 11887
5cce22b6
NS
11888 type = TREE_TYPE (decl);
11889 if (VOID_TYPE_P (type))
11890 {
11891 if (same_type_p (type, void_type_node)
11892 && !DECL_NAME (decl) && !result && !chain && !ellipsis)
11893 /* this is a parmlist of `(void)', which is ok. */
11894 break;
11895 incomplete_type_error (decl, type);
0657c69c
MM
11896 /* It's not a good idea to actually create parameters of
11897 type `void'; other parts of the compiler assume that a
11898 void type terminates the parameter list. */
04f3dc2b 11899 type = error_mark_node;
0657c69c 11900 TREE_TYPE (decl) = error_mark_node;
5cce22b6 11901 }
8d08fdba 11902
d363e7bf 11903 if (type != error_mark_node)
04f3dc2b
MM
11904 {
11905 /* Top-level qualifiers on the parameters are
11906 ignored for function types. */
11907 type = TYPE_MAIN_VARIANT (type);
11908 if (TREE_CODE (type) == METHOD_TYPE)
11909 {
11910 cp_error ("parameter `%D' invalidly declared method type", decl);
11911 type = build_pointer_type (type);
11912 TREE_TYPE (decl) = type;
11913 }
11914 else if (TREE_CODE (type) == OFFSET_TYPE)
11915 {
11916 cp_error ("parameter `%D' invalidly declared offset type", decl);
11917 type = build_pointer_type (type);
11918 TREE_TYPE (decl) = type;
11919 }
11920 else if (abstract_virtuals_error (decl, type))
11921 any_error = 1; /* Seems like a good idea. */
11922 else if (POINTER_TYPE_P (type))
11923 {
11924 /* [dcl.fct]/6, parameter types cannot contain pointers
11925 (references) to arrays of unknown bound. */
98979fe0
NS
11926 tree t = TREE_TYPE (type);
11927 int ptr = TYPE_PTR_P (type);
11928
11929 while (1)
11930 {
11931 if (TYPE_PTR_P (t))
11932 ptr = 1;
11933 else if (TREE_CODE (t) != ARRAY_TYPE)
11934 break;
11935 else if (!TYPE_DOMAIN (t))
11936 break;
11937 t = TREE_TYPE (t);
11938 }
04f3dc2b
MM
11939 if (TREE_CODE (t) == ARRAY_TYPE)
11940 cp_error ("parameter `%D' includes %s to array of unknown bound `%T'",
98979fe0 11941 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
11942 }
11943
11944 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11945 if (PROMOTE_PROTOTYPES
11946 && (TREE_CODE (type) == INTEGER_TYPE
11947 || TREE_CODE (type) == ENUMERAL_TYPE)
11948 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11949 DECL_ARG_TYPE (decl) = integer_type_node;
11950 if (!any_error && init)
11951 init = check_default_argument (decl, init);
11952 else
11953 init = NULL_TREE;
11954 }
8d08fdba 11955
5cce22b6
NS
11956 TREE_CHAIN (decl) = decls;
11957 decls = decl;
0657c69c 11958 result = tree_cons (init, type, result);
8d08fdba 11959 }
5cce22b6
NS
11960 decls = nreverse (decls);
11961 result = nreverse (result);
11962 if (!ellipsis)
11963 result = chainon (result, void_list_node);
8d08fdba
MS
11964 last_function_parms = decls;
11965
8d08fdba
MS
11966 return result;
11967}
42976354 11968
8d08fdba 11969\f
4f1c5b7d
MM
11970/* D is a constructor or overloaded `operator='. Returns non-zero if
11971 D's arguments allow it to be a copy constructor, or copy assignment
11972 operator. */
11973
c11b6f21
MS
11974int
11975copy_args_p (d)
11976 tree d;
11977{
4f1c5b7d
MM
11978 tree t;
11979
11980 if (!DECL_FUNCTION_MEMBER_P (d))
11981 return 0;
11982
e0fff4b3 11983 t = FUNCTION_FIRST_USER_PARMTYPE (d);
c11b6f21
MS
11984 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11985 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
4f1c5b7d 11986 == DECL_CONTEXT (d))
c11b6f21
MS
11987 && (TREE_CHAIN (t) == NULL_TREE
11988 || TREE_CHAIN (t) == void_list_node
11989 || TREE_PURPOSE (TREE_CHAIN (t))))
11990 return 1;
11991 return 0;
11992}
11993
8d08fdba
MS
11994/* These memoizing functions keep track of special properties which
11995 a class may have. `grok_ctor_properties' notices whether a class
11996 has a constructor of the form X(X&), and also complains
11997 if the class has a constructor of the form X(X).
11998 `grok_op_properties' takes notice of the various forms of
11999 operator= which are defined, as well as what sorts of type conversion
12000 may apply. Both functions take a FUNCTION_DECL as an argument. */
e92cc029 12001
a0a33927 12002int
8d08fdba
MS
12003grok_ctor_properties (ctype, decl)
12004 tree ctype, decl;
12005{
e0fff4b3 12006 tree parmtypes = FUNCTION_FIRST_USER_PARMTYPE (decl);
8d08fdba
MS
12007 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
12008
f181d4ae
MM
12009 /* [class.copy]
12010
12011 A non-template constructor for class X is a copy constructor if
12012 its first parameter is of type X&, const X&, volatile X& or const
12013 volatile X&, and either there are no other parameters or else all
12014 other parameters have default arguments. */
8d08fdba 12015 if (TREE_CODE (parmtype) == REFERENCE_TYPE
0b41abe6 12016 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
a11d04b5 12017 && sufficient_parms_p (TREE_CHAIN (parmtypes))
f181d4ae
MM
12018 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12019 && is_member_template (DECL_TI_TEMPLATE (decl))))
0b41abe6
JM
12020 {
12021 TYPE_HAS_INIT_REF (ctype) = 1;
91063b51 12022 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
0b41abe6 12023 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
8d08fdba 12024 }
f181d4ae
MM
12025 /* [class.copy]
12026
12027 A declaration of a constructor for a class X is ill-formed if its
12028 first parameter is of type (optionally cv-qualified) X and either
12029 there are no other parameters or else all other parameters have
68642fb6 12030 default arguments.
f181d4ae
MM
12031
12032 We *don't* complain about member template instantiations that
12033 have this form, though; they can occur as we try to decide what
12034 constructor to use during overload resolution. Since overload
12035 resolution will never prefer such a constructor to the
12036 non-template copy constructor (which is either explicitly or
12037 implicitly defined), there's no need to worry about their
12038 existence. Theoretically, they should never even be
12039 instantiated, but that's hard to forestall. */
0b41abe6 12040 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
a11d04b5 12041 && sufficient_parms_p (TREE_CHAIN (parmtypes))
f181d4ae
MM
12042 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12043 && is_member_template (DECL_TI_TEMPLATE (decl))))
8d08fdba 12044 {
8251199e 12045 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
0b41abe6
JM
12046 ctype, ctype);
12047 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12048 return 0;
8d08fdba
MS
12049 }
12050 else if (TREE_CODE (parmtype) == VOID_TYPE
12051 || TREE_PURPOSE (parmtypes) != NULL_TREE)
12052 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
a0a33927
MS
12053
12054 return 1;
8d08fdba
MS
12055}
12056
596ea4e5 12057/* An operator with this code is unary, but can also be binary. */
e92cc029 12058
a28e3c7f 12059static int
596ea4e5
AS
12060ambi_op_p (code)
12061 enum tree_code code;
8d08fdba 12062{
596ea4e5
AS
12063 return (code == INDIRECT_REF
12064 || code == ADDR_EXPR
12065 || code == CONVERT_EXPR
12066 || code == NEGATE_EXPR
12067 || code == PREINCREMENT_EXPR
12068 || code == PREDECREMENT_EXPR);
8d08fdba
MS
12069}
12070
12071/* An operator with this name can only be unary. */
e92cc029 12072
a28e3c7f 12073static int
596ea4e5
AS
12074unary_op_p (code)
12075 enum tree_code code;
8d08fdba 12076{
596ea4e5
AS
12077 return (code == TRUTH_NOT_EXPR
12078 || code == BIT_NOT_EXPR
12079 || code == COMPONENT_REF
12080 || code == TYPE_EXPR);
8d08fdba
MS
12081}
12082
12083/* Do a little sanity-checking on how they declared their operator. */
e92cc029 12084
5566b478 12085void
8d08fdba
MS
12086grok_op_properties (decl, virtualp, friendp)
12087 tree decl;
12088 int virtualp, friendp;
12089{
12090 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 12091 tree argtype;
8d08fdba
MS
12092 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12093 tree name = DECL_NAME (decl);
596ea4e5
AS
12094 enum tree_code operator_code;
12095 int arity;
12096
12097 /* Count the number of arguments. */
12098 for (argtype = argtypes, arity = 0;
12099 argtype && argtype != void_list_node;
12100 argtype = TREE_CHAIN (argtype))
12101 ++arity;
8d08fdba 12102
a28e3c7f
MS
12103 if (current_class_type == NULL_TREE)
12104 friendp = 1;
8d08fdba 12105
596ea4e5
AS
12106 if (DECL_CONV_FN_P (decl))
12107 operator_code = TYPE_EXPR;
12108 else
12109 do
12110 {
0c918ce5
MM
12111#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
12112 if (ansi_opname (CODE) == name) \
12113 { \
12114 operator_code = CODE; \
12115 break; \
12116 } \
12117 else if (ansi_assopname (CODE) == name) \
12118 { \
12119 operator_code = CODE; \
12120 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
12121 break; \
596ea4e5
AS
12122 }
12123
12124#include "operators.def"
12125#undef DEF_OPERATOR
12126
12127 my_friendly_abort (20000527);
12128 }
12129 while (0);
12130 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
12131 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12132
a28e3c7f
MS
12133 if (! friendp)
12134 {
596ea4e5
AS
12135 switch (operator_code)
12136 {
12137 case CALL_EXPR:
12138 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12139 break;
5362b086 12140
596ea4e5
AS
12141 case ARRAY_REF:
12142 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12143 break;
f181d4ae 12144
596ea4e5
AS
12145 case COMPONENT_REF:
12146 case MEMBER_REF:
12147 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12148 break;
5362b086 12149
596ea4e5
AS
12150 case NEW_EXPR:
12151 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12152 break;
5362b086 12153
596ea4e5
AS
12154 case DELETE_EXPR:
12155 TYPE_GETS_DELETE (current_class_type) |= 1;
12156 break;
5362b086 12157
596ea4e5
AS
12158 case VEC_NEW_EXPR:
12159 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12160 break;
5362b086 12161
596ea4e5
AS
12162 case VEC_DELETE_EXPR:
12163 TYPE_GETS_DELETE (current_class_type) |= 2;
12164 break;
12165
12166 default:
12167 break;
12168 }
12169 }
12170
12171 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8d08fdba 12172 {
8d08fdba
MS
12173 /* When the compiler encounters the definition of A::operator new, it
12174 doesn't look at the class declaration to find out if it's static. */
a28e3c7f 12175 if (methodp)
3afb32a4 12176 revert_static_member_fn (decl);
68642fb6 12177
36791f1e 12178 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 12179 }
596ea4e5 12180 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8d08fdba 12181 {
a28e3c7f 12182 if (methodp)
3afb32a4 12183 revert_static_member_fn (decl);
68642fb6 12184
36791f1e 12185 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba 12186 }
8d08fdba
MS
12187 else
12188 {
12189 /* An operator function must either be a non-static member function
12190 or have at least one parameter of a class, a reference to a class,
12191 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 12192 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 12193 {
596ea4e5
AS
12194 if (operator_code == TYPE_EXPR
12195 || operator_code == CALL_EXPR
12196 || operator_code == COMPONENT_REF
12197 || operator_code == ARRAY_REF
12198 || operator_code == NOP_EXPR)
8251199e 12199 cp_error ("`%D' must be a nonstatic member function", decl);
8d08fdba
MS
12200 else
12201 {
12202 tree p = argtypes;
12203
700f8a87 12204 if (DECL_STATIC_FUNCTION_P (decl))
8251199e 12205 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
700f8a87 12206
8d08fdba 12207 if (p)
a1774733 12208 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
8d08fdba
MS
12209 {
12210 tree arg = TREE_VALUE (p);
12211 if (TREE_CODE (arg) == REFERENCE_TYPE)
12212 arg = TREE_TYPE (arg);
12213
12214 /* This lets bad template code slip through. */
12215 if (IS_AGGR_TYPE (arg)
12216 || TREE_CODE (arg) == ENUMERAL_TYPE
73b0fce8 12217 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
a1281f45 12218 || TREE_CODE (arg) == BOUND_TEMPLATE_TEMPLATE_PARM)
8d08fdba
MS
12219 goto foundaggr;
12220 }
8251199e
JM
12221 cp_error
12222 ("`%D' must have an argument of class or enumerated type",
8d08fdba
MS
12223 decl);
12224 foundaggr:
12225 ;
12226 }
12227 }
68642fb6 12228
596ea4e5 12229 if (operator_code == CALL_EXPR)
2c73f9f5 12230 return; /* No restrictions on args. */
8d08fdba 12231
9a3b49ac 12232 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
12233 {
12234 tree t = TREE_TYPE (name);
17708e90 12235 if (! friendp)
a0a33927
MS
12236 {
12237 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
d8e178a0 12238 const char *what = 0;
5362b086 12239
a0a33927
MS
12240 if (ref)
12241 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12242
17708e90
NS
12243 if (TREE_CODE (t) == VOID_TYPE)
12244 what = "void";
12245 else if (t == current_class_type)
a0a33927 12246 what = "the same type";
9a3b49ac 12247 /* Don't force t to be complete here. */
a0a33927 12248 else if (IS_AGGR_TYPE (t)
d0f062fb 12249 && COMPLETE_TYPE_P (t)
a0a33927
MS
12250 && DERIVED_FROM_P (t, current_class_type))
12251 what = "a base class";
12252
12253 if (what)
8251199e 12254 warning ("conversion to %s%s will never use a type conversion operator",
a0a33927
MS
12255 ref ? "a reference to " : "", what);
12256 }
12257 }
12258
5362b086 12259 if (DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5 12260 && operator_code == NOP_EXPR)
8d08fdba
MS
12261 {
12262 tree parmtype;
12263
596ea4e5 12264 if (arity != 2 && methodp)
8d08fdba 12265 {
8251199e 12266 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12267 return;
12268 }
12269 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12270
596ea4e5
AS
12271 /* [class.copy]
12272
12273 A user-declared copy assignment operator X::operator= is
12274 a non-static non-template member function of class X with
12275 exactly one parameter of type X, X&, const X&, volatile
12276 X& or const volatile X&. */
f0e01782 12277 if (copy_assignment_arg_p (parmtype, virtualp)
596ea4e5
AS
12278 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12279 && is_member_template (DECL_TI_TEMPLATE (decl)))
a28e3c7f 12280 && ! friendp)
8d08fdba
MS
12281 {
12282 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
f0e01782 12283 if (TREE_CODE (parmtype) != REFERENCE_TYPE
91063b51 12284 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
8d08fdba
MS
12285 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12286 }
12287 }
596ea4e5 12288 else if (operator_code == COND_EXPR)
8d08fdba
MS
12289 {
12290 /* 13.4.0.3 */
cb9a3ff8 12291 cp_error ("ISO C++ prohibits overloading operator ?:");
68642fb6 12292 }
596ea4e5 12293 else if (ambi_op_p (operator_code))
8d08fdba 12294 {
596ea4e5
AS
12295 if (arity == 1)
12296 /* We pick the one-argument operator codes by default, so
12297 we don't have to change anything. */
12298 ;
12299 else if (arity == 2)
8d08fdba 12300 {
596ea4e5
AS
12301 /* If we thought this was a unary operator, we now know
12302 it to be a binary operator. */
12303 switch (operator_code)
12304 {
12305 case INDIRECT_REF:
12306 operator_code = MULT_EXPR;
12307 break;
12308
12309 case ADDR_EXPR:
12310 operator_code = BIT_AND_EXPR;
12311 break;
12312
12313 case CONVERT_EXPR:
12314 operator_code = PLUS_EXPR;
12315 break;
12316
12317 case NEGATE_EXPR:
12318 operator_code = MINUS_EXPR;
12319 break;
12320
12321 case PREINCREMENT_EXPR:
12322 operator_code = POSTINCREMENT_EXPR;
12323 break;
12324
12325 case PREDECREMENT_EXPR:
655dc6ee 12326 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
12327 break;
12328
12329 default:
12330 my_friendly_abort (20000527);
12331 }
12332
12333 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12334
12335 if ((operator_code == POSTINCREMENT_EXPR
12336 || operator_code == POSTDECREMENT_EXPR)
5156628f 12337 && ! processing_template_decl
007e5fea 12338 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
12339 {
12340 if (methodp)
8251199e 12341 cp_error ("postfix `%D' must take `int' as its argument",
8d08fdba
MS
12342 decl);
12343 else
8251199e
JM
12344 cp_error
12345 ("postfix `%D' must take `int' as its second argument",
12346 decl);
8d08fdba
MS
12347 }
12348 }
12349 else
12350 {
12351 if (methodp)
8251199e 12352 cp_error ("`%D' must take either zero or one argument", decl);
8d08fdba 12353 else
8251199e 12354 cp_error ("`%D' must take either one or two arguments", decl);
8d08fdba 12355 }
824b9a4c
MS
12356
12357 /* More Effective C++ rule 6. */
eb448459 12358 if (warn_ecpp
596ea4e5
AS
12359 && (operator_code == POSTINCREMENT_EXPR
12360 || operator_code == POSTDECREMENT_EXPR
12361 || operator_code == PREINCREMENT_EXPR
12362 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
12363 {
12364 tree arg = TREE_VALUE (argtypes);
12365 tree ret = TREE_TYPE (TREE_TYPE (decl));
12366 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12367 arg = TREE_TYPE (arg);
12368 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
12369 if (operator_code == PREINCREMENT_EXPR
12370 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
12371 {
12372 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
12373 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12374 arg))
8251199e 12375 cp_warning ("prefix `%D' should return `%T'", decl,
824b9a4c
MS
12376 build_reference_type (arg));
12377 }
12378 else
12379 {
3bfdc719 12380 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8251199e 12381 cp_warning ("postfix `%D' should return `%T'", decl, arg);
824b9a4c
MS
12382 }
12383 }
8d08fdba 12384 }
596ea4e5 12385 else if (unary_op_p (operator_code))
8d08fdba 12386 {
596ea4e5 12387 if (arity != 1)
8d08fdba
MS
12388 {
12389 if (methodp)
8251199e 12390 cp_error ("`%D' must take `void'", decl);
8d08fdba 12391 else
8251199e 12392 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12393 }
12394 }
596ea4e5 12395 else /* if (binary_op_p (operator_code)) */
8d08fdba 12396 {
596ea4e5 12397 if (arity != 2)
8d08fdba
MS
12398 {
12399 if (methodp)
8251199e 12400 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba 12401 else
8251199e 12402 cp_error ("`%D' must take exactly two arguments", decl);
8d08fdba 12403 }
824b9a4c
MS
12404
12405 /* More Effective C++ rule 7. */
eb448459 12406 if (warn_ecpp
596ea4e5
AS
12407 && (operator_code == TRUTH_ANDIF_EXPR
12408 || operator_code == TRUTH_ORIF_EXPR
12409 || operator_code == COMPOUND_EXPR))
8251199e 12410 cp_warning ("user-defined `%D' always evaluates both arguments",
824b9a4c
MS
12411 decl);
12412 }
12413
12414 /* Effective C++ rule 23. */
eb448459 12415 if (warn_ecpp
596ea4e5
AS
12416 && arity == 2
12417 && (operator_code == PLUS_EXPR
12418 || operator_code == MINUS_EXPR
12419 || operator_code == TRUNC_DIV_EXPR
12420 || operator_code == MULT_EXPR)
824b9a4c 12421 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8251199e 12422 cp_warning ("`%D' should return by value", decl);
8d08fdba
MS
12423
12424 /* 13.4.0.8 */
34332678
CT
12425 for (; argtypes && argtypes != void_list_node;
12426 argtypes = TREE_CHAIN (argtypes))
12427 if (TREE_PURPOSE (argtypes))
12428 {
12429 TREE_PURPOSE (argtypes) = NULL_TREE;
596ea4e5
AS
12430 if (operator_code == POSTINCREMENT_EXPR
12431 || operator_code == POSTDECREMENT_EXPR)
34332678
CT
12432 {
12433 if (pedantic)
12434 cp_pedwarn ("`%D' cannot have default arguments", decl);
12435 }
12436 else
12437 cp_error ("`%D' cannot have default arguments", decl);
12438 }
12439
8d08fdba
MS
12440 }
12441}
12442\f
d8e178a0 12443static const char *
094fe153
JM
12444tag_name (code)
12445 enum tag_types code;
12446{
12447 switch (code)
12448 {
12449 case record_type:
12450 return "struct";
12451 case class_type:
12452 return "class";
12453 case union_type:
12454 return "union ";
12455 case enum_type:
12456 return "enum";
094fe153
JM
12457 default:
12458 my_friendly_abort (981122);
12459 }
12460}
12461
8d08fdba
MS
12462/* Get the struct, enum or union (CODE says which) with tag NAME.
12463 Define the tag as a forward-reference if it is not defined.
12464
12465 C++: If a class derivation is given, process it here, and report
12466 an error if multiple derivation declarations are not identical.
12467
12468 If this is a definition, come in through xref_tag and only look in
12469 the current frame for the name (since C++ allows new names in any
12470 scope.) */
12471
8d08fdba 12472tree
ca107ded 12473xref_tag (code_type_node, name, globalize)
8d08fdba 12474 tree code_type_node;
ca107ded 12475 tree name;
8d08fdba
MS
12476 int globalize;
12477{
12478 enum tag_types tag_code;
12479 enum tree_code code;
8d08fdba 12480 register tree ref, t;
8f032717 12481 struct binding_level *b = current_binding_level;
a80e4195 12482 int got_type = 0;
dc8263bc 12483 tree attributes = NULL_TREE;
25aab5d0 12484 tree context = NULL_TREE;
dc8263bc
JM
12485
12486 /* If we are called from the parser, code_type_node will sometimes be a
12487 TREE_LIST. This indicates that the user wrote
12488 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12489 use them later. */
12490 if (TREE_CODE (code_type_node) == TREE_LIST)
12491 {
12492 attributes = TREE_PURPOSE (code_type_node);
12493 code_type_node = TREE_VALUE (code_type_node);
12494 }
8d08fdba 12495
665f2503 12496 tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8d08fdba
MS
12497 switch (tag_code)
12498 {
12499 case record_type:
12500 case class_type:
8d08fdba 12501 code = RECORD_TYPE;
8d08fdba
MS
12502 break;
12503 case union_type:
12504 code = UNION_TYPE;
8d08fdba
MS
12505 break;
12506 case enum_type:
12507 code = ENUMERAL_TYPE;
12508 break;
12509 default:
12510 my_friendly_abort (18);
12511 }
12512
12513 /* If a cross reference is requested, look up the type
12514 already defined for this tag and return it. */
2f939d94 12515 if (TYPE_P (name))
be99da77
MS
12516 {
12517 t = name;
a80e4195
MS
12518 name = TYPE_IDENTIFIER (t);
12519 got_type = 1;
be99da77
MS
12520 }
12521 else
12522 t = IDENTIFIER_TYPE_VALUE (name);
61a127b3 12523
f2ae0c45
JM
12524 /* Warn about 'friend struct Inherited;' doing the wrong thing. */
12525 if (t && globalize && TREE_CODE (t) == TYPENAME_TYPE)
12526 {
12527 static int explained;
12528
12529 cp_warning ("`%s %T' declares a new type at namespace scope;\n\
12530to refer to the inherited type, say `%s %T::%T'%s",
12531 tag_name (tag_code), name, tag_name (tag_code),
12532 constructor_name (current_class_type), TYPE_IDENTIFIER (t),
12533 (!explained ? "\n\
12534(names from dependent base classes are not visible to unqualified name lookup)"
12535 : ""));
12536
12537 explained = 1;
12538 }
12539
73b0fce8 12540 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
a1281f45 12541 && TREE_CODE (t) != BOUND_TEMPLATE_TEMPLATE_PARM)
a0a33927
MS
12542 t = NULL_TREE;
12543
8ccc31eb 12544 if (! globalize)
8d08fdba 12545 {
f3400fe2
JM
12546 /* If we know we are defining this tag, only look it up in
12547 this scope and don't try to find it as a type. */
12548 ref = lookup_tag (code, name, b, 1);
8d08fdba
MS
12549 }
12550 else
12551 {
25aab5d0 12552 if (t)
36a117a5 12553 {
25aab5d0
MM
12554 /* [dcl.type.elab] If the identifier resolves to a
12555 typedef-name or a template type-parameter, the
12556 elaborated-type-specifier is ill-formed. */
12557 if (t != TYPE_MAIN_VARIANT (t)
12558 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12559 cp_pedwarn ("using typedef-name `%D' after `%s'",
12560 TYPE_NAME (t), tag_name (tag_code));
12561 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12562 cp_error ("using template type parameter `%T' after `%s'",
12563 t, tag_name (tag_code));
12564
12565 ref = t;
12566 }
12567 else
12568 ref = lookup_tag (code, name, b, 0);
68642fb6 12569
25aab5d0
MM
12570 if (! ref)
12571 {
12572 /* Try finding it as a type declaration. If that wins,
68642fb6 12573 use it. */
25aab5d0
MM
12574 ref = lookup_name (name, 1);
12575
12576 if (ref != NULL_TREE
12577 && processing_template_decl
12578 && DECL_CLASS_TEMPLATE_P (ref)
12579 && template_class_depth (current_class_type) == 0)
12580 /* Since GLOBALIZE is true, we're declaring a global
6757edfe 12581 template, so we want this type. */
17aec3eb 12582 ref = DECL_TEMPLATE_RESULT (ref);
6757edfe 12583
25aab5d0
MM
12584 if (ref && TREE_CODE (ref) == TYPE_DECL
12585 && TREE_CODE (TREE_TYPE (ref)) == code)
12586 ref = TREE_TYPE (ref);
12587 else
12588 ref = NULL_TREE;
12589 }
12590
68642fb6
UD
12591 if (ref && current_class_type
12592 && template_class_depth (current_class_type)
12593 && PROCESSING_REAL_TEMPLATE_DECL_P ())
25aab5d0
MM
12594 {
12595 /* Since GLOBALIZE is non-zero, we are not looking at a
12596 definition of this tag. Since, in addition, we are currently
12597 processing a (member) template declaration of a template
12598 class, we must be very careful; consider:
12599
12600 template <class X>
12601 struct S1
12602
12603 template <class U>
12604 struct S2
12605 { template <class V>
12606 friend struct S1; };
12607
12608 Here, the S2::S1 declaration should not be confused with the
12609 outer declaration. In particular, the inner version should
12610 have a template parameter of level 2, not level 1. This
12611 would be particularly important if the member declaration
12612 were instead:
12613
12614 template <class V = U> friend struct S1;
12615
12616 say, when we should tsubst into `U' when instantiating
12617 S2. On the other hand, when presented with:
12618
12619 template <class T>
12620 struct S1 {
12621 template <class U>
12622 struct S2 {};
12623 template <class U>
12624 friend struct S2;
12625 };
12626
12627 we must find the inner binding eventually. We
12628 accomplish this by making sure that the new type we
12629 create to represent this declaration has the right
12630 TYPE_CONTEXT. */
12631 context = TYPE_CONTEXT (ref);
12632 ref = NULL_TREE;
8d08fdba
MS
12633 }
12634 }
12635
8d08fdba
MS
12636 if (! ref)
12637 {
12638 /* If no such tag is yet defined, create a forward-reference node
12639 and record it as the "definition".
12640 When a real declaration of this type is found,
12641 the forward-reference will be altered into a real type. */
8d08fdba
MS
12642 if (code == ENUMERAL_TYPE)
12643 {
8251199e 12644 cp_error ("use of enum `%#D' without previous declaration", name);
fc378698 12645
8d08fdba
MS
12646 ref = make_node (ENUMERAL_TYPE);
12647
12648 /* Give the type a default layout like unsigned int
12649 to avoid crashing if it does not get defined. */
12650 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12651 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
11cf4d18 12652 TYPE_USER_ALIGN (ref) = 0;
8d08fdba
MS
12653 TREE_UNSIGNED (ref) = 1;
12654 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12655 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12656 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12657
12658 /* Enable us to recognize when a type is created in class context.
12659 To do nested classes correctly, this should probably be cleared
12660 out when we leave this classes scope. Currently this in only
12661 done in `start_enum'. */
12662
12663 pushtag (name, ref, globalize);
8d08fdba 12664 }
8d08fdba
MS
12665 else
12666 {
8d08fdba 12667 struct binding_level *old_b = class_binding_level;
8d08fdba 12668
33848bb0 12669 ref = make_aggr_type (code);
25aab5d0 12670 TYPE_CONTEXT (ref) = context;
8d08fdba 12671
8d08fdba
MS
12672#ifdef NONNESTED_CLASSES
12673 /* Class types don't nest the way enums do. */
12674 class_binding_level = (struct binding_level *)0;
12675#endif
12676 pushtag (name, ref, globalize);
12677 class_binding_level = old_b;
8d08fdba
MS
12678 }
12679 }
12680 else
12681 {
7fe6899f 12682 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
6757edfe 12683 redeclare_class_template (ref, current_template_parms);
8d08fdba
MS
12684 }
12685
8d08fdba
MS
12686 /* Until the type is defined, tentatively accept whatever
12687 structure tag the user hands us. */
d0f062fb 12688 if (!COMPLETE_TYPE_P (ref)
8d08fdba
MS
12689 && ref != current_class_type
12690 /* Have to check this, in case we have contradictory tag info. */
12691 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12692 {
12693 if (tag_code == class_type)
12694 CLASSTYPE_DECLARED_CLASS (ref) = 1;
6eabb241 12695 else if (tag_code == record_type)
8d08fdba
MS
12696 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12697 }
12698
dc8263bc
JM
12699 TREE_TYPE (ref) = attributes;
12700
8d08fdba
MS
12701 return ref;
12702}
8ccc31eb 12703
fc378698
MS
12704tree
12705xref_tag_from_type (old, id, globalize)
12706 tree old, id;
12707 int globalize;
12708{
12709 tree code_type_node;
12710
12711 if (TREE_CODE (old) == RECORD_TYPE)
12712 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12713 ? class_type_node : record_type_node);
12714 else
12715 code_type_node = union_type_node;
12716
12717 if (id == NULL_TREE)
12718 id = TYPE_IDENTIFIER (old);
12719
ca107ded 12720 return xref_tag (code_type_node, id, globalize);
fc378698
MS
12721}
12722
3fd71a52
MM
12723/* REF is a type (named NAME), for which we have just seen some
12724 baseclasses. BINFO is a list of those baseclasses; the
12725 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12726 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12727 struct, or union. */
12728
8ccc31eb
MS
12729void
12730xref_basetypes (code_type_node, name, ref, binfo)
12731 tree code_type_node;
12732 tree name, ref;
12733 tree binfo;
12734{
12735 /* In the declaration `A : X, Y, ... Z' we mark all the types
12736 (A, X, Y, ..., Z) so we can check for duplicates. */
12737 tree binfos;
d6479fe7
MM
12738 tree base;
12739
8ccc31eb 12740 int i, len;
665f2503 12741 enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8ccc31eb
MS
12742
12743 if (tag_code == union_type)
12744 {
8251199e 12745 cp_error ("derived union `%T' invalid", ref);
8ccc31eb
MS
12746 return;
12747 }
12748
12749 len = list_length (binfo);
8ccc31eb 12750
d6479fe7
MM
12751 /* First, make sure that any templates in base-classes are
12752 instantiated. This ensures that if we call ourselves recursively
12753 we do not get confused about which classes are marked and which
12754 are not. */
12755 for (base = binfo; base; base = TREE_CHAIN (base))
12756 complete_type (TREE_VALUE (base));
12757
8ccc31eb
MS
12758 SET_CLASSTYPE_MARKED (ref);
12759 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12760
12761 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12762 {
12763 /* The base of a derived struct is public by default. */
12764 int via_public
be99da77
MS
12765 = (TREE_PURPOSE (binfo) == access_public_node
12766 || TREE_PURPOSE (binfo) == access_public_virtual_node
8ccc31eb 12767 || (tag_code != class_type
be99da77
MS
12768 && (TREE_PURPOSE (binfo) == access_default_node
12769 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
d8b55a76
JM
12770 int via_protected
12771 = (TREE_PURPOSE (binfo) == access_protected_node
12772 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
8ccc31eb 12773 int via_virtual
be99da77 12774 = (TREE_PURPOSE (binfo) == access_private_virtual_node
d8b55a76 12775 || TREE_PURPOSE (binfo) == access_protected_virtual_node
be99da77
MS
12776 || TREE_PURPOSE (binfo) == access_public_virtual_node
12777 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12778 tree basetype = TREE_VALUE (binfo);
8ccc31eb
MS
12779 tree base_binfo;
12780
8ccc31eb
MS
12781 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12782 basetype = TREE_TYPE (basetype);
5566b478
MS
12783 if (!basetype
12784 || (TREE_CODE (basetype) != RECORD_TYPE
a80e4195 12785 && TREE_CODE (basetype) != TYPENAME_TYPE
73b0fce8 12786 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
a1281f45 12787 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
8ccc31eb 12788 {
8251199e 12789 cp_error ("base type `%T' fails to be a struct or class type",
8ccc31eb
MS
12790 TREE_VALUE (binfo));
12791 continue;
12792 }
2b9dc906 12793
11b5139c 12794 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
2b9dc906 12795
8adf5b5e
JM
12796 /* This code replaces similar code in layout_basetypes.
12797 We put the complete_type first for implicit `typename'. */
d0f062fb 12798 if (!COMPLETE_TYPE_P (basetype)
2b9dc906 12799 && ! (current_template_parms && uses_template_parms (basetype)))
8ccc31eb 12800 {
8251199e 12801 cp_error ("base class `%T' has incomplete type", basetype);
8ccc31eb
MS
12802 continue;
12803 }
8ccc31eb
MS
12804 else
12805 {
12806 if (CLASSTYPE_MARKED (basetype))
12807 {
12808 if (basetype == ref)
8251199e 12809 cp_error ("recursive type `%T' undefined", basetype);
8ccc31eb 12810 else
8251199e 12811 cp_error ("duplicate base type `%T' invalid", basetype);
8ccc31eb
MS
12812 continue;
12813 }
12814
eff71ab0 12815 if (TYPE_FOR_JAVA (basetype)
46ccf50a 12816 && (current_lang_depth () == 0))
eff71ab0
PB
12817 TYPE_FOR_JAVA (ref) = 1;
12818
8ccc31eb
MS
12819 /* Note that the BINFO records which describe individual
12820 inheritances are *not* shared in the lattice! They
12821 cannot be shared because a given baseclass may be
12822 inherited with different `accessibility' by different
12823 derived classes. (Each BINFO record describing an
12824 individual inheritance contains flags which say what
12825 the `accessibility' of that particular inheritance is.) */
68642fb6
UD
12826
12827 base_binfo
fed3cef0 12828 = make_binfo (size_zero_node, basetype,
7ddedda4
MM
12829 CLASS_TYPE_P (basetype)
12830 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12831 CLASS_TYPE_P (basetype)
12832 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
68642fb6 12833
8ccc31eb
MS
12834 TREE_VEC_ELT (binfos, i) = base_binfo;
12835 TREE_VIA_PUBLIC (base_binfo) = via_public;
12836 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12837 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12838 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12839
dfbcd65a
JM
12840 /* We need to unshare the binfos now so that lookups during class
12841 definition work. */
12842 unshare_base_binfos (base_binfo);
12843
8ccc31eb 12844 SET_CLASSTYPE_MARKED (basetype);
9e9ff709 12845
8ccc31eb
MS
12846 /* We are free to modify these bits because they are meaningless
12847 at top level, and BASETYPE is a top-level type. */
12848 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12849 {
12850 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
4c6b7393
MM
12851 /* Converting to a virtual base class requires looking
12852 up the offset of the virtual base. */
12853 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
8ccc31eb
MS
12854 }
12855
7ddedda4
MM
12856 if (CLASS_TYPE_P (basetype))
12857 {
5362b086 12858 TYPE_HAS_NEW_OPERATOR (ref)
834c6dff 12859 |= TYPE_HAS_NEW_OPERATOR (basetype);
5362b086 12860 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
834c6dff 12861 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
7ddedda4 12862 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
4c6b7393 12863 /* If the base-class uses multiple inheritance, so do we. */
68642fb6 12864 TYPE_USES_MULTIPLE_INHERITANCE (ref)
4c6b7393
MM
12865 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12866 /* Likewise, if converting to a base of the base may require
12867 code, then we may need to generate code to convert to a
12868 base as well. */
68642fb6 12869 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
4c6b7393 12870 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
7ddedda4
MM
12871 }
12872
8ccc31eb
MS
12873 i += 1;
12874 }
12875 }
12876 if (i)
12877 TREE_VEC_LENGTH (binfos) = i;
12878 else
12879 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12880
12881 if (i > 1)
7ddedda4 12882 {
4c6b7393
MM
12883 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12884 /* If there is more than one non-empty they cannot be at the same
12885 address. */
12886 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
7ddedda4
MM
12887 }
12888
8ccc31eb
MS
12889 /* Unmark all the types. */
12890 while (--i >= 0)
12891 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12892 CLEAR_CLASSTYPE_MARKED (ref);
12893
70c532b5
MM
12894 /* Now that we know all the base-classes, set up the list of virtual
12895 bases. */
23381155 12896 get_vbase_types (ref);
8ccc31eb 12897}
68642fb6 12898
8d08fdba 12899\f
8d08fdba
MS
12900/* Begin compiling the definition of an enumeration type.
12901 NAME is its name (or null if anonymous).
12902 Returns the type object, as yet incomplete.
12903 Also records info about it so that build_enumerator
12904 may be used to declare the individual values as they are read. */
12905
12906tree
12907start_enum (name)
12908 tree name;
12909{
12910 register tree enumtype = NULL_TREE;
8f032717 12911 struct binding_level *b = current_binding_level;
8d08fdba
MS
12912
12913 /* If this is the real definition for a previous forward reference,
12914 fill in the contents in the same object that used to be the
12915 forward reference. */
12916
12917 if (name != NULL_TREE)
12918 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12919
12920 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252
NS
12921 {
12922 cp_error ("multiple definition of `%#T'", enumtype);
12923 cp_error_at ("previous definition here", enumtype);
58595203
MM
12924 /* Clear out TYPE_VALUES, and start again. */
12925 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 12926 }
8d08fdba
MS
12927 else
12928 {
12929 enumtype = make_node (ENUMERAL_TYPE);
12930 pushtag (name, enumtype, 0);
12931 }
12932
12933 if (current_class_type)
12934 TREE_ADDRESSABLE (b->tags) = 1;
c91a56d2 12935
8d08fdba
MS
12936 GNU_xref_decl (current_function_decl, enumtype);
12937 return enumtype;
12938}
12939
12940/* After processing and defining all the values of an enumeration type,
12941 install their decls in the enumeration type and finish it off.
968b956a 12942 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 12943
968b956a 12944void
dbfe2124
MM
12945finish_enum (enumtype)
12946 tree enumtype;
8d08fdba 12947{
968b956a
MM
12948 tree pair;
12949 tree minnode;
12950 tree maxnode;
12951 tree t;
12952 bool unsignedp;
12953 int lowprec;
12954 int highprec;
12955 int precision;
12956
12957 /* We built up the VALUES in reverse order. */
12958 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12959
12960 /* [dcl.enum]
12961
12962 Following the closing brace of an enum-specifier, each
12963 enumerator has the type of its enumeration. Prior to the
12964 closing brace, the type of each enumerator is the type of
12965 its initializing value. */
12966 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
12967 TREE_TYPE (TREE_VALUE (pair)) = enumtype;
12968
12969 /* For a enum defined in a template, all further processing is
12970 postponed until the template is instantiated. */
12971 if (processing_template_decl)
12972 {
12973 tree scope = current_scope ();
12974 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12975 add_stmt (build_min (TAG_DEFN, enumtype));
8d08fdba 12976
0ba8a114 12977
968b956a
MM
12978 return;
12979 }
12980
12981 /* Figure out what the minimum and maximum values of the enumerators
12982 are. */
12983 if (TYPE_VALUES (enumtype))
8d08fdba 12984 {
968b956a 12985 minnode = maxnode = NULL_TREE;
5566b478 12986
968b956a
MM
12987 for (pair = TYPE_VALUES (enumtype);
12988 pair;
12989 pair = TREE_CHAIN (pair))
8d08fdba 12990 {
ed44da02
MM
12991 tree value;
12992
968b956a 12993 value = DECL_INITIAL (TREE_VALUE (pair));
ed44da02 12994
968b956a
MM
12995 if (!minnode)
12996 minnode = maxnode = value;
12997 else if (tree_int_cst_lt (maxnode, value))
12998 maxnode = value;
12999 else if (tree_int_cst_lt (value, minnode))
13000 minnode = value;
8d08fdba
MS
13001 }
13002 }
f376e137 13003 else
968b956a
MM
13004 minnode = maxnode = integer_zero_node;
13005
13006 /* Compute the number of bits require to represent all values of the
13007 enumeration. We must do this before the type of MINNODE and
13008 MAXNODE are transformed, since min_precision relies on the
13009 TREE_TYPE of the value it is passed. */
13010 unsignedp = tree_int_cst_sgn (minnode) >= 0;
13011 lowprec = min_precision (minnode, unsignedp);
13012 highprec = min_precision (maxnode, unsignedp);
13013 precision = MAX (lowprec, highprec);
13014
13015 /* Set the TREE_TYPE for the values as well. That's so that when we
13016 call decl_constant_value we get an entity of the right type (but
13017 with the constant value). In addition, transform the TYPE_VALUES
13018 list to contain the values, rather than the CONST_DECLs for them. */
13019 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
13020 {
13021 tree value = DECL_INITIAL (TREE_VALUE (pair));
13022
13023 TREE_TYPE (value) = enumtype;
13024 TREE_VALUE (pair) = value;
13025 }
13026
13027 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
13028 TYPE_SIZE (enumtype) = NULL_TREE;
13029 TYPE_PRECISION (enumtype) = precision;
13030 if (unsignedp)
13031 fixup_unsigned_type (enumtype);
cbf882af 13032 else
968b956a 13033 fixup_signed_type (enumtype);
8d08fdba 13034
968b956a
MM
13035 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13036 /* Use the width of the narrowest normal C type which is wide
13037 enough. */
13038 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
13039 (precision, 1));
13040 else
13041 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
68642fb6 13042
968b956a
MM
13043 TYPE_SIZE (enumtype) = NULL_TREE;
13044 layout_type (enumtype);
8d08fdba 13045
968b956a
MM
13046 /* Fix up all variant types of this enum type. */
13047 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13048 {
13049 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13050 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
13051 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
13052 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
13053 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
13054 TYPE_MODE (t) = TYPE_MODE (enumtype);
13055 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
13056 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
13057 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
13058 TREE_UNSIGNED (t) = TREE_UNSIGNED (enumtype);
cbf882af
MM
13059 }
13060
968b956a
MM
13061 /* Finish debugging output for this type. */
13062 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
13063}
13064
079e1098 13065/* Build and install a CONST_DECL for an enumeration constant of the
58595203 13066 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
13067 Assignment of sequential values by default is handled here. */
13068
58595203
MM
13069void
13070build_enumerator (name, value, enumtype)
079e1098
MM
13071 tree name;
13072 tree value;
58595203 13073 tree enumtype;
8d08fdba 13074{
58595203 13075 tree decl;
e8bd800e 13076 tree context;
58595203
MM
13077 tree type;
13078 tree values;
8d08fdba
MS
13079
13080 /* Remove no-op casts from the value. */
13081 if (value)
13082 STRIP_TYPE_NOPS (value);
13083
58595203
MM
13084 if (! processing_template_decl)
13085 {
13086 /* Validate and default VALUE. */
13087 if (value != NULL_TREE)
13088 {
fc611ce0 13089 value = decl_constant_value (value);
58595203
MM
13090
13091 if (TREE_CODE (value) == INTEGER_CST)
13092 {
13093 value = default_conversion (value);
13094 constant_expression_warning (value);
13095 }
13096 else
13097 {
13098 cp_error ("enumerator value for `%D' not integer constant", name);
13099 value = NULL_TREE;
13100 }
13101 }
13102
13103 /* Default based on previous value. */
13104 if (value == NULL_TREE && ! processing_template_decl)
13105 {
13106 tree prev_value;
13107
13108 if (TYPE_VALUES (enumtype))
13109 {
13110 /* The next value is the previous value ... */
13111 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13112 /* ... plus one. */
ab76ca54
MM
13113 value = cp_build_binary_op (PLUS_EXPR,
13114 prev_value,
13115 integer_one_node);
68642fb6 13116
58595203
MM
13117 if (tree_int_cst_lt (value, prev_value))
13118 cp_error ("overflow in enumeration values at `%D'", name);
13119 }
13120 else
13121 value = integer_zero_node;
13122 }
13123
13124 /* Remove no-op casts from the value. */
13125 if (value)
13126 STRIP_TYPE_NOPS (value);
013bc8af 13127#if 0
58595203
MM
13128 /* To fix MAX_VAL enum consts. (bkoz) */
13129 TREE_TYPE (value) = integer_type_node;
013bc8af 13130#endif
58595203 13131 }
8d08fdba 13132
58595203
MM
13133 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13134 Even in other cases, we will later (in finish_enum) be setting
13135 the type of VALUE. But, we don't need to make a copy if this
13136 VALUE is one of the enumeration constants for this same
13137 enumeration type. */
13138 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13139 if (TREE_VALUE (values) == value)
13140 break;
13141 /* If we didn't break out of the loop, then we do need a copy. */
13142 if (!values && value)
13143 value = copy_node (value);
ed44da02 13144
8d08fdba 13145 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
13146 context = current_scope ();
13147
13148 /* Build the actual enumeration constant. Note that the enumeration
13149 constants have the type of their initializers until the
13150 enumeration is complete:
13151
13152 [ dcl.enum ]
13153
13154 Following the closing brace of an enum-specifier, each enumer-
13155 ator has the type of its enumeration. Prior to the closing
13156 brace, the type of each enumerator is the type of its
13157 initializing value.
13158
13159 In finish_enum we will reset the type. Of course, if we're
13160 processing a template, there may be no value. */
13161 type = value ? TREE_TYPE (value) : NULL_TREE;
13162
13163 if (context && context == current_class_type)
13164 /* This enum declaration is local to the class. We need the full
8f17b5c5 13165 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
13166 decl = build_lang_decl (CONST_DECL, name, type);
13167 else
13168 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 13169 a function could mean local to a class method. */
58595203 13170 decl = build_decl (CONST_DECL, name, type);
e8bd800e 13171
58595203
MM
13172 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13173 DECL_INITIAL (decl) = value;
13174 TREE_READONLY (decl) = 1;
e8bd800e 13175
58595203
MM
13176 if (context && context == current_class_type)
13177 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
8f032717
MM
13178 on the TYPE_FIELDS list for `S'. (That's so that you can say
13179 things like `S::i' later.) */
58595203
MM
13180 finish_member_declaration (decl);
13181 else
13182 {
13183 pushdecl (decl);
13184 GNU_xref_decl (current_function_decl, decl);
13185 }
13186
13187 /* Add this enumeration constant to the list for this type. */
13188 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
13189}
13190
8d08fdba 13191\f
a8f73d4b
MM
13192/* We're defining DECL. Make sure that it's type is OK. */
13193
13194static void
f444e36b 13195check_function_type (decl, current_function_parms)
a8f73d4b 13196 tree decl;
f444e36b 13197 tree current_function_parms;
a8f73d4b
MM
13198{
13199 tree fntype = TREE_TYPE (decl);
d0f062fb 13200 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
13201
13202 /* In a function definition, arg types must be complete. */
13203 require_complete_types_for_parms (current_function_parms);
13204
d0f062fb 13205 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b
MM
13206 {
13207 cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13208
13209 /* Make it return void instead, but don't change the
13210 type of the DECL_RESULT, in case we have a named return value. */
13211 if (TREE_CODE (fntype) == METHOD_TYPE)
13212 {
13213 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13214 TREE_TYPE (decl)
13215 = build_cplus_method_type (ctype,
13216 void_type_node,
13217 FUNCTION_ARG_CHAIN (decl));
13218 }
13219 else
13220 TREE_TYPE (decl)
13221 = build_function_type (void_type_node,
13222 TYPE_ARG_TYPES (TREE_TYPE (decl)));
68642fb6 13223 TREE_TYPE (decl)
a8f73d4b
MM
13224 = build_exception_variant (fntype,
13225 TYPE_RAISES_EXCEPTIONS (fntype));
13226 }
13227 else
13228 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13229}
13230
8d08fdba
MS
13231/* Create the FUNCTION_DECL for a function definition.
13232 DECLSPECS and DECLARATOR are the parts of the declaration;
13233 they describe the function's name and the type it returns,
13234 but twisted together in a fashion that parallels the syntax of C.
13235
a8f73d4b
MM
13236 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13237 DECLARATOR is really the DECL for the function we are about to
13238 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 13239 indicating that the function is an inline defined in-class.
68642fb6 13240
8d08fdba
MS
13241 This function creates a binding context for the function body
13242 as well as setting up the FUNCTION_DECL in current_function_decl.
13243
13244 Returns 1 on success. If the DECLARATOR is not suitable for a function
13245 (it defines a datum instead), we return 0, which tells
13246 yyparse to report a parse error.
13247
13248 For C++, we must first check whether that datum makes any sense.
13249 For example, "class A local_a(1,2);" means that variable local_a
13250 is an aggregate of type A, which should have a constructor
87e3dbc9 13251 applied to it with the argument list [1, 2]. */
8d08fdba
MS
13252
13253int
a8f73d4b 13254start_function (declspecs, declarator, attrs, flags)
c11b6f21 13255 tree declspecs, declarator, attrs;
a8f73d4b 13256 int flags;
8d08fdba 13257{
5566b478 13258 tree decl1;
8d08fdba
MS
13259 tree ctype = NULL_TREE;
13260 tree fntype;
13261 tree restype;
13262 extern int have_extern_spec;
13263 extern int used_extern_spec;
13264 int doing_friend = 0;
a8f73d4b 13265 struct binding_level *bl;
f444e36b 13266 tree current_function_parms;
8d08fdba 13267
8d08fdba 13268 /* Sanity check. */
a1774733 13269 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
8d08fdba
MS
13270 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13271
e92cc029 13272 /* This should only be done once on the top most decl. */
8d08fdba
MS
13273 if (have_extern_spec && !used_extern_spec)
13274 {
1f8f4a0b 13275 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
8d08fdba
MS
13276 used_extern_spec = 1;
13277 }
13278
a8f73d4b 13279 if (flags & SF_PRE_PARSED)
8d08fdba
MS
13280 {
13281 decl1 = declarator;
13282
8d08fdba
MS
13283 fntype = TREE_TYPE (decl1);
13284 if (TREE_CODE (fntype) == METHOD_TYPE)
13285 ctype = TYPE_METHOD_BASETYPE (fntype);
13286
cab1f180
ML
13287 /* ISO C++ 11.4/5. A friend function defined in a class is in
13288 the (lexical) scope of the class in which it is defined. */
8d08fdba
MS
13289 if (!ctype && DECL_FRIEND_P (decl1))
13290 {
4f1c5b7d 13291 ctype = DECL_FRIEND_CONTEXT (decl1);
8d08fdba
MS
13292
13293 /* CTYPE could be null here if we're dealing with a template;
13294 for example, `inline friend float foo()' inside a template
13295 will have no CTYPE set. */
13296 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13297 ctype = NULL_TREE;
13298 else
13299 doing_friend = 1;
13300 }
13301
5566b478
MS
13302 last_function_parms = DECL_ARGUMENTS (decl1);
13303 last_function_parm_tags = NULL_TREE;
8d08fdba
MS
13304 }
13305 else
13306 {
c11b6f21 13307 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
8d08fdba
MS
13308 /* If the declarator is not suitable for a function definition,
13309 cause a syntax error. */
13310 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13311
13312 fntype = TREE_TYPE (decl1);
13313
13314 restype = TREE_TYPE (fntype);
7ddedda4 13315 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
8d08fdba 13316 {
8251199e 13317 cp_error ("semicolon missing after declaration of `%#T'", restype);
051e6fd7 13318 shadow_tag (build_tree_list (NULL_TREE, restype));
8d08fdba
MS
13319 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13320 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13321 fntype = build_function_type (integer_type_node,
13322 TYPE_ARG_TYPES (fntype));
13323 else
13324 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13325 integer_type_node,
13326 TYPE_ARG_TYPES (fntype));
13327 TREE_TYPE (decl1) = fntype;
13328 }
13329
13330 if (TREE_CODE (fntype) == METHOD_TYPE)
13331 ctype = TYPE_METHOD_BASETYPE (fntype);
35680744 13332 else if (DECL_MAIN_P (decl1))
8d08fdba
MS
13333 {
13334 /* If this doesn't return integer_type, complain. */
13335 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13336 {
a28e3c7f 13337 if (pedantic || warn_return_type)
8251199e 13338 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
13339 TREE_TYPE (decl1) = fntype = default_function_type;
13340 }
8d08fdba
MS
13341 }
13342 }
68642fb6 13343
b35d4555
MM
13344 /* Sometimes we don't notice that a function is a static member, and
13345 build a METHOD_TYPE for it. Fix that up now. */
13346 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13347 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13348 {
3afb32a4 13349 revert_static_member_fn (decl1);
b35d4555
MM
13350 last_function_parms = TREE_CHAIN (last_function_parms);
13351 ctype = NULL_TREE;
13352 }
8d08fdba
MS
13353
13354 /* Warn if function was previously implicitly declared
13355 (but not if we warned then). */
13356 if (! warn_implicit
13357 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
8251199e 13358 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
8d08fdba 13359
f181d4ae
MM
13360 /* Set up current_class_type, and enter the scope of the class, if
13361 appropriate. */
13362 if (ctype)
13363 push_nested_class (ctype, 1);
13364 else if (DECL_STATIC_FUNCTION_P (decl1))
13365 push_nested_class (DECL_CONTEXT (decl1), 2);
13366
13367 /* Now that we have entered the scope of the class, we must restore
13368 the bindings for any template parameters surrounding DECL1, if it
13369 is an inline member template. (Order is important; consider the
13370 case where a template parameter has the same name as a field of
13371 the class.) It is not until after this point that
13372 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 13373 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
13374 maybe_begin_member_template_processing (decl1);
13375
56cb9733 13376 /* Effective C++ rule 15. */
9188c363 13377 if (warn_ecpp
596ea4e5 13378 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363
MM
13379 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13380 cp_warning ("`operator=' should return a reference to `*this'");
13381
13382 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13383 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
13384 if (!DECL_INITIAL (decl1))
13385 DECL_INITIAL (decl1) = error_mark_node;
9188c363
MM
13386
13387#ifdef SET_DEFAULT_DECL_ATTRIBUTES
13388 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13389#endif
68642fb6 13390
9188c363
MM
13391 /* This function exists in static storage.
13392 (This does not mean `static' in the C sense!) */
13393 TREE_STATIC (decl1) = 1;
13394
13395 /* We must call push_template_decl after current_class_type is set
13396 up. (If we are processing inline definitions after exiting a
13397 class scope, current_class_type will be NULL_TREE until set above
13398 by push_nested_class.) */
13399 if (processing_template_decl)
13400 decl1 = push_template_decl (decl1);
13401
f181d4ae 13402 /* We are now in the scope of the function being defined. */
8d08fdba 13403 current_function_decl = decl1;
f181d4ae 13404
5566b478
MS
13405 /* Save the parm names or decls from this function's declarator
13406 where store_parm_decls will find them. */
13407 current_function_parms = last_function_parms;
13408 current_function_parm_tags = last_function_parm_tags;
8d08fdba 13409
a8f73d4b
MM
13410 /* Make sure the parameter and return types are reasonable. When
13411 you declare a function, these types can be incomplete, but they
13412 must be complete when you define the function. */
5156628f 13413 if (! processing_template_decl)
f444e36b 13414 check_function_type (decl1, current_function_parms);
f181d4ae 13415
a8f73d4b
MM
13416 /* Build the return declaration for the function. */
13417 restype = TREE_TYPE (fntype);
13418 if (!processing_template_decl)
13419 {
13420 if (!DECL_RESULT (decl1))
5566b478 13421 {
5566b478 13422 DECL_RESULT (decl1)
a8f73d4b 13423 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
68642fb6
UD
13424 c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13425 DECL_RESULT (decl1));
5566b478 13426 }
5566b478 13427 }
a8f73d4b
MM
13428 else
13429 /* Just use `void'. Nobody will ever look at this anyhow. */
13430 DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13431
13432 /* Initialize RTL machinery. We cannot do this until
13433 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13434 even when processing a template; this is how we get
c00996a3
JM
13435 CFUN set up, and our per-function variables initialized.
13436 FIXME factor out the non-RTL stuff. */
a8f73d4b
MM
13437 bl = current_binding_level;
13438 init_function_start (decl1, input_filename, lineno);
13439 current_binding_level = bl;
a8f73d4b
MM
13440
13441 /* Even though we're inside a function body, we still don't want to
13442 call expand_expr to calculate the size of a variable-sized array.
13443 We haven't necessarily assigned RTL to all variables yet, so it's
13444 not safe to try to expand expressions involving them. */
13445 immediate_size_expand = 0;
01d939e8 13446 cfun->x_dont_save_pending_sizes_p = 1;
a8f73d4b 13447
f444e36b
MM
13448 /* Start the statement-tree, start the tree now. */
13449 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
6f80451c 13450
a8f73d4b 13451 /* Let the user know we're compiling this function. */
ea11ca7e 13452 announce_function (decl1);
b7484fbe 13453
878cd289
MS
13454 /* Record the decl so that the function name is defined.
13455 If we already have a decl for this name, and it is a FUNCTION_DECL,
13456 use the old decl. */
a8f73d4b 13457 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 13458 {
75650646 13459 /* A specialization is not used to guide overload resolution. */
2228d450 13460 if (!DECL_TEMPLATE_SPECIALIZATION (decl1)
959d8796 13461 && ! DECL_FUNCTION_MEMBER_P (decl1))
75650646 13462 decl1 = pushdecl (decl1);
2c73f9f5 13463 else
b7698cf0
JM
13464 {
13465 /* We need to set the DECL_CONTEXT. */
13466 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13467 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13468 /* And make sure we have enough default args. */
13469 check_default_args (decl1);
13470 }
878cd289
MS
13471 fntype = TREE_TYPE (decl1);
13472 }
5566b478 13473
a8f73d4b 13474 /* Reset these in case the call to pushdecl changed them. */
5566b478 13475 current_function_decl = decl1;
01d939e8 13476 cfun->decl = decl1;
878cd289 13477
78c120b5
MM
13478 /* If we are (erroneously) defining a function that we have already
13479 defined before, wipe out what we knew before. */
5362b086 13480 if (!DECL_PENDING_INLINE_P (decl1)
78c120b5
MM
13481 && DECL_SAVED_FUNCTION_DATA (decl1))
13482 {
13483 free (DECL_SAVED_FUNCTION_DATA (decl1));
13484 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13485 }
b35d4555 13486
f444e36b 13487 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
13488 {
13489 /* We know that this was set up by `grokclassfn'. We do not
13490 wait until `store_parm_decls', since evil parse errors may
13491 never get us to that point. Here we keep the consistency
13492 between `current_class_type' and `current_class_ptr'. */
13493 tree t = DECL_ARGUMENTS (decl1);
68642fb6
UD
13494
13495 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
b35d4555
MM
13496 162);
13497 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13498 19990811);
68642fb6
UD
13499
13500 cp_function_chain->x_current_class_ref
b35d4555
MM
13501 = build_indirect_ref (t, NULL_PTR);
13502 cp_function_chain->x_current_class_ptr = t;
13503
018fc244
MM
13504 /* Constructors and destructors need to know whether they're "in
13505 charge" of initializing virtual base classes. */
e0fff4b3 13506 t = TREE_CHAIN (t);
454fa7a7 13507 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
13508 {
13509 current_in_charge_parm = t;
13510 t = TREE_CHAIN (t);
13511 }
13512 if (DECL_HAS_VTT_PARM_P (decl1))
13513 {
13514 if (DECL_NAME (t) != vtt_parm_identifier)
13515 abort ();
13516 current_vtt_parm = t;
13517 }
b35d4555
MM
13518 }
13519
db5ae43f 13520 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 13521 {
4f1c5b7d 13522 tree ctx = decl_function_context (decl1);
86052cc3 13523
faae18ab
MS
13524 if (DECL_NOT_REALLY_EXTERN (decl1))
13525 DECL_EXTERNAL (decl1) = 0;
86052cc3 13526
79065db2 13527 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
13528 && TREE_PUBLIC (ctx))
13529 /* This is a function in a local class in an extern inline
13530 function. */
13531 comdat_linkage (decl1);
faae18ab 13532 }
8d08fdba
MS
13533 /* If this function belongs to an interface, it is public.
13534 If it belongs to someone else's interface, it is also external.
1f901793 13535 This only affects inlines and template instantiations. */
5566b478
MS
13536 else if (interface_unknown == 0
13537 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
d11ad92e 13538 || flag_alt_external_templates))
8d08fdba 13539 {
79065db2
MM
13540 if (DECL_DECLARED_INLINE_P (decl1)
13541 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 13542 || processing_template_decl)
1f901793
JM
13543 {
13544 DECL_EXTERNAL (decl1)
13545 = (interface_only
79065db2
MM
13546 || (DECL_DECLARED_INLINE_P (decl1)
13547 && ! flag_implement_inlines
9c73ec84 13548 && !DECL_VINDEX (decl1)));
1f901793
JM
13549
13550 /* For WIN32 we also want to put these in linkonce sections. */
13551 maybe_make_one_only (decl1);
13552 }
db5ae43f 13553 else
893de33c 13554 DECL_EXTERNAL (decl1) = 0;
e8abc66f 13555 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 13556 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba 13557 }
c16c47fb
JM
13558 else if (interface_unknown && interface_only
13559 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13560 || flag_alt_external_templates))
13561 {
13562 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13563 interface, we will have interface_only set but not
13564 interface_known. In that case, we don't want to use the normal
13565 heuristics because someone will supply a #pragma implementation
13566 elsewhere, and deducing it here would produce a conflict. */
13567 comdat_linkage (decl1);
13568 DECL_EXTERNAL (decl1) = 0;
13569 DECL_INTERFACE_KNOWN (decl1) = 1;
13570 DECL_DEFER_OUTPUT (decl1) = 1;
13571 }
8d08fdba 13572 else
a0a33927
MS
13573 {
13574 /* This is a definition, not a reference.
b7484fbe
MS
13575 So clear DECL_EXTERNAL. */
13576 DECL_EXTERNAL (decl1) = 0;
faae18ab 13577
79065db2
MM
13578 if ((DECL_DECLARED_INLINE_P (decl1)
13579 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
13580 && ! DECL_INTERFACE_KNOWN (decl1)
13581 /* Don't try to defer nested functions for now. */
4f1c5b7d 13582 && ! decl_function_context (decl1))
878cd289
MS
13583 DECL_DEFER_OUTPUT (decl1) = 1;
13584 else
893de33c 13585 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 13586 }
a9aedbc2 13587
f444e36b
MM
13588 pushlevel (0);
13589 current_binding_level->parm_flag = 1;
8d08fdba 13590
f30432d7
MS
13591 if (attrs)
13592 cplus_decl_attributes (decl1, NULL_TREE, attrs);
68642fb6 13593
8d08fdba
MS
13594 /* Promote the value to int before returning it. */
13595 if (C_PROMOTING_INTEGER_TYPE_P (restype))
5566b478
MS
13596 restype = type_promotes_to (restype);
13597
8d08fdba 13598 if (DECL_RESULT (decl1) == NULL_TREE)
f30432d7
MS
13599 {
13600 DECL_RESULT (decl1)
13601 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
91063b51
MM
13602 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13603 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
f30432d7 13604 }
8d08fdba 13605
5566b478
MS
13606 ++function_depth;
13607
0d9eb3ba 13608 if (DECL_DESTRUCTOR_P (decl1))
46e8c075
MM
13609 {
13610 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13611 DECL_CONTEXT (dtor_label) = current_function_decl;
13612 }
8d08fdba 13613
0ba8a114
NS
13614 start_fname_decls ();
13615
f444e36b
MM
13616 store_parm_decls (current_function_parms);
13617
8d08fdba
MS
13618 return 1;
13619}
13620\f
13621/* Store the parameter declarations into the current function declaration.
13622 This is called after parsing the parameter declarations, before
13623 digesting the body of the function.
13624
13625 Also install to binding contour return value identifier, if any. */
13626
f444e36b
MM
13627static void
13628store_parm_decls (current_function_parms)
13629 tree current_function_parms;
8d08fdba
MS
13630{
13631 register tree fndecl = current_function_decl;
13632 register tree parm;
13633 int parms_have_cleanups = 0;
eb66be0e 13634 tree cleanups = NULL_TREE;
8d08fdba 13635
8d08fdba
MS
13636 /* This is a list of types declared among parms in a prototype. */
13637 tree parmtags = current_function_parm_tags;
13638
13639 /* This is a chain of any other decls that came in among the parm
13640 declarations. If a parm is declared with enum {foo, bar} x;
13641 then CONST_DECLs for foo and bar are put here. */
13642 tree nonparms = NULL_TREE;
13643
b35d4555 13644 if (current_function_parms)
8d08fdba
MS
13645 {
13646 /* This case is when the function was defined with an ANSI prototype.
13647 The parms already have decls, so we need not do anything here
13648 except record them as in effect
13649 and complain if any redundant old-style parm decls were written. */
13650
b35d4555
MM
13651 tree specparms = current_function_parms;
13652 tree next;
13653
f444e36b 13654 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 13655 at class level. */
f444e36b 13656 storedecls (NULL_TREE);
8d08fdba 13657
f444e36b 13658 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
13659 for each of these. We must do them in reverse order so that
13660 they end in the correct forward order. */
f444e36b 13661 specparms = nreverse (specparms);
5566b478 13662
b35d4555 13663 for (parm = specparms; parm; parm = next)
8d08fdba
MS
13664 {
13665 next = TREE_CHAIN (parm);
13666 if (TREE_CODE (parm) == PARM_DECL)
13667 {
f444e36b 13668 tree cleanup;
fe1b3b96 13669
f444e36b
MM
13670 if (DECL_NAME (parm) == NULL_TREE
13671 || TREE_CODE (parm) != VOID_TYPE)
13672 pushdecl (parm);
13673 else
13674 cp_error ("parameter `%D' declared void", parm);
eb66be0e 13675
5362b086 13676 cleanup = (processing_template_decl
f444e36b
MM
13677 ? NULL_TREE
13678 : maybe_build_cleanup (parm));
68642fb6 13679
f444e36b
MM
13680 if (cleanup)
13681 cleanups = tree_cons (parm, cleanup, cleanups);
8d08fdba
MS
13682 }
13683 else
13684 {
13685 /* If we find an enum constant or a type tag,
13686 put it aside for the moment. */
13687 TREE_CHAIN (parm) = NULL_TREE;
13688 nonparms = chainon (nonparms, parm);
13689 }
13690 }
13691
f444e36b
MM
13692 /* Get the decls in their original chain order and record in the
13693 function. This is all and only the PARM_DECLs that were
13694 pushed into scope by the loop above. */
13695 DECL_ARGUMENTS (fndecl) = getdecls ();
13696 storetags (chainon (parmtags, gettags ()));
8d08fdba
MS
13697 }
13698 else
13699 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13700
13701 /* Now store the final chain of decls for the arguments
13702 as the decl-chain of the current lexical scope.
13703 Put the enumerators in as well, at the front so that
13704 DECL_ARGUMENTS is not modified. */
f444e36b 13705 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
eb448459 13706
eb66be0e
MS
13707 /* Now that we have initialized the parms, we can start their
13708 cleanups. We cannot do this before, since expand_decl_cleanup
13709 should not be called before the parm can be used. */
fe1b3b96
MM
13710 while (cleanups)
13711 {
68642fb6 13712 finish_decl_cleanup (TREE_PURPOSE (cleanups),
fe1b3b96
MM
13713 TREE_VALUE (cleanups));
13714 cleanups = TREE_CHAIN (cleanups);
13715 }
eb66be0e 13716
8d08fdba 13717 /* Create a binding contour which can be used to catch
f444e36b 13718 cleanup-generated temporaries. */
8d08fdba 13719 if (parms_have_cleanups)
f444e36b 13720 pushlevel (0);
8d08fdba 13721
b35d4555 13722 /* Do the starting of the exception specifications, if we have any. */
68642fb6 13723 if (flag_exceptions && !processing_template_decl
1660cb3a 13724 && flag_enforce_eh_specs
b35d4555 13725 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
52a11cbf 13726 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
13727}
13728
8d08fdba 13729\f
59026e79
MM
13730/* We have finished doing semantic analysis on DECL, but have not yet
13731 generated RTL for its body. Save away our current state, so that
13732 when we want to generate RTL later we know what to do. */
13733
13734static void
13735save_function_data (decl)
13736 tree decl;
13737{
ae499cce 13738 struct cp_language_function *f;
59026e79
MM
13739
13740 /* Save the language-specific per-function data so that we can
13741 get it back when we really expand this function. */
13742 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13743 19990908);
68642fb6 13744
59026e79 13745 /* Make a copy. */
ae499cce
MM
13746 f = ((struct cp_language_function *)
13747 xmalloc (sizeof (struct cp_language_function)));
4e135bdd 13748 memcpy (f, cp_function_chain, sizeof (struct cp_language_function));
59026e79
MM
13749 DECL_SAVED_FUNCTION_DATA (decl) = f;
13750
13751 /* Clear out the bits we don't need. */
ae499cce
MM
13752 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
13753 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
59026e79
MM
13754 f->x_named_label_uses = NULL;
13755 f->bindings = NULL;
8e4ce833 13756 f->x_local_names = NULL;
59026e79
MM
13757
13758 /* When we get back here again, we will be expanding. */
13759 f->x_expanding_p = 1;
914653a2
MM
13760
13761 /* If we've already decided that we cannot inline this function, we
13762 must remember that fact when we actually go to expand the
13763 function. */
13764 f->cannot_inline = current_function_cannot_inline;
59026e79
MM
13765}
13766
efee38a9
MM
13767/* At the end of every constructor we generate to code to return
13768 `this'. Do that now. */
13769
13770static void
13771finish_constructor_body ()
13772{
13773 /* Any return from a constructor will end up here. */
3dbc07b6 13774 if (ctor_label)
ae499cce 13775 add_stmt (build_stmt (LABEL_STMT, ctor_label));
efee38a9
MM
13776
13777 /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13778 generate the return, rather than a goto to CTOR_LABEL. */
13779 ctor_label = NULL_TREE;
13780 /* In check_return_expr we translate an empty return from a
13781 constructor to a return of `this'. */
13782 finish_return_stmt (NULL_TREE);
46e8c075 13783 /* Mark the end of the constructor. */
ae499cce 13784 add_stmt (build_stmt (CTOR_STMT));
efee38a9
MM
13785}
13786
9bfadf57
MM
13787/* At the end of every destructor we generate code to restore virtual
13788 function tables to the values desired by base classes and to call
efee38a9 13789 to base class destructors. Do that now. */
9bfadf57
MM
13790
13791static void
13792finish_destructor_body ()
13793{
13794 tree compound_stmt;
9bfadf57
MM
13795 tree exprstmt;
13796
13797 /* Create a block to contain all the extra code. */
13798 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13799
efee38a9 13800 /* Any return from a destructor will end up here. */
ae499cce 13801 add_stmt (build_stmt (LABEL_STMT, dtor_label));
efee38a9 13802
9bfadf57
MM
13803 /* Generate the code to call destructor on base class. If this
13804 destructor belongs to a class with virtual functions, then set
13805 the virtual function table pointer to represent the type of our
13806 base class. */
13807
13808 /* This side-effect makes call to `build_delete' generate the code
13809 we have to have at the end of this destructor. `build_delete'
13810 will set the flag again. */
13811 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13812
9bfadf57 13813 exprstmt = build_delete (current_class_type,
68642fb6 13814 current_class_ref,
86f45d2c 13815 sfk_base_destructor,
68642fb6 13816 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
9bfadf57
MM
13817 0);
13818
13819 if (exprstmt != error_mark_node
13820 && (TREE_CODE (exprstmt) != NOP_EXPR
13821 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13822 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13823 {
9bfadf57
MM
13824 if (exprstmt != void_zero_node)
13825 /* Don't call `expand_expr_stmt' if we're not going to do
13826 anything, since -Wall will give a diagnostic. */
13827 finish_expr_stmt (exprstmt);
13828
efee38a9 13829 /* Run destructors for all virtual baseclasses. */
9bfadf57
MM
13830 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13831 {
a55583e9
MM
13832 tree vbases;
13833 tree if_stmt;
13834
13835 if_stmt = begin_if_stmt ();
9bfadf57 13836 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
68642fb6 13837 current_in_charge_parm,
9bfadf57
MM
13838 integer_two_node),
13839 if_stmt);
13840
a55583e9
MM
13841 vbases = CLASSTYPE_VBASECLASSES (current_class_type);
13842 /* The CLASSTYPE_VBASECLASSES list is in initialization
13843 order, so we have to march through it in reverse order. */
13844 for (vbases = nreverse (copy_list (vbases));
13845 vbases;
13846 vbases = TREE_CHAIN (vbases))
9bfadf57 13847 {
a55583e9 13848 tree vbase = TREE_VALUE (vbases);
9f724b6a 13849 tree base_type = BINFO_TYPE (vbase);
a55583e9 13850
9f724b6a 13851 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (base_type))
9bfadf57 13852 {
9f724b6a
NS
13853 tree base_ptr_type = build_pointer_type (base_type);
13854 tree expr = current_class_ptr;
13855
13856 /* Convert to the basetype here, as we know the layout is
13857 fixed. What is more, if we let build_method_call do it,
13858 it will use the vtable, which may have been clobbered
13859 by the deletion of our primary base. */
13860
13861 expr = build1 (NOP_EXPR, base_ptr_type, expr);
13862 expr = build (PLUS_EXPR, base_ptr_type, expr,
13863 BINFO_OFFSET (vbase));
13864 expr = build_indirect_ref (expr, NULL);
13865 expr = build_method_call (expr, base_dtor_identifier,
13866 NULL_TREE, vbase,
13867 LOOKUP_NORMAL);
13868 finish_expr_stmt (expr);
9bfadf57 13869 }
9bfadf57
MM
13870 }
13871
13872 finish_then_clause (if_stmt);
13873 finish_if_stmt ();
13874 }
13875 }
68642fb6 13876
52682a1b
MM
13877 /* In a virtual destructor, we must call delete. */
13878 if (DECL_VIRTUAL_P (current_function_decl))
13879 {
13880 tree if_stmt;
13881 tree virtual_size = c_sizeof (current_class_type);
68642fb6 13882
52682a1b 13883 /* [class.dtor]
68642fb6 13884
52682a1b
MM
13885 At the point of definition of a virtual destructor (including
13886 an implicit definition), non-placement operator delete shall
13887 be looked up in the scope of the destructor's class and if
13888 found shall be accessible and unambiguous. */
13889 exprstmt = build_op_delete_call
13890 (DELETE_EXPR, current_class_ptr, virtual_size,
13891 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
298d6f60 13892
52682a1b
MM
13893 if_stmt = begin_if_stmt ();
13894 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13895 current_in_charge_parm,
13896 integer_one_node),
13897 if_stmt);
13898 finish_expr_stmt (exprstmt);
13899 finish_then_clause (if_stmt);
13900 finish_if_stmt ();
13901 }
9bfadf57
MM
13902
13903 /* Close the block we started above. */
13904 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13905}
13906
8d08fdba
MS
13907/* Finish up a function declaration and compile that function
13908 all the way to assembler language output. The free the storage
13909 for the function definition.
13910
68642fb6
UD
13911 FLAGS is a bitwise or of the following values:
13912 1 - CALL_POPLEVEL
f181d4ae
MM
13913 An extra call to poplevel (and expand_end_bindings) must be
13914 made to take care of the binding contour for the base
13915 initializers. This is only relevant for constructors.
13916 2 - INCLASS_INLINE
13917 We just finished processing the body of an in-class inline
13918 function definition. (This processing will have taken place
87e3dbc9 13919 after the class definition is complete.) */
8d08fdba 13920
4d6abc1c 13921tree
0acf7199 13922finish_function (flags)
f181d4ae 13923 int flags;
8d08fdba
MS
13924{
13925 register tree fndecl = current_function_decl;
13926 tree fntype, ctype = NULL_TREE;
f181d4ae
MM
13927 int call_poplevel = (flags & 1) != 0;
13928 int inclass_inline = (flags & 2) != 0;
87e3dbc9 13929 int nested;
8d08fdba
MS
13930
13931 /* When we get some parse errors, we can end up without a
13932 current_function_decl, so cope. */
13933 if (fndecl == NULL_TREE)
4d6abc1c 13934 return error_mark_node;
8d08fdba 13935
87e3dbc9 13936 nested = function_depth > 1;
8d08fdba
MS
13937 fntype = TREE_TYPE (fndecl);
13938
9bfadf57
MM
13939 /* TREE_READONLY (fndecl) = 1;
13940 This caused &foo to be of type ptr-to-const-function
13941 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 13942
f444e36b 13943 my_friendly_assert (building_stmt_tree (), 20000911);
8d08fdba 13944
0ba8a114
NS
13945 finish_fname_decls ();
13946
db9b2174
MM
13947 /* For a cloned function, we've already got all the code we need;
13948 there's no need to add any extra bits. */
f444e36b 13949 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 13950 {
efee38a9
MM
13951 if (DECL_CONSTRUCTOR_P (fndecl))
13952 {
13953 finish_constructor_body ();
13954 if (call_poplevel)
13955 do_poplevel ();
13956 }
9bfadf57
MM
13957 else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13958 finish_destructor_body ();
efee38a9
MM
13959 else if (DECL_MAIN_P (fndecl))
13960 {
13961 /* Make it so that `main' always returns 0 by default. */
13962#ifdef VMS
13963 finish_return_stmt (integer_one_node);
13964#else
13965 finish_return_stmt (integer_zero_node);
13966#endif
13967 }
87e3dbc9 13968
b35d4555
MM
13969 /* Finish dealing with exception specifiers. */
13970 if (flag_exceptions && !processing_template_decl
1660cb3a 13971 && flag_enforce_eh_specs
b35d4555 13972 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
52a11cbf
RH
13973 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13974 (TREE_TYPE (current_function_decl)),
13975 current_eh_spec_block);
5566b478 13976 }
68642fb6 13977
558475f0 13978 /* If we're saving up tree structure, tie off the function now. */
f444e36b 13979 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
8d2733ca 13980
8d08fdba
MS
13981 /* This must come after expand_function_end because cleanups might
13982 have declarations (from inline functions) that need to go into
13983 this function's blocks. */
f444e36b
MM
13984 if (current_binding_level->parm_flag != 1)
13985 my_friendly_abort (122);
13986 poplevel (1, 0, 1);
8d08fdba 13987
a8f73d4b 13988 /* Remember that we were in class scope. */
db5ae43f 13989 if (current_class_name)
a8f73d4b 13990 ctype = current_class_type;
db5ae43f 13991
1caa11d3
MM
13992 /* Must mark the RESULT_DECL as being in this function. */
13993 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13994
13995 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13996 to the FUNCTION_DECL node itself. */
13997 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13998
59026e79 13999 /* Save away current state, if appropriate. */
f444e36b 14000 if (!processing_template_decl)
59026e79
MM
14001 save_function_data (fndecl);
14002
95fabfd3
MM
14003 /* If this function calls `setjmp' it cannot be inlined. When
14004 `longjmp' is called it is not guaranteed to restore the value of
14005 local variables that have been modified since the call to
14006 `setjmp'. So, if were to inline this function into some caller
14007 `c', then when we `longjmp', we might not restore all variables
14008 in `c'. (It might seem, at first blush, that there's no way for
14009 this function to modify local variables in `c', but their
14010 addresses may have been stored somewhere accessible to this
14011 function.) */
f444e36b 14012 if (!processing_template_decl && calls_setjmp_p (fndecl))
95fabfd3
MM
14013 DECL_UNINLINABLE (fndecl) = 1;
14014
f444e36b
MM
14015 /* Clear out memory we no longer need. */
14016 free_after_parsing (cfun);
14017 /* Since we never call rest_of_compilation, we never clear
14018 CFUN. Do so explicitly. */
14019 free_after_compilation (cfun);
14020 cfun = NULL;
a8f73d4b
MM
14021
14022 /* If this is a in-class inline definition, we may have to pop the
14023 bindings for the template parameters that we added in
14024 maybe_begin_member_template_processing when start_function was
14025 called. */
14026 if (inclass_inline)
14027 maybe_end_member_template_processing ();
14028
14029 /* Leave the scope of the class. */
14030 if (ctype)
14031 pop_nested_class ();
5566b478
MS
14032
14033 --function_depth;
8d08fdba 14034
4d6abc1c 14035 /* Clean up. */
28cbf42c 14036 if (! nested)
1f8f4a0b
MM
14037 /* Let the error reporting routines know that we're outside a
14038 function. For a nested function, this value is used in
14039 pop_cp_function_context and then reset via pop_function_context. */
14040 current_function_decl = NULL_TREE;
4d6abc1c
MM
14041
14042 return fndecl;
8d08fdba
MS
14043}
14044\f
14045/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
14046 DECLSPECS and DECLARATOR are the parts of the declaration;
14047 they describe the return type and the name of the function,
14048 but twisted together in a fashion that parallels the syntax of C.
14049
14050 This function creates a binding context for the function body
14051 as well as setting up the FUNCTION_DECL in current_function_decl.
14052
14053 Returns a FUNCTION_DECL on success.
14054
14055 If the DECLARATOR is not suitable for a function (it defines a datum
14056 instead), we return 0, which tells yyparse to report a parse error.
14057
14058 May return void_type_node indicating that this method is actually
14059 a friend. See grokfield for more details.
14060
14061 Came here with a `.pushlevel' .
14062
14063 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14064 CHANGES TO CODE IN `grokfield'. */
e92cc029 14065
8d08fdba 14066tree
acf82af2
JM
14067start_method (declspecs, declarator, attrlist)
14068 tree declarator, declspecs, attrlist;
8d08fdba 14069{
c11b6f21 14070 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
acf82af2 14071 attrlist);
8d08fdba
MS
14072
14073 /* Something too ugly to handle. */
14074 if (fndecl == NULL_TREE)
14075 return NULL_TREE;
14076
14077 /* Pass friends other than inline friend functions back. */
a1774733 14078 if (fndecl == void_type_node)
8d08fdba
MS
14079 return fndecl;
14080
14081 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14082 /* Not a function, tell parser to report parse error. */
14083 return NULL_TREE;
14084
8d08fdba
MS
14085 if (DECL_IN_AGGR_P (fndecl))
14086 {
14087 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14088 {
68642fb6 14089 if (DECL_CONTEXT (fndecl)
2c73f9f5 14090 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2ae7bada
NS
14091 cp_error ("`%D' is already defined in class `%T'", fndecl,
14092 DECL_CONTEXT (fndecl));
8d08fdba
MS
14093 }
14094 return void_type_node;
14095 }
14096
f3400fe2
JM
14097 check_template_shadow (fndecl);
14098
79065db2 14099 DECL_DECLARED_INLINE_P (fndecl) = 1;
faae18ab 14100
8926095f 14101 if (flag_default_inline)
8d08fdba
MS
14102 DECL_INLINE (fndecl) = 1;
14103
36a117a5
MM
14104 /* We process method specializations in finish_struct_1. */
14105 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
3ac3d9ea 14106 fndecl = push_template_decl (fndecl);
a0a33927 14107
8d08fdba
MS
14108 if (! DECL_FRIEND_P (fndecl))
14109 {
8d08fdba
MS
14110 if (TREE_CHAIN (fndecl))
14111 {
14112 fndecl = copy_node (fndecl);
14113 TREE_CHAIN (fndecl) = NULL_TREE;
14114 }
14115
14116 if (DECL_CONSTRUCTOR_P (fndecl))
a0a33927
MS
14117 {
14118 if (! grok_ctor_properties (current_class_type, fndecl))
14119 return void_type_node;
14120 }
8d08fdba
MS
14121 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14122 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14123 }
14124
cd9f6678 14125 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
8d08fdba
MS
14126
14127 /* Make a place for the parms */
14128 pushlevel (0);
14129 current_binding_level->parm_flag = 1;
68642fb6 14130
8d08fdba
MS
14131 DECL_IN_AGGR_P (fndecl) = 1;
14132 return fndecl;
14133}
14134
14135/* Go through the motions of finishing a function definition.
14136 We don't compile this method until after the whole class has
14137 been processed.
14138
14139 FINISH_METHOD must return something that looks as though it
14140 came from GROKFIELD (since we are defining a method, after all).
14141
14142 This is called after parsing the body of the function definition.
14143 STMTS is the chain of statements that makes up the function body.
14144
14145 DECL is the ..._DECL that `start_method' provided. */
14146
14147tree
14148finish_method (decl)
14149 tree decl;
14150{
14151 register tree fndecl = decl;
14152 tree old_initial;
8d08fdba
MS
14153
14154 register tree link;
14155
a1774733 14156 if (decl == void_type_node)
8d08fdba
MS
14157 return decl;
14158
14159 old_initial = DECL_INITIAL (fndecl);
14160
14161 /* Undo the level for the parms (from start_method).
14162 This is like poplevel, but it causes nothing to be
14163 saved. Saving information here confuses symbol-table
14164 output routines. Besides, this information will
14165 be correctly output when this method is actually
14166 compiled. */
14167
14168 /* Clear out the meanings of the local variables of this level;
14169 also record in each decl which block it belongs to. */
14170
14171 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14172 {
14173 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 14174 pop_binding (DECL_NAME (link), link);
8d08fdba
MS
14175 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14176 DECL_CONTEXT (link) = NULL_TREE;
14177 }
14178
8d08fdba
MS
14179 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14180 (HOST_WIDE_INT) current_binding_level->level_chain,
14181 current_binding_level->parm_flag,
5566b478 14182 current_binding_level->keep);
8d08fdba
MS
14183
14184 poplevel (0, 0, 0);
14185
14186 DECL_INITIAL (fndecl) = old_initial;
14187
14188 /* We used to check if the context of FNDECL was different from
14189 current_class_type as another way to get inside here. This didn't work
14190 for String.cc in libg++. */
14191 if (DECL_FRIEND_P (fndecl))
14192 {
14193 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14194 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14195 decl = void_type_node;
14196 }
14197
14198 return decl;
14199}
14200\f
14201/* Called when a new struct TYPE is defined.
14202 If this structure or union completes the type of any previous
14203 variable declaration, lay it out and output its rtl. */
14204
14205void
14206hack_incomplete_structures (type)
14207 tree type;
14208{
f30432d7 14209 tree *list;
70adf8a9 14210 struct binding_level *level;
8d08fdba
MS
14211
14212 if (!type) /* Don't do this for class templates. */
14213 return;
14214
70adf8a9
JM
14215 if (namespace_bindings_p ())
14216 {
14217 level = 0;
14218 list = &namespace_scope_incomplete;
14219 }
14220 else
14221 {
14222 level = innermost_nonclass_level ();
14223 list = &level->incomplete;
14224 }
14225
14226 while (1)
14227 {
14228 while (*list)
14229 {
14230 tree decl = TREE_VALUE (*list);
14231 if ((decl && TREE_TYPE (decl) == type)
14232 || (TREE_TYPE (decl)
14233 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14234 && TREE_TYPE (TREE_TYPE (decl)) == type))
f30432d7 14235 {
70adf8a9
JM
14236 int toplevel = toplevel_bindings_p ();
14237 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14238 && TREE_TYPE (TREE_TYPE (decl)) == type)
14239 layout_type (TREE_TYPE (decl));
14240 layout_decl (decl, 0);
14241 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14242 if (! toplevel)
14243 {
14244 tree cleanup;
14245 expand_decl (decl);
14246 cleanup = maybe_build_cleanup (decl);
14247 expand_decl_init (decl);
14248 if (! expand_decl_cleanup (decl, cleanup))
14249 cp_error ("parser lost in parsing declaration of `%D'",
14250 decl);
14251 }
14252 *list = TREE_CHAIN (*list);
f30432d7 14253 }
70adf8a9
JM
14254 else
14255 list = &TREE_CHAIN (*list);
14256 }
14257
14258 /* Keep looking through artificial binding levels generated
14259 for local variables. */
14260 if (level && level->keep == 2)
14261 {
14262 level = level->level_chain;
14263 list = &level->incomplete;
f30432d7
MS
14264 }
14265 else
70adf8a9 14266 break;
f30432d7 14267 }
8d08fdba
MS
14268}
14269
86f45d2c
MM
14270/* If DECL is of a type which needs a cleanup, build that cleanup
14271 here. */
e92cc029 14272
86f45d2c
MM
14273tree
14274maybe_build_cleanup (decl)
14275 tree decl;
8d08fdba
MS
14276{
14277 tree type = TREE_TYPE (decl);
86f45d2c 14278
834c6dff 14279 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 14280 {
80048418 14281 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
8d08fdba 14282 tree rval;
8d08fdba 14283
8d08fdba
MS
14284 if (TREE_CODE (type) == ARRAY_TYPE)
14285 rval = decl;
14286 else
14287 {
14288 mark_addressable (decl);
14289 rval = build_unary_op (ADDR_EXPR, decl, 0);
14290 }
14291
14292 /* Optimize for space over speed here. */
14293 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14294 || flag_expensive_optimizations)
14295 flags |= LOOKUP_NONVIRTUAL;
14296
86f45d2c
MM
14297 rval = build_delete (TREE_TYPE (rval), rval,
14298 sfk_complete_destructor, flags, 0);
8d08fdba
MS
14299
14300 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14301 && ! TYPE_HAS_DESTRUCTOR (type))
e1b3e07d 14302 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
051e6fd7 14303 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
8d08fdba 14304
8d08fdba
MS
14305 return rval;
14306 }
14307 return 0;
14308}
14309\f
558475f0 14310/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
14311
14312void
14313finish_stmt ()
14314{
558475f0
MM
14315 /* Always assume this statement was not an expression statement. If
14316 it actually was an expression statement, its our callers
14317 responsibility to fix this up. */
14318 last_expr_type = NULL_TREE;
8d08fdba
MS
14319}
14320
3afb32a4
MM
14321/* DECL was originally constructed as a non-static member function,
14322 but turned out to be static. Update it accordingly. */
700f8a87 14323
8857f91e 14324void
3afb32a4
MM
14325revert_static_member_fn (decl)
14326 tree decl;
8d08fdba 14327{
700f8a87 14328 tree tmp;
3afb32a4
MM
14329 tree function = TREE_TYPE (decl);
14330 tree args = TYPE_ARG_TYPES (function);
8d08fdba 14331
68642fb6 14332 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
91063b51 14333 != TYPE_UNQUALIFIED)
68642fb6 14334 cp_error ("static member function `%#D' declared with type qualifiers",
11306230 14335 decl);
f30432d7 14336
700f8a87
MS
14337 args = TREE_CHAIN (args);
14338 tmp = build_function_type (TREE_TYPE (function), args);
91063b51 14339 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
f30432d7 14340 tmp = build_exception_variant (tmp,
8d08fdba 14341 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
14342 TREE_TYPE (decl) = tmp;
14343 if (DECL_ARGUMENTS (decl))
14344 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14345 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 14346}
a4443a08 14347
68642fb6
UD
14348/* Initialize the variables used during compilation of a C++
14349 function. */
db5ae43f 14350
99dccabc
MM
14351static void
14352push_cp_function_context (f)
14353 struct function *f;
14354{
ae499cce
MM
14355 struct cp_language_function *p
14356 = ((struct cp_language_function *)
14357 xcalloc (1, sizeof (struct cp_language_function)));
14358 f->language = (struct language_function *) p;
db5ae43f 14359
b35d4555
MM
14360 /* It takes an explicit call to expand_body to generate RTL for a
14361 function. */
14362 expanding_p = 0;
f1dedc31
MM
14363
14364 /* Whenever we start a new function, we destroy temporaries in the
14365 usual way. */
ae499cce 14366 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
db5ae43f
MS
14367}
14368
a8f73d4b
MM
14369/* Free the language-specific parts of F, now that we've finished
14370 compiling the function. */
db5ae43f 14371
99dccabc
MM
14372static void
14373pop_cp_function_context (f)
14374 struct function *f;
db5ae43f 14375{
d658cd4c 14376 if (f->language)
8e4ce833
JJ
14377 {
14378 struct cp_language_function *cp =
14379 (struct cp_language_function *) f->language;
14380 if (cp->x_local_names)
14381 VARRAY_FREE (cp->x_local_names);
14382 free (f->language);
14383 }
99dccabc 14384 f->language = 0;
db5ae43f 14385}
ebfc180f 14386
59026e79 14387/* Mark P for GC. */
4519c0a8 14388
59026e79
MM
14389static void
14390mark_lang_function (p)
ae499cce 14391 struct cp_language_function *p;
59026e79 14392{
87e3dbc9
MM
14393 if (!p)
14394 return;
14395
8f17b5c5
MM
14396 mark_c_language_function (&p->base);
14397
4519c0a8
MM
14398 ggc_mark_tree (p->x_ctor_label);
14399 ggc_mark_tree (p->x_dtor_label);
4519c0a8
MM
14400 ggc_mark_tree (p->x_current_class_ptr);
14401 ggc_mark_tree (p->x_current_class_ref);
52a11cbf 14402 ggc_mark_tree (p->x_eh_spec_block);
8e4ce833 14403 ggc_mark_tree_varray (p->x_local_names);
4519c0a8 14404
6625cdb5 14405 mark_named_label_lists (&p->x_named_labels, &p->x_named_label_uses);
a8f73d4b 14406 mark_binding_level (&p->bindings);
4519c0a8
MM
14407}
14408
59026e79
MM
14409/* Mark the language-specific data in F for GC. */
14410
a09ba2e0 14411static void
59026e79
MM
14412mark_cp_function_context (f)
14413 struct function *f;
14414{
ae499cce 14415 mark_lang_function ((struct cp_language_function *) f->language);
59026e79 14416}
4519c0a8 14417
4519c0a8
MM
14418void
14419lang_mark_tree (t)
14420 tree t;
14421{
14422 enum tree_code code = TREE_CODE (t);
14423 if (code == IDENTIFIER_NODE)
14424 {
14425 struct lang_identifier *li = (struct lang_identifier *) t;
14426 struct lang_id2 *li2 = li->x;
14427 ggc_mark_tree (li->namespace_bindings);
a8f73d4b 14428 ggc_mark_tree (li->bindings);
4519c0a8
MM
14429 ggc_mark_tree (li->class_value);
14430 ggc_mark_tree (li->class_template_info);
14431
14432 if (li2)
14433 {
14434 ggc_mark_tree (li2->label_value);
14435 ggc_mark_tree (li2->implicit_decl);
14436 ggc_mark_tree (li2->error_locus);
14437 }
14438 }
87e3dbc9
MM
14439 else if (code == CPLUS_BINDING)
14440 {
14441 if (BINDING_HAS_LEVEL_P (t))
14442 mark_binding_level (&BINDING_LEVEL (t));
14443 else
14444 ggc_mark_tree (BINDING_SCOPE (t));
14445 ggc_mark_tree (BINDING_VALUE (t));
14446 }
14447 else if (code == OVERLOAD)
14448 ggc_mark_tree (OVL_FUNCTION (t));
14449 else if (code == TEMPLATE_PARM_INDEX)
14450 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
4519c0a8
MM
14451 else if (TREE_CODE_CLASS (code) == 'd')
14452 {
14453 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14454
14455 if (ld)
14456 {
d60f72ae 14457 ggc_mark (ld);
8f17b5c5 14458 c_mark_lang_decl (&ld->decl_flags.base);
5362b086 14459 if (!DECL_GLOBAL_CTOR_P (t)
6462c441 14460 && !DECL_GLOBAL_DTOR_P (t)
8e4ce833
JJ
14461 && !DECL_THUNK_P (t)
14462 && !DECL_DISCRIMINATOR_P (t))
af3b4e59 14463 ggc_mark_tree (ld->decl_flags.u2.access);
31f8e4f3
MM
14464 else if (DECL_THUNK_P (t))
14465 ggc_mark_tree (ld->decl_flags.u2.vcall_offset);
4519c0a8
MM
14466 if (TREE_CODE (t) != NAMESPACE_DECL)
14467 ggc_mark_tree (ld->decl_flags.u.template_info);
16bb3387
JM
14468 else
14469 mark_binding_level (&NAMESPACE_LEVEL (t));
4519c0a8
MM
14470 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14471 {
4519c0a8 14472 ggc_mark_tree (ld->befriending_classes);
8f17b5c5 14473 ggc_mark_tree (ld->context);
db9b2174 14474 ggc_mark_tree (ld->cloned_function);
8e4ce833 14475 ggc_mark_tree (ld->inlined_fns);
4519c0a8
MM
14476 if (TREE_CODE (t) == TYPE_DECL)
14477 ggc_mark_tree (ld->u.sorted_fields);
59026e79
MM
14478 else if (TREE_CODE (t) == FUNCTION_DECL
14479 && !DECL_PENDING_INLINE_P (t))
14480 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
4519c0a8
MM
14481 }
14482 }
14483 }
14484 else if (TREE_CODE_CLASS (code) == 't')
14485 {
14486 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14487
68642fb6 14488 if (lt && !(TREE_CODE (t) == POINTER_TYPE
87e3dbc9 14489 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
4519c0a8 14490 {
c27db0df 14491 ggc_mark (lt);
911a71a7 14492 ggc_mark_tree (lt->primary_base);
4519c0a8
MM
14493 ggc_mark_tree (lt->vfields);
14494 ggc_mark_tree (lt->vbases);
14495 ggc_mark_tree (lt->tags);
4519c0a8 14496 ggc_mark_tree (lt->size);
fee7654e 14497 ggc_mark_tree (lt->pure_virtuals);
4519c0a8
MM
14498 ggc_mark_tree (lt->friend_classes);
14499 ggc_mark_tree (lt->rtti);
14500 ggc_mark_tree (lt->methods);
14501 ggc_mark_tree (lt->template_info);
87e3dbc9 14502 ggc_mark_tree (lt->befriending_classes);
4519c0a8 14503 }
87e3dbc9
MM
14504 else if (lt)
14505 /* In the case of pointer-to-member function types, the
14506 TYPE_LANG_SPECIFIC is really just a tree. */
14507 ggc_mark_tree ((tree) lt);
4519c0a8
MM
14508 }
14509}
5fd8e536
JM
14510
14511/* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since
14512 the definition of IDENTIFIER_GLOBAL_VALUE is different for C and C++. */
14513
14514tree
14515identifier_global_value (t)
14516 tree t;
14517{
14518 return IDENTIFIER_GLOBAL_VALUE (t);
14519}
d363e7bf 14520
eaa7c03f
JM
14521/* Build the void_list_node (void_type_node having been created). */
14522tree
14523build_void_list_node ()
14524{
14525 tree t = build_tree_list (NULL_TREE, void_type_node);
14526 TREE_PARMLIST (t) = 1;
14527 return t;
14528}
14529
d363e7bf
AJ
14530static int
14531cp_missing_noreturn_ok_p (decl)
14532 tree decl;
14533{
14534 /* A missing noreturn is ok for the `main' function. */
92643fea 14535 return DECL_MAIN_P (decl);
d363e7bf 14536}
This page took 4.471508 seconds and 5 git commands to generate.