]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
parser.c (cp_parser_asm_definition): Correct handling of omitted operands.
[gcc.git] / gcc / cp / decl.c
CommitLineData
3fd5abcf 1/* Process declarations and variables for C++ compiler.
d363e7bf 2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3fd5abcf 3 2001, 2002, 2003 Free Software Foundation, Inc.
e5e809f4 4 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba 5
1c313945 6This file is part of GCC.
8d08fdba 7
1c313945 8GCC is free software; you can redistribute it and/or modify
8d08fdba
MS
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
1c313945 13GCC is distributed in the hope that it will be useful,
8d08fdba
MS
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
1c313945 19along with GCC; 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
1c313945 24/* Process declarations and symbol lookup for C++ front end.
8d08fdba
MS
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"
4977bab6
ZW
33#include "coretypes.h"
34#include "tm.h"
8d08fdba
MS
35#include "tree.h"
36#include "rtl.h"
3bdf5ad1 37#include "expr.h"
8d08fdba
MS
38#include "flags.h"
39#include "cp-tree.h"
25af8512 40#include "tree-inline.h"
8d08fdba
MS
41#include "decl.h"
42#include "lex.h"
49c249e1
JM
43#include "output.h"
44#include "except.h"
54f92bfb 45#include "toplev.h"
e2500fed 46#include "hashtab.h"
4519c0a8 47#include "ggc.h"
0e9295cf 48#include "tm_p.h"
672a6f42 49#include "target.h"
26f943fd 50#include "c-common.h"
ecb0eece 51#include "c-pragma.h"
7437519c 52#include "diagnostic.h"
e2500fed 53#include "debug.h"
8d08fdba 54
5cce22b6 55static tree grokparms PARAMS ((tree));
158991b7 56static const char *redeclaration_error_message PARAMS ((tree, tree));
8d08fdba 57
e2500fed 58static void push_binding_level PARAMS ((struct cp_binding_level *, int,
49c249e1 59 int));
158991b7
KG
60static void pop_binding_level PARAMS ((void));
61static void suspend_binding_level PARAMS ((void));
e2500fed
GK
62static void resume_binding_level PARAMS ((struct cp_binding_level *));
63static struct cp_binding_level *make_binding_level PARAMS ((void));
158991b7 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));
8e4ce833 72static void push_local_name PARAMS ((tree));
158991b7 73static void warn_extern_redeclared_static PARAMS ((tree, tree));
8e4ce833 74static tree grok_reference_init PARAMS ((tree, tree, tree));
158991b7 75static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
2c73f9f5 76 enum overload_flags, tree,
7a8f9fa9 77 tree, int, int, int, int, int, int, tree));
158991b7 78static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
4782bd5b 79static tree follow_tag_typedef PARAMS ((tree));
158991b7 80static tree lookup_tag PARAMS ((enum tree_code, tree,
e2500fed 81 struct cp_binding_level *, int));
49c249e1 82static void set_identifier_type_value_with_scope
e2500fed 83 PARAMS ((tree, tree, struct cp_binding_level *));
158991b7 84static void record_unknown_type PARAMS ((tree, const char *));
d52e4867 85static tree builtin_function_1 PARAMS ((const char *, tree, tree, int,
6a2dd09a
RS
86 enum built_in_class, const char *,
87 tree));
596ea4e5 88static tree build_library_fn_1 PARAMS ((tree, enum tree_code, tree));
158991b7
KG
89static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
90static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
49c249e1 91 int));
e2500fed 92static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct cp_binding_level*));
158991b7 93static void check_for_uninitialized_const_var PARAMS ((tree));
e2500fed
GK
94static hashval_t typename_hash PARAMS ((const void *));
95static int typename_compare PARAMS ((const void *, const void *));
96static void push_binding PARAMS ((tree, tree, struct cp_binding_level*));
158991b7
KG
97static int add_binding PARAMS ((tree, tree));
98static void pop_binding PARAMS ((tree, tree));
99static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
100static tree find_binding PARAMS ((tree, tree));
101static tree select_decl PARAMS ((tree, int));
102static int lookup_flags PARAMS ((int, int));
103static tree qualify_lookup PARAMS ((tree, int));
104static tree record_builtin_java_type PARAMS ((const char *, int));
105static const char *tag_name PARAMS ((enum tag_types code));
106static void find_class_binding_level PARAMS ((void));
e2500fed 107static struct cp_binding_level *innermost_nonclass_level PARAMS ((void));
158991b7
KG
108static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
109static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
110static int walk_globals_r PARAMS ((tree, void *));
70b76b34 111static int walk_vtables_r PARAMS ((tree, void*));
e2500fed 112static void add_decl_to_level PARAMS ((tree, struct cp_binding_level *));
158991b7 113static tree make_label_decl PARAMS ((tree, int));
6625cdb5 114static void use_label PARAMS ((tree));
e2500fed 115static void check_previous_goto_1 PARAMS ((tree, struct cp_binding_level *, tree,
6625cdb5
JM
116 const char *, int));
117static void check_previous_goto PARAMS ((struct named_label_use_list *));
e2500fed 118static void check_switch_goto PARAMS ((struct cp_binding_level *));
6625cdb5
JM
119static void check_previous_gotos PARAMS ((tree));
120static void pop_label PARAMS ((tree, tree));
158991b7
KG
121static void pop_labels PARAMS ((tree));
122static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
123static void layout_var_decl PARAMS ((tree));
124static void maybe_commonize_var PARAMS ((tree));
8e3df2de 125static tree check_initializer (tree, tree, int);
158991b7 126static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
158991b7 127static void save_function_data PARAMS ((tree));
f444e36b 128static void check_function_type PARAMS ((tree, tree));
cdd2559c 129static void begin_constructor_body PARAMS ((void));
158991b7 130static void finish_constructor_body PARAMS ((void));
cdd2559c 131static void begin_destructor_body PARAMS ((void));
158991b7
KG
132static void finish_destructor_body PARAMS ((void));
133static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
134static tree get_atexit_node PARAMS ((void));
135static tree get_dso_handle_node PARAMS ((void));
136static tree start_cleanup_fn PARAMS ((void));
137static void end_cleanup_fn PARAMS ((void));
0ba8a114 138static tree cp_make_fname_decl PARAMS ((tree, int));
d43829f9 139static void initialize_predefined_identifiers PARAMS ((void));
5362b086 140static tree check_special_function_return_type
1f84ec23 141 PARAMS ((special_function_kind, tree, tree));
596ea4e5
AS
142static tree push_cp_library_fn PARAMS ((enum tree_code, tree));
143static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree));
f444e36b 144static void store_parm_decls PARAMS ((tree));
d363e7bf 145static int cp_missing_noreturn_ok_p PARAMS ((tree));
8e3df2de
MM
146static void initialize_local_var (tree, tree);
147static void expand_static_init (tree, tree);
148static tree next_initializable_field (tree);
149static tree reshape_init (tree, tree *);
8d08fdba 150
e2500fed 151#if defined (DEBUG_BINDING_LEVELS)
158991b7 152static void indent PARAMS ((void));
69ac77ce
JL
153#endif
154
8d08fdba
MS
155/* Erroneous argument lists can use this *IFF* they do not modify it. */
156tree error_mark_list;
157
7f4edbcb 158/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 159 listed here individually for documentation purposes.
8d08fdba 160
7f4edbcb
BS
161 C++ extensions
162 tree wchar_decl_node;
37c46b43 163
7f4edbcb
BS
164 tree vtable_entry_type;
165 tree delta_type_node;
7f4edbcb 166 tree __t_desc_type_node;
db1147b2 167 tree ti_desc_type_node;
1f4cb92b 168 tree bltn_desc_type_node, ptr_desc_type_node;
db1147b2
NS
169 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
170 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
387769ed 171 tree ptm_desc_type_node;
db1147b2 172 tree base_desc_type_node;
8d08fdba 173
7f4edbcb
BS
174 tree class_type_node, record_type_node, union_type_node, enum_type_node;
175 tree unknown_type_node;
8d08fdba 176
7f4edbcb 177 Array type `vtable_entry_type[]'
8d08fdba 178
7f4edbcb
BS
179 tree vtbl_type_node;
180 tree vtbl_ptr_type_node;
8d08fdba 181
2854d3c6 182 Namespaces,
8d08fdba 183
7f4edbcb 184 tree std_node;
2854d3c6 185 tree abi_node;
8d08fdba 186
7f4edbcb
BS
187 A FUNCTION_DECL which can call `abort'. Not necessarily the
188 one that the user will declare, but sufficient to be called
189 by routines that want to abort the program.
8d08fdba 190
7f4edbcb 191 tree abort_fndecl;
8d08fdba 192
7f4edbcb 193 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 194
7f4edbcb 195 tree global_delete_fndecl;
8d08fdba 196
7f4edbcb 197 Used by RTTI
669ec2b4
JM
198 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
199 tree tinfo_var_id;
200
7f4edbcb 201*/
8d08fdba 202
7f4edbcb 203tree cp_global_trees[CPTI_MAX];
8d08fdba 204
2c73f9f5 205/* Indicates that there is a type value in some namespace, although
7f4edbcb 206 that is not necessarily in scope at the moment. */
2c73f9f5 207
e2500fed 208static GTY(()) tree global_type_node;
2c73f9f5 209
6625cdb5
JM
210/* Used only for jumps to as-yet undefined labels, since jumps to
211 defined labels can have their validity checked immediately. */
212
e2500fed 213struct named_label_use_list GTY(())
e349ee73 214{
e2500fed 215 struct cp_binding_level *binding_level;
e349ee73
MS
216 tree names_in_scope;
217 tree label_decl;
9c0758dd 218 const char *filename_o_goto;
e349ee73 219 int lineno_o_goto;
6625cdb5 220 struct named_label_use_list *next;
e349ee73
MS
221};
222
ed5511d9 223#define named_label_uses cp_function_chain->x_named_label_uses
8d08fdba 224
8e4ce833
JJ
225#define local_names cp_function_chain->x_local_names
226
8d08fdba
MS
227/* A list of objects which have constructors or destructors
228 which reside in the global scope. The decl is stored in
229 the TREE_VALUE slot and the initializer is stored
230 in the TREE_PURPOSE slot. */
231tree static_aggregates;
232
8d08fdba
MS
233/* -- end of C++ */
234
81b3411c 235/* A node for the integer constants 2, and 3. */
d11ad92e 236
81b3411c 237tree integer_two_node, integer_three_node;
8d08fdba 238
8d08fdba 239/* Similar, for last_function_parm_tags. */
9cd64686 240tree last_function_parms;
8d08fdba 241
6625cdb5
JM
242/* A list of all LABEL_DECLs in the function that have names. Here so
243 we can clear out their names' definitions at the end of the
244 function, and so we can check the validity of jumps to these labels. */
245
e2500fed 246struct named_label_list GTY(())
6625cdb5 247{
e2500fed 248 struct cp_binding_level *binding_level;
6625cdb5
JM
249 tree names_in_scope;
250 tree old_value;
251 tree label_decl;
252 tree bad_decls;
6625cdb5 253 struct named_label_list *next;
826840d9
RH
254 unsigned int in_try_scope : 1;
255 unsigned int in_catch_scope : 1;
6625cdb5 256};
8d08fdba 257
4519c0a8 258#define named_labels cp_function_chain->x_named_labels
8d08fdba 259\f
0c8feefe
MM
260/* The name of the anonymous namespace, throughout this translation
261 unit. */
262tree anonymous_namespace_name;
263
b2244c65
MM
264/* The number of function bodies which we are currently processing.
265 (Zero if we are at namespace scope, one inside the body of a
266 function, two inside the body of a function in a local class, etc.) */
267int function_depth;
e23bd218
IR
268
269/* States indicating how grokdeclarator() should handle declspecs marked
270 with __attribute__((deprecated)). An object declared as
271 __attribute__((deprecated)) suppresses warnings of uses of other
272 deprecated items. */
273
274enum deprecated_states {
275 DEPRECATED_NORMAL,
276 DEPRECATED_SUPPRESS
277};
278
279static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
280
281/* Set by add_implicitly_declared_members() to keep those members from
282 being flagged as deprecated or reported as using deprecated
283 types. */
284int adding_implicit_members = 0;
594bb0e7
MM
285
286/* True if a declaration with an `extern' linkage specifier is being
287 processed. */
288bool have_extern_spec;
289
8d08fdba
MS
290\f
291/* For each binding contour we allocate a binding_level structure
e92cc029
MS
292 which records the names defined in that contour.
293 Contours include:
294 0) the global one
295 1) one for each function definition,
296 where internal declarations of the parameters appear.
297 2) one for each compound statement,
298 to record its declarations.
299
300 The current meaning of a name can be found by searching the levels
301 from the current one out to the global one.
302
303 Off to the side, may be the class_binding_level. This exists only
304 to catch class-local declarations. It is otherwise nonexistent.
305
306 Also there may be binding levels that catch cleanups that must be
d8f8dca1
MM
307 run when exceptions occur. Thus, to see whether a name is bound in
308 the current scope, it is not enough to look in the
309 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
310 instead. */
8d08fdba
MS
311
312/* Note that the information in the `names' component of the global contour
313 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
314
e2500fed 315struct cp_binding_level GTY(())
8d08fdba
MS
316 {
317 /* A chain of _DECL nodes for all variables, constants, functions,
e92cc029 318 and typedef types. These are in the reverse of the order
f181d4ae
MM
319 supplied. There may be OVERLOADs on this list, too, but they
320 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
8d08fdba
MS
321 tree names;
322
70b76b34
DP
323 /* Count of elements in names chain. */
324 size_t names_size;
325
326 /* A chain of NAMESPACE_DECL nodes. */
327 tree namespaces;
328
329 /* A chain of VTABLE_DECL nodes. */
330 tree vtables;
331
e92cc029
MS
332 /* A list of structure, union and enum definitions, for looking up
333 tag names.
334 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
335 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
336 or ENUMERAL_TYPE node.
337
338 C++: the TREE_VALUE nodes can be simple types for
339 component_bindings. */
8d08fdba
MS
340 tree tags;
341
a1c65f9f 342 /* A list of USING_DECL nodes. */
2c73f9f5
ML
343 tree usings;
344
ea9635c7 345 /* A list of used namespaces. PURPOSE is the namespace,
a1c65f9f 346 VALUE the common ancestor with this binding_level's namespace. */
ea9635c7
ML
347 tree using_directives;
348
f181d4ae
MM
349 /* If this binding level is the binding level for a class, then
350 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
76191fdd 351 is the name of an entity bound in the class. The TREE_TYPE is
d8f8dca1 352 the DECL bound by this name in the class. */
8d08fdba
MS
353 tree class_shadowed;
354
f181d4ae 355 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
76191fdd
NS
356 is used for all binding levels. In addition the TREE_VALUE is the
357 IDENTIFIER_TYPE_VALUE before we entered the class. */
8d08fdba
MS
358 tree type_shadowed;
359
acef433b
MM
360 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
361 label in this scope. The TREE_PURPOSE is the previous value of
362 the IDENTIFIER_LABEL VALUE. */
363 tree shadowed_labels;
364
8d08fdba
MS
365 /* For each level (except not the global one),
366 a chain of BLOCK nodes for all the levels
367 that were entered and exited one level down. */
368 tree blocks;
369
70adf8a9
JM
370 /* The _TYPE node for this level, if parm_flag == 2. */
371 tree this_class;
372
8d08fdba 373 /* The binding level which this one is contained in (inherits from). */
e2500fed 374 struct cp_binding_level *level_chain;
8d08fdba 375
8d6e462b 376 /* List of VAR_DECLS saved from a previous for statement.
cab1f180 377 These would be dead in ISO-conforming code, but might
f181d4ae
MM
378 be referenced in ARM-era code. These are stored in a
379 TREE_LIST; the TREE_VALUE is the actual declaration. */
8d6e462b
PB
380 tree dead_vars_from_for;
381
8d08fdba 382 /* 1 for the level that holds the parameters of a function.
74b846e0
MM
383 2 for the level that holds a class declaration. */
384 unsigned parm_flag : 2;
8d08fdba
MS
385
386 /* 1 means make a BLOCK for this level regardless of all else.
387 2 for temporary binding contours created by the compiler. */
74b846e0 388 unsigned keep : 2;
8d08fdba
MS
389
390 /* Nonzero if this level "doesn't exist" for tags. */
391 unsigned tag_transparent : 1;
392
393 /* Nonzero if this level can safely have additional
394 cleanup-needing variables added to it. */
395 unsigned more_cleanups_ok : 1;
396 unsigned have_cleanups : 1;
397
74b846e0 398 /* Nonzero if this scope is for storing the decls for template
5566b478
MS
399 parameters and generic decls; these decls will be discarded and
400 replaced with a TEMPLATE_DECL. */
74b846e0
MM
401 unsigned template_parms_p : 1;
402
5362b086 403 /* Nonzero if this scope corresponds to the `<>' in a
74b846e0
MM
404 `template <>' clause. Whenever this flag is set,
405 TEMPLATE_PARMS_P will be set as well. */
406 unsigned template_spec_p : 1;
8d08fdba 407
a9aedbc2
MS
408 /* This is set for a namespace binding level. */
409 unsigned namespace_p : 1;
410
2ee887f2 411 /* True if this level is that of a for-statement where we need to
cab1f180 412 worry about ambiguous (ARM or ISO) scope rules. */
8d6e462b
PB
413 unsigned is_for_scope : 1;
414
826840d9
RH
415 /* True if this level corresponds to a TRY block. Currently this
416 information is only available while building the tree structure. */
417 unsigned is_try_scope : 1;
227cf171 418
826840d9
RH
419 /* True if this level corresponds to a CATCH block. Currently this
420 information is only available while building the tree structure. */
421 unsigned is_catch_scope : 1;
422
423 /* Three bits left for this word. */
8d08fdba 424
8d08fdba
MS
425 /* Binding depth at which this level began. */
426 unsigned binding_depth;
8d08fdba
MS
427 };
428
e2500fed 429#define NULL_BINDING_LEVEL ((struct cp_binding_level *) NULL)
68642fb6 430
8f032717 431/* The binding level currently in effect. */
8d08fdba 432
a8f73d4b 433#define current_binding_level \
52a11cbf 434 (cfun && cp_function_chain->bindings \
d363e7bf 435 ? cp_function_chain->bindings \
a8f73d4b 436 : scope_chain->bindings)
8d08fdba
MS
437
438/* The binding level of the current class, if any. */
439
9cd64686 440#define class_binding_level scope_chain->class_bindings
8d08fdba 441
8d08fdba
MS
442/* A chain of binding_level structures awaiting reuse. */
443
e2500fed 444static GTY((deletable (""))) struct cp_binding_level *free_binding_level;
8d08fdba
MS
445
446/* The outermost binding level, for names of file scope.
447 This is created when the compiler is started and exists
448 through the entire run. */
449
e2500fed 450static GTY(()) struct cp_binding_level *global_binding_level;
8d08fdba 451
8d08fdba
MS
452/* Nonzero means unconditionally make a BLOCK for the next level pushed. */
453
454static int keep_next_level_flag;
455
0154eaa8
MM
456/* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
457 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
458 time the VAR_DECL was declared, the type was incomplete. */
459
e2500fed 460static GTY(()) tree incomplete_vars;
0154eaa8 461
e2500fed 462#if defined(DEBUG_BINDING_LEVELS)
8d08fdba
MS
463static int binding_depth = 0;
464static int is_class_level = 0;
465
466static void
467indent ()
468{
469 register unsigned i;
470
471 for (i = 0; i < binding_depth*2; i++)
472 putc (' ', stderr);
473}
e2500fed 474#endif /* defined(DEBUG_BINDING_LEVELS) */
8d08fdba 475
e2500fed 476static tree pushdecl_with_scope PARAMS ((tree, struct cp_binding_level *));
8d08fdba
MS
477
478static void
479push_binding_level (newlevel, tag_transparent, keep)
e2500fed 480 struct cp_binding_level *newlevel;
8d08fdba
MS
481 int tag_transparent, keep;
482{
483 /* Add this level to the front of the chain (stack) of levels that
484 are active. */
e2500fed 485 memset ((char*) newlevel, 0, sizeof (struct cp_binding_level));
8f032717 486 newlevel->level_chain = current_binding_level;
8d08fdba
MS
487 current_binding_level = newlevel;
488 newlevel->tag_transparent = tag_transparent;
489 newlevel->more_cleanups_ok = 1;
227cf171 490
8d08fdba 491 newlevel->keep = keep;
e2500fed 492#if defined(DEBUG_BINDING_LEVELS)
8d08fdba
MS
493 newlevel->binding_depth = binding_depth;
494 indent ();
495 fprintf (stderr, "push %s level 0x%08x line %d\n",
496 (is_class_level) ? "class" : "block", newlevel, lineno);
497 is_class_level = 0;
498 binding_depth++;
e2500fed 499#endif /* defined(DEBUG_BINDING_LEVELS) */
8d08fdba
MS
500}
501
8f032717
MM
502/* Find the innermost enclosing class scope, and reset
503 CLASS_BINDING_LEVEL appropriately. */
504
505static void
506find_class_binding_level ()
507{
e2500fed 508 struct cp_binding_level *level = current_binding_level;
8f032717
MM
509
510 while (level && level->parm_flag != 2)
511 level = level->level_chain;
512 if (level && level->parm_flag == 2)
513 class_binding_level = level;
514 else
515 class_binding_level = 0;
516}
517
8d08fdba
MS
518static void
519pop_binding_level ()
520{
8d08fdba
MS
521 if (global_binding_level)
522 {
2c73f9f5 523 /* Cannot pop a level, if there are none left to pop. */
8d08fdba 524 if (current_binding_level == global_binding_level)
a98facb0 525 abort ();
8d08fdba
MS
526 }
527 /* Pop the current level, and free the structure for reuse. */
e2500fed 528#if defined(DEBUG_BINDING_LEVELS)
8d08fdba
MS
529 binding_depth--;
530 indent ();
531 fprintf (stderr, "pop %s level 0x%08x line %d\n",
532 (is_class_level) ? "class" : "block",
533 current_binding_level, lineno);
534 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
535 {
536 indent ();
537 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
538 }
8d08fdba 539 is_class_level = 0;
e2500fed 540#endif /* defined(DEBUG_BINDING_LEVELS) */
8d08fdba 541 {
e2500fed 542 register struct cp_binding_level *level = current_binding_level;
8d08fdba
MS
543 current_binding_level = current_binding_level->level_chain;
544 level->level_chain = free_binding_level;
e2500fed 545#if 0 /* defined(DEBUG_BINDING_LEVELS) */
8d08fdba
MS
546 if (level->binding_depth != binding_depth)
547 abort ();
e2500fed 548#endif /* defined(DEBUG_BINDING_LEVELS) */
8f032717
MM
549 free_binding_level = level;
550 find_class_binding_level ();
8d08fdba
MS
551 }
552}
a9aedbc2
MS
553
554static void
555suspend_binding_level ()
556{
557 if (class_binding_level)
558 current_binding_level = class_binding_level;
559
560 if (global_binding_level)
561 {
2c73f9f5 562 /* Cannot suspend a level, if there are none left to suspend. */
a9aedbc2 563 if (current_binding_level == global_binding_level)
a98facb0 564 abort ();
a9aedbc2
MS
565 }
566 /* Suspend the current level. */
e2500fed 567#if defined(DEBUG_BINDING_LEVELS)
a9aedbc2
MS
568 binding_depth--;
569 indent ();
570 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
571 (is_class_level) ? "class" : "block",
572 current_binding_level, lineno);
573 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
574 {
575 indent ();
576 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
577 }
a9aedbc2 578 is_class_level = 0;
e2500fed 579#endif /* defined(DEBUG_BINDING_LEVELS) */
8f032717
MM
580 current_binding_level = current_binding_level->level_chain;
581 find_class_binding_level ();
a9aedbc2
MS
582}
583
824b9a4c 584static void
a9aedbc2 585resume_binding_level (b)
e2500fed 586 struct cp_binding_level *b;
a9aedbc2 587{
2c73f9f5 588 /* Resuming binding levels is meant only for namespaces,
a1c65f9f 589 and those cannot nest into classes. */
2c73f9f5
ML
590 my_friendly_assert(!class_binding_level, 386);
591 /* Also, resuming a non-directly nested namespace is a no-no. */
592 my_friendly_assert(b->level_chain == current_binding_level, 386);
a9aedbc2 593 current_binding_level = b;
e2500fed 594#if defined(DEBUG_BINDING_LEVELS)
a9aedbc2
MS
595 b->binding_depth = binding_depth;
596 indent ();
597 fprintf (stderr, "resume %s level 0x%08x line %d\n",
598 (is_class_level) ? "class" : "block", b, lineno);
599 is_class_level = 0;
600 binding_depth++;
e2500fed 601#endif /* defined(DEBUG_BINDING_LEVELS) */
a9aedbc2 602}
8d08fdba 603\f
e2500fed 604/* Create a new `struct cp_binding_level'. */
cffa8729
MS
605
606static
e2500fed 607struct cp_binding_level *
cffa8729
MS
608make_binding_level ()
609{
610 /* NOSTRICT */
e2500fed 611 return (struct cp_binding_level *) ggc_alloc (sizeof (struct cp_binding_level));
cffa8729
MS
612}
613
8d08fdba
MS
614/* Nonzero if we are currently in the global binding level. */
615
616int
617global_bindings_p ()
618{
619 return current_binding_level == global_binding_level;
620}
621
8f032717
MM
622/* Return the innermost binding level that is not for a class scope. */
623
e2500fed 624static struct cp_binding_level *
8f032717
MM
625innermost_nonclass_level ()
626{
e2500fed 627 struct cp_binding_level *b;
8f032717
MM
628
629 b = current_binding_level;
630 while (b->parm_flag == 2)
631 b = b->level_chain;
632
633 return b;
634}
635
a9aedbc2
MS
636/* Nonzero if we are currently in a toplevel binding level. This
637 means either the global binding level or a namespace in a toplevel
8f032717 638 binding level. Since there are no non-toplevel namespace levels,
74b846e0
MM
639 this really means any namespace or template parameter level. We
640 also include a class whose context is toplevel. */
a9aedbc2
MS
641
642int
643toplevel_bindings_p ()
644{
e2500fed 645 struct cp_binding_level *b = innermost_nonclass_level ();
8f032717 646
74b846e0 647 return b->namespace_p || b->template_parms_p;
a9aedbc2
MS
648}
649
8f032717
MM
650/* Nonzero if this is a namespace scope, or if we are defining a class
651 which is itself at namespace scope, or whose enclosing class is
652 such a class, etc. */
a9aedbc2 653
7bdbfa05 654int
a9aedbc2
MS
655namespace_bindings_p ()
656{
e2500fed 657 struct cp_binding_level *b = innermost_nonclass_level ();
8f032717
MM
658
659 return b->namespace_p;
a9aedbc2
MS
660}
661
838dfd8a 662/* If KEEP is nonzero, make a BLOCK node for the next binding level,
f1dedc31
MM
663 unconditionally. Otherwise, use the normal logic to decide whether
664 or not to create a BLOCK. */
665
8d08fdba 666void
f1dedc31
MM
667keep_next_level (keep)
668 int keep;
8d08fdba 669{
f1dedc31 670 keep_next_level_flag = keep;
8d08fdba
MS
671}
672
673/* Nonzero if the current level needs to have a BLOCK made. */
674
675int
676kept_level_p ()
677{
678 return (current_binding_level->blocks != NULL_TREE
679 || current_binding_level->keep
680 || current_binding_level->names != NULL_TREE
681 || (current_binding_level->tags != NULL_TREE
682 && !current_binding_level->tag_transparent));
683}
684
824b9a4c 685static void
a9aedbc2
MS
686declare_namespace_level ()
687{
688 current_binding_level->namespace_p = 1;
689}
690
838dfd8a 691/* Returns nonzero if this scope was created to store template
74b846e0
MM
692 parameters. */
693
8d08fdba 694int
74b846e0 695template_parm_scope_p ()
8d08fdba 696{
74b846e0
MM
697 return current_binding_level->template_parms_p;
698}
699
700/* Returns the kind of template specialization we are currently
701 processing, given that it's declaration contained N_CLASS_SCOPES
702 explicit scope qualifications. */
703
704tmpl_spec_kind
705current_tmpl_spec_kind (n_class_scopes)
706 int n_class_scopes;
707{
708 int n_template_parm_scopes = 0;
709 int seen_specialization_p = 0;
710 int innermost_specialization_p = 0;
e2500fed 711 struct cp_binding_level *b;
74b846e0
MM
712
713 /* Scan through the template parameter scopes. */
714 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
715 {
716 /* If we see a specialization scope inside a parameter scope,
717 then something is wrong. That corresponds to a declaration
718 like:
719
720 template <class T> template <> ...
721
0e339752 722 which is always invalid since [temp.expl.spec] forbids the
74b846e0
MM
723 specialization of a class member template if the enclosing
724 class templates are not explicitly specialized as well. */
725 if (b->template_spec_p)
726 {
727 if (n_template_parm_scopes == 0)
728 innermost_specialization_p = 1;
729 else
730 seen_specialization_p = 1;
731 }
732 else if (seen_specialization_p == 1)
733 return tsk_invalid_member_spec;
734
735 ++n_template_parm_scopes;
736 }
737
738 /* Handle explicit instantiations. */
739 if (processing_explicit_instantiation)
740 {
741 if (n_template_parm_scopes != 0)
742 /* We've seen a template parameter list during an explicit
743 instantiation. For example:
744
745 template <class T> template void f(int);
746
747 This is erroneous. */
748 return tsk_invalid_expl_inst;
749 else
750 return tsk_expl_inst;
751 }
752
753 if (n_template_parm_scopes < n_class_scopes)
754 /* We've not seen enough template headers to match all the
755 specialized classes present. For example:
756
757 template <class T> void R<T>::S<T>::f(int);
758
0e339752 759 This is invalid; there needs to be one set of template
74b846e0
MM
760 parameters for each class. */
761 return tsk_insufficient_parms;
762 else if (n_template_parm_scopes == n_class_scopes)
763 /* We're processing a non-template declaration (even though it may
764 be a member of a template class.) For example:
765
766 template <class T> void S<T>::f(int);
767
768 The `class T' maches the `S<T>', leaving no template headers
769 corresponding to the `f'. */
770 return tsk_none;
771 else if (n_template_parm_scopes > n_class_scopes + 1)
772 /* We've got too many template headers. For example:
773
774 template <> template <class T> void f (T);
775
776 There need to be more enclosing classes. */
777 return tsk_excessive_parms;
778 else
779 /* This must be a template. It's of the form:
780
781 template <class T> template <class U> void S<T>::f(U);
782
783 This is a specialization if the innermost level was a
784 specialization; otherwise it's just a definition of the
785 template. */
786 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
787}
788
789void
790set_class_shadows (shadows)
791 tree shadows;
792{
793 class_binding_level->class_shadowed = shadows;
794}
795
796/* Enter a new binding level.
797 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
798 not for that of tags. */
799
800void
801pushlevel (tag_transparent)
802 int tag_transparent;
803{
e2500fed 804 struct cp_binding_level *newlevel;
8d08fdba 805
01d939e8 806 if (cfun && !doing_semantic_analysis_p ())
b35d4555 807 return;
8d08fdba 808
b35d4555 809 /* Reuse or create a struct for this binding level. */
e2500fed 810#if defined(DEBUG_BINDING_LEVELS)
8d08fdba 811 if (0)
e2500fed 812#else /* !defined(DEBUG_BINDING_LEVELS) */
8d08fdba 813 if (free_binding_level)
e2500fed 814#endif /* !defined(DEBUG_BINDING_LEVELS) */
8d08fdba
MS
815 {
816 newlevel = free_binding_level;
817 free_binding_level = free_binding_level->level_chain;
818 }
819 else
acef433b 820 newlevel = make_binding_level ();
cffa8729 821
8d08fdba 822 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
8d08fdba
MS
823 keep_next_level_flag = 0;
824}
825
bd0d5d4a
JM
826/* We're defining an object of type TYPE. If it needs a cleanup, but
827 we're not allowed to add any more objects with cleanups to the current
828 scope, create a new binding level. */
829
830void
831maybe_push_cleanup_level (type)
832 tree type;
833{
834 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
835 && current_binding_level->more_cleanups_ok == 0)
836 {
837 keep_next_level (2);
838 pushlevel (1);
839 clear_last_expr ();
840 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
841 }
842}
843
74b846e0
MM
844/* Enter a new scope. The KIND indicates what kind of scope is being
845 created. */
846
847void
848begin_scope (sk)
849 scope_kind sk;
850{
851 pushlevel (0);
852
853 switch (sk)
854 {
92bc1323
MM
855 case sk_block:
856 break;
857
858 case sk_try:
859 current_binding_level->is_try_scope = 1;
860 break;
861
862 case sk_catch:
863 current_binding_level->is_catch_scope = 1;
864 break;
865
866 case sk_for:
867 current_binding_level->is_for_scope = 1;
868 break;
869
74b846e0
MM
870 case sk_template_spec:
871 current_binding_level->template_spec_p = 1;
872 /* Fall through. */
873
874 case sk_template_parms:
875 current_binding_level->template_parms_p = 1;
876 break;
877
878 default:
a98facb0 879 abort ();
74b846e0
MM
880 }
881}
882
883/* Exit the current scope. */
884
885void
886finish_scope ()
887{
888 poplevel (0, 0, 0);
889}
890
f181d4ae 891/* For a binding between a name and an entity at a block scope,
e2500fed 892 this is the `struct cp_binding_level' for the block. */
f181d4ae 893#define BINDING_LEVEL(NODE) \
75ac8dec 894 (((struct tree_binding*)(NODE))->scope.level)
f181d4ae 895
4890c2f4
MM
896/* A free list of CPLUS_BINDING nodes, connected by their
897 TREE_CHAINs. */
898
e2500fed 899static GTY((deletable (""))) tree free_bindings;
4890c2f4 900
f181d4ae
MM
901/* Make DECL the innermost binding for ID. The LEVEL is the binding
902 level at which this declaration is being bound. */
903
904static void
905push_binding (id, decl, level)
906 tree id;
907 tree decl;
e2500fed 908 struct cp_binding_level* level;
f181d4ae
MM
909{
910 tree binding;
911
4890c2f4
MM
912 if (free_bindings)
913 {
914 binding = free_bindings;
915 free_bindings = TREE_CHAIN (binding);
916 }
917 else
918 binding = make_node (CPLUS_BINDING);
f181d4ae
MM
919
920 /* Now, fill in the binding information. */
921 BINDING_VALUE (binding) = decl;
d8f8dca1 922 BINDING_TYPE (binding) = NULL_TREE;
f181d4ae 923 BINDING_LEVEL (binding) = level;
8f032717 924 INHERITED_VALUE_BINDING_P (binding) = 0;
f181d4ae 925 LOCAL_BINDING_P (binding) = (level != class_binding_level);
87e3dbc9 926 BINDING_HAS_LEVEL_P (binding) = 1;
f181d4ae 927
c45df9c1 928 /* And put it on the front of the list of bindings for ID. */
f181d4ae
MM
929 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
930 IDENTIFIER_BINDING (id) = binding;
931}
932
d8f8dca1
MM
933/* ID is already bound in the current scope. But, DECL is an
934 additional binding for ID in the same scope. This is the `struct
935 stat' hack whereby a non-typedef class-name or enum-name can be
936 bound at the same level as some other kind of entity. It's the
937 responsibility of the caller to check that inserting this name is
0e339752 938 valid here. Returns nonzero if the new binding was successful. */
8f032717 939static int
d8f8dca1
MM
940add_binding (id, decl)
941 tree id;
942 tree decl;
943{
944 tree binding = IDENTIFIER_BINDING (id);
8f032717 945 int ok = 1;
d8f8dca1
MM
946
947 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
948 /* The new name is the type name. */
949 BINDING_TYPE (binding) = decl;
8f032717
MM
950 else if (!BINDING_VALUE (binding))
951 /* This situation arises when push_class_level_binding moves an
952 inherited type-binding out of the way to make room for a new
953 value binding. */
954 BINDING_VALUE (binding) = decl;
955 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
956 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
957 {
958 /* The old binding was a type name. It was placed in
959 BINDING_VALUE because it was thought, at the point it was
960 declared, to be the only entity with such a name. Move the
961 type name into the type slot; it is now hidden by the new
962 binding. */
d8f8dca1
MM
963 BINDING_TYPE (binding) = BINDING_VALUE (binding);
964 BINDING_VALUE (binding) = decl;
8f032717 965 INHERITED_VALUE_BINDING_P (binding) = 0;
d8f8dca1 966 }
263505af
MM
967 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
968 && TREE_CODE (decl) == TYPE_DECL
969 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
9aaceb4b
NS
970 && (same_type_p (TREE_TYPE (decl),
971 TREE_TYPE (BINDING_VALUE (binding)))
972 /* If either type involves template parameters, we must
973 wait until instantiation. */
974 || uses_template_parms (TREE_TYPE (decl))
975 || uses_template_parms (TREE_TYPE (BINDING_VALUE (binding)))))
263505af
MM
976 /* We have two typedef-names, both naming the same type to have
977 the same name. This is OK because of:
978
979 [dcl.typedef]
980
981 In a given scope, a typedef specifier can be used to redefine
982 the name of any type declared in that scope to refer to the
983 type to which it already refers. */
984 ok = 0;
7b176381
MM
985 /* There can be two block-scope declarations of the same variable,
986 so long as they are `extern' declarations. */
987 else if (TREE_CODE (decl) == VAR_DECL
988 && TREE_CODE (BINDING_VALUE (binding)) == VAR_DECL
989 && DECL_EXTERNAL (decl)
990 && DECL_EXTERNAL (BINDING_VALUE (binding)))
991 {
992 duplicate_decls (decl, BINDING_VALUE (binding));
993 ok = 0;
994 }
8f032717
MM
995 else
996 {
33bd39a2 997 error ("declaration of `%#D'", decl);
8f032717
MM
998 cp_error_at ("conflicts with previous declaration `%#D'",
999 BINDING_VALUE (binding));
1000 ok = 0;
1001 }
1002
1003 return ok;
d8f8dca1
MM
1004}
1005
cfe507be
MM
1006/* Add DECL to the list of things declared in B. */
1007
1008static void
1009add_decl_to_level (decl, b)
1010 tree decl;
e2500fed 1011 struct cp_binding_level *b;
cfe507be 1012{
70b76b34
DP
1013 if (TREE_CODE (decl) == NAMESPACE_DECL
1014 && !DECL_NAMESPACE_ALIAS (decl))
1015 {
1016 TREE_CHAIN (decl) = b->namespaces;
1017 b->namespaces = decl;
1018 }
1019 else if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
1020 {
1021 TREE_CHAIN (decl) = b->vtables;
1022 b->vtables = decl;
1023 }
1024 else
1025 {
1026 /* We build up the list in reverse order, and reverse it later if
1027 necessary. */
1028 TREE_CHAIN (decl) = b->names;
1029 b->names = decl;
1030 b->names_size++;
1031 }
cfe507be
MM
1032}
1033
1034/* Bind DECL to ID in the current_binding_level, assumed to be a local
1035 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1036 doesn't really belong to this binding level, that it got here
1037 through a using-declaration. */
f181d4ae
MM
1038
1039void
0034cf72 1040push_local_binding (id, decl, flags)
f181d4ae
MM
1041 tree id;
1042 tree decl;
0034cf72 1043 int flags;
f181d4ae 1044{
e2500fed 1045 struct cp_binding_level *b;
8f032717
MM
1046
1047 /* Skip over any local classes. This makes sense if we call
1048 push_local_binding with a friend decl of a local class. */
1049 b = current_binding_level;
1050 while (b->parm_flag == 2)
1051 b = b->level_chain;
f181d4ae 1052
d8f8dca1 1053 if (lookup_name_current_level (id))
8f032717
MM
1054 {
1055 /* Supplement the existing binding. */
1056 if (!add_binding (id, decl))
1057 /* It didn't work. Something else must be bound at this
1058 level. Do not add DECL to the list of things to pop
1059 later. */
1060 return;
1061 }
d8f8dca1
MM
1062 else
1063 /* Create a new binding. */
8f032717 1064 push_binding (id, decl, b);
f181d4ae 1065
0034cf72 1066 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
a06d48ef
JM
1067 /* We must put the OVERLOAD into a TREE_LIST since the
1068 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1069 decls that got here through a using-declaration. */
1070 decl = build_tree_list (NULL_TREE, decl);
1071
f181d4ae
MM
1072 /* And put DECL on the list of things declared by the current
1073 binding level. */
cfe507be 1074 add_decl_to_level (decl, b);
f181d4ae
MM
1075}
1076
8f032717
MM
1077/* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1078 binding was successful. */
f181d4ae 1079
8f032717 1080int
f181d4ae
MM
1081push_class_binding (id, decl)
1082 tree id;
1083 tree decl;
1084{
8f032717
MM
1085 int result = 1;
1086 tree binding = IDENTIFIER_BINDING (id);
1087 tree context;
1088
1089 /* Note that we declared this value so that we can issue an error if
0e339752 1090 this is an invalid redeclaration of a name already used for some
8f032717
MM
1091 other purpose. */
1092 note_name_declared_in_class (id, decl);
1093
1094 if (binding && BINDING_LEVEL (binding) == class_binding_level)
d8f8dca1 1095 /* Supplement the existing binding. */
8f032717 1096 result = add_binding (id, decl);
d8f8dca1
MM
1097 else
1098 /* Create a new binding. */
1099 push_binding (id, decl, class_binding_level);
1100
1101 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1102 class-level declaration. Note that we do not use DECL here
1103 because of the possibility of the `struct stat' hack; if DECL is
1104 a class-name or enum-name we might prefer a field-name, or some
1105 such. */
1106 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
8f032717
MM
1107
1108 /* If this is a binding from a base class, mark it as such. */
1109 binding = IDENTIFIER_BINDING (id);
1110 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1111 {
280f9385
MM
1112 /* Any implicit typename must be from a base-class. The
1113 context for an implicit typename declaration is always
1114 the derived class in which the lookup was done, so the checks
1115 based on the context of DECL below will not trigger. */
83233dca 1116 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
280f9385 1117 INHERITED_VALUE_BINDING_P (binding) = 1;
8f032717
MM
1118 else
1119 {
280f9385 1120 if (TREE_CODE (decl) == OVERLOAD)
4f1c5b7d 1121 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
280f9385
MM
1122 else
1123 {
2f939d94 1124 my_friendly_assert (DECL_P (decl), 0);
55de1b66 1125 context = context_for_name_lookup (decl);
280f9385 1126 }
8f032717 1127
280f9385
MM
1128 if (is_properly_derived_from (current_class_type, context))
1129 INHERITED_VALUE_BINDING_P (binding) = 1;
1130 else
1131 INHERITED_VALUE_BINDING_P (binding) = 0;
1132 }
8f032717
MM
1133 }
1134 else if (BINDING_VALUE (binding) == decl)
1135 /* We only encounter a TREE_LIST when push_class_decls detects an
1136 ambiguity. Such an ambiguity can be overridden by a definition
1137 in this class. */
1138 INHERITED_VALUE_BINDING_P (binding) = 1;
1139
1140 return result;
f181d4ae
MM
1141}
1142
d8f8dca1
MM
1143/* Remove the binding for DECL which should be the innermost binding
1144 for ID. */
f181d4ae 1145
68642fb6
UD
1146static void
1147pop_binding (id, decl)
f181d4ae 1148 tree id;
d8f8dca1 1149 tree decl;
f181d4ae
MM
1150{
1151 tree binding;
68642fb6 1152
f181d4ae
MM
1153 if (id == NULL_TREE)
1154 /* It's easiest to write the loops that call this function without
1155 checking whether or not the entities involved have names. We
1156 get here for such an entity. */
1157 return;
1158
d8f8dca1 1159 /* Get the innermost binding for ID. */
f181d4ae 1160 binding = IDENTIFIER_BINDING (id);
f181d4ae 1161
d8f8dca1
MM
1162 /* The name should be bound. */
1163 my_friendly_assert (binding != NULL_TREE, 0);
1164
1165 /* The DECL will be either the ordinary binding or the type
1166 binding for this identifier. Remove that binding. */
1167 if (BINDING_VALUE (binding) == decl)
1168 BINDING_VALUE (binding) = NULL_TREE;
1169 else if (BINDING_TYPE (binding) == decl)
1170 BINDING_TYPE (binding) = NULL_TREE;
1171 else
a98facb0 1172 abort ();
d8f8dca1
MM
1173
1174 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
4890c2f4
MM
1175 {
1176 /* We're completely done with the innermost binding for this
1177 identifier. Unhook it from the list of bindings. */
1178 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1179
1180 /* Add it to the free list. */
1181 TREE_CHAIN (binding) = free_bindings;
1182 free_bindings = binding;
1183
1184 /* Clear the BINDING_LEVEL so the garbage collector doesn't walk
1185 it. */
1186 BINDING_LEVEL (binding) = NULL;
1187 }
f181d4ae
MM
1188}
1189
acef433b
MM
1190/* When a label goes out of scope, check to see if that label was used
1191 in a valid manner, and issue any appropriate warnings or errors. */
1192
1193static void
6625cdb5
JM
1194pop_label (label, old_value)
1195 tree label;
1196 tree old_value;
acef433b 1197{
88848bde 1198 if (!processing_template_decl && doing_semantic_analysis_p ())
acef433b 1199 {
88848bde
MM
1200 if (DECL_INITIAL (label) == NULL_TREE)
1201 {
1202 cp_error_at ("label `%D' used but not defined", label);
1203 /* Avoid crashing later. */
1204 define_label (input_filename, 1, DECL_NAME (label));
1205 }
078721e1 1206 else if (warn_unused_label && !TREE_USED (label))
88848bde 1207 cp_warning_at ("label `%D' defined but not used", label);
acef433b 1208 }
acef433b 1209
6625cdb5 1210 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
1211}
1212
0811ea8f 1213/* At the end of a function, all labels declared within the function
68642fb6 1214 go out of scope. BLOCK is the top-level block for the
acef433b
MM
1215 function. */
1216
1217static void
1218pop_labels (block)
1219 tree block;
1220{
6625cdb5 1221 struct named_label_list *link;
acef433b
MM
1222
1223 /* Clear out the definitions of all label names, since their scopes
1224 end here. */
6625cdb5 1225 for (link = named_labels; link; link = link->next)
acef433b 1226 {
6625cdb5 1227 pop_label (link->label_decl, link->old_value);
acef433b
MM
1228 /* Put the labels into the "variables" of the top-level block,
1229 so debugger can see them. */
6625cdb5
JM
1230 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
1231 BLOCK_VARS (block) = link->label_decl;
acef433b
MM
1232 }
1233
6625cdb5 1234 named_labels = NULL;
acef433b
MM
1235}
1236
8d08fdba
MS
1237/* Exit a binding level.
1238 Pop the level off, and restore the state of the identifier-decl mappings
1239 that were in effect when this level was entered.
1240
1241 If KEEP == 1, this level had explicit declarations, so
1242 and create a "block" (a BLOCK node) for the level
1243 to record its declarations and subblocks for symbol table output.
1244
8d08fdba
MS
1245 If FUNCTIONBODY is nonzero, this level is the body of a function,
1246 so create a block as if KEEP were set and also clear out all
1247 label names.
1248
1249 If REVERSE is nonzero, reverse the order of decls before putting
1250 them into the BLOCK. */
1251
1252tree
1253poplevel (keep, reverse, functionbody)
1254 int keep;
1255 int reverse;
1256 int functionbody;
1257{
1258 register tree link;
1259 /* The chain of decls was accumulated in reverse order.
1260 Put it into forward order, just for cleanliness. */
1261 tree decls;
1262 int tmp = functionbody;
b35d4555
MM
1263 int real_functionbody;
1264 tree tags;
1265 tree subblocks;
8d08fdba
MS
1266 tree block = NULL_TREE;
1267 tree decl;
f181d4ae
MM
1268 int leaving_for_scope;
1269
01d939e8 1270 if (cfun && !doing_semantic_analysis_p ())
b35d4555
MM
1271 return NULL_TREE;
1272
273a708f
MM
1273 my_friendly_assert (current_binding_level->parm_flag != 2,
1274 19990916);
b74a0560 1275
b35d4555
MM
1276 real_functionbody = (current_binding_level->keep == 2
1277 ? ((functionbody = 0), tmp) : functionbody);
1278 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1279 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1280
b74a0560
MM
1281 my_friendly_assert (!current_binding_level->class_shadowed,
1282 19990414);
8d08fdba 1283
536333d4
MM
1284 /* We used to use KEEP == 2 to indicate that the new block should go
1285 at the beginning of the list of blocks at this binding level,
1286 rather than the end. This hack is no longer used. */
1287 my_friendly_assert (keep == 0 || keep == 1, 0);
1288
8d08fdba
MS
1289 if (current_binding_level->keep == 1)
1290 keep = 1;
1291
6625cdb5
JM
1292 /* Any uses of undefined labels, and any defined labels, now operate
1293 under constraints of next binding contour. */
1294 if (cfun && !functionbody)
1295 {
e2500fed 1296 struct cp_binding_level *level_chain;
6625cdb5
JM
1297 level_chain = current_binding_level->level_chain;
1298 if (level_chain)
1299 {
1300 struct named_label_use_list *uses;
1301 struct named_label_list *labels;
1302 for (labels = named_labels; labels; labels = labels->next)
1303 if (labels->binding_level == current_binding_level)
1304 {
1305 tree decl;
826840d9
RH
1306 if (current_binding_level->is_try_scope)
1307 labels->in_try_scope = 1;
1308 if (current_binding_level->is_catch_scope)
1309 labels->in_catch_scope = 1;
6625cdb5
JM
1310 for (decl = labels->names_in_scope; decl;
1311 decl = TREE_CHAIN (decl))
1312 if (decl_jump_unsafe (decl))
1313 labels->bad_decls = tree_cons (NULL_TREE, decl,
1314 labels->bad_decls);
1315 labels->binding_level = level_chain;
1316 labels->names_in_scope = level_chain->names;
1317 }
1318
1319 for (uses = named_label_uses; uses; uses = uses->next)
1320 if (uses->binding_level == current_binding_level)
1321 {
1322 uses->binding_level = level_chain;
1323 uses->names_in_scope = level_chain->names;
1324 }
1325 }
1326 }
1327
8d08fdba
MS
1328 /* Get the decls in the order they were written.
1329 Usually current_binding_level->names is in reverse order.
1330 But parameter decls were previously put in forward order. */
1331
1332 if (reverse)
1333 current_binding_level->names
1334 = decls = nreverse (current_binding_level->names);
1335 else
1336 decls = current_binding_level->names;
1337
1338 /* Output any nested inline functions within this block
1339 if they weren't already output. */
8d08fdba
MS
1340 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1341 if (TREE_CODE (decl) == FUNCTION_DECL
1342 && ! TREE_ASM_WRITTEN (decl)
1343 && DECL_INITIAL (decl) != NULL_TREE
6060a796
MS
1344 && TREE_ADDRESSABLE (decl)
1345 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
1346 {
1347 /* If this decl was copied from a file-scope decl
1348 on account of a block-scope extern decl,
1349 propagate TREE_ADDRESSABLE to the file-scope decl. */
1350 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1351 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1352 else
1353 {
1354 push_function_context ();
1355 output_inline_function (decl);
1356 pop_function_context ();
1357 }
1358 }
1359
d9b2d9da
MM
1360 /* When not in function-at-a-time mode, expand_end_bindings will
1361 warn about unused variables. But, in function-at-a-time mode
1362 expand_end_bindings is not passed the list of variables in the
1363 current scope, and therefore no warning is emitted. So, we
1364 explicitly warn here. */
1365 if (!processing_template_decl)
1366 warn_about_unused_variables (getdecls ());
1367
8d08fdba
MS
1368 /* If there were any declarations or structure tags in that level,
1369 or if this level is a function body,
1370 create a BLOCK to record them for the life of this function. */
8d08fdba 1371 block = NULL_TREE;
f444e36b 1372 if (keep == 1 || functionbody)
8d08fdba
MS
1373 block = make_node (BLOCK);
1374 if (block != NULL_TREE)
1375 {
f444e36b
MM
1376 BLOCK_VARS (block) = decls;
1377 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
1378 }
1379
1380 /* In each subblock, record that this is its superior. */
8d08fdba
MS
1381 if (keep >= 0)
1382 for (link = subblocks; link; link = TREE_CHAIN (link))
1383 BLOCK_SUPERCONTEXT (link) = block;
1384
f181d4ae
MM
1385 /* We still support the old for-scope rules, whereby the variables
1386 in a for-init statement were in scope after the for-statement
92bc1323 1387 ended. We only use the new rules if flag_new_for_scope is
f181d4ae 1388 nonzero. */
68642fb6 1389 leaving_for_scope
f181d4ae
MM
1390 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1391
1392 /* Remove declarations for all the DECLs in this level. */
1393 for (link = decls; link; link = TREE_CHAIN (link))
1394 {
c3783399
NS
1395 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
1396 && DECL_NAME (link))
f181d4ae 1397 {
68642fb6 1398 tree outer_binding
f181d4ae
MM
1399 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1400 tree ns_binding;
1401
1402 if (!outer_binding)
1403 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
c7dda1e3
MM
1404 else
1405 ns_binding = NULL_TREE;
1406
68642fb6
UD
1407 if (outer_binding
1408 && (BINDING_LEVEL (outer_binding)
f181d4ae
MM
1409 == current_binding_level->level_chain))
1410 /* We have something like:
68642fb6 1411
f181d4ae
MM
1412 int i;
1413 for (int i; ;);
68642fb6 1414
f181d4ae
MM
1415 and we are leaving the `for' scope. There's no reason to
1416 keep the binding of the inner `i' in this case. */
d8f8dca1 1417 pop_binding (DECL_NAME (link), link);
68642fb6
UD
1418 else if ((outer_binding
1419 && (TREE_CODE (BINDING_VALUE (outer_binding))
f181d4ae 1420 == TYPE_DECL))
68642fb6 1421 || (ns_binding
f181d4ae
MM
1422 && TREE_CODE (ns_binding) == TYPE_DECL))
1423 /* Here, we have something like:
1424
1425 typedef int I;
1426
1427 void f () {
1428 for (int I; ;);
1429 }
1430
1431 We must pop the for-scope binding so we know what's a
1432 type and what isn't. */
d8f8dca1 1433 pop_binding (DECL_NAME (link), link);
e76a2646 1434 else
e76a2646 1435 {
f181d4ae
MM
1436 /* Mark this VAR_DECL as dead so that we can tell we left it
1437 there only for backward compatibility. */
1438 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 1439
f181d4ae
MM
1440 /* Keep track of what should of have happenned when we
1441 popped the binding. */
1442 if (outer_binding && BINDING_VALUE (outer_binding))
68642fb6 1443 DECL_SHADOWED_FOR_VAR (link)
f181d4ae
MM
1444 = BINDING_VALUE (outer_binding);
1445
1446 /* Add it to the list of dead variables in the next
1447 outermost binding to that we can remove these when we
1448 leave that binding. */
1449 current_binding_level->level_chain->dead_vars_from_for
1450 = tree_cons (NULL_TREE, link,
1451 current_binding_level->level_chain->
1452 dead_vars_from_for);
1453
1454 /* Although we don't pop the CPLUS_BINDING, we do clear
1455 its BINDING_LEVEL since the level is going away now. */
1456 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1457 = 0;
e76a2646 1458 }
2ee887f2 1459 }
68642fb6 1460 else
8d6e462b 1461 {
f181d4ae 1462 /* Remove the binding. */
0034cf72
JM
1463 decl = link;
1464 if (TREE_CODE (decl) == TREE_LIST)
1465 decl = TREE_VALUE (decl);
2f939d94 1466 if (DECL_P (decl))
0034cf72
JM
1467 pop_binding (DECL_NAME (decl), decl);
1468 else if (TREE_CODE (decl) == OVERLOAD)
1469 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
68642fb6 1470 else
a98facb0 1471 abort ();
8d08fdba 1472 }
f181d4ae 1473 }
8d08fdba 1474
f181d4ae
MM
1475 /* Remove declarations for any `for' variables from inner scopes
1476 that we kept around. */
1477 for (link = current_binding_level->dead_vars_from_for;
1478 link; link = TREE_CHAIN (link))
d8f8dca1 1479 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 1480
f181d4ae
MM
1481 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1482 for (link = current_binding_level->type_shadowed;
1483 link; link = TREE_CHAIN (link))
1484 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
1485
1486 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1487 for (link = current_binding_level->shadowed_labels;
68642fb6 1488 link;
acef433b 1489 link = TREE_CHAIN (link))
6625cdb5 1490 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 1491
f181d4ae
MM
1492 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1493 list if a `using' declaration put them there. The debugging
1494 back-ends won't understand OVERLOAD, so we remove them here.
1495 Because the BLOCK_VARS are (temporarily) shared with
1496 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1497 popped all the bindings. */
1498 if (block)
1499 {
1500 tree* d;
8d6e462b 1501
a06d48ef
JM
1502 for (d = &BLOCK_VARS (block); *d; )
1503 {
1504 if (TREE_CODE (*d) == TREE_LIST)
1505 *d = TREE_CHAIN (*d);
1506 else
1507 d = &TREE_CHAIN (*d);
1508 }
8d6e462b 1509 }
8d08fdba
MS
1510
1511 /* If the level being exited is the top level of a function,
1512 check over all the labels. */
8d08fdba
MS
1513 if (functionbody)
1514 {
acef433b
MM
1515 /* Since this is the top level block of a function, the vars are
1516 the function's parameters. Don't leave them in the BLOCK
1517 because they are found in the FUNCTION_DECL instead. */
8d08fdba 1518 BLOCK_VARS (block) = 0;
acef433b 1519 pop_labels (block);
8d08fdba
MS
1520 }
1521
8d08fdba
MS
1522 tmp = current_binding_level->keep;
1523
1524 pop_binding_level ();
1525 if (functionbody)
1526 DECL_INITIAL (current_function_decl) = block;
1527 else if (block)
f444e36b
MM
1528 current_binding_level->blocks
1529 = chainon (current_binding_level->blocks, block);
1530
8d08fdba
MS
1531 /* If we did not make a block for the level just exited,
1532 any blocks made for inner levels
1533 (since they cannot be recorded as subblocks in that level)
1534 must be carried forward so they will later become subblocks
1535 of something else. */
1536 else if (subblocks)
536333d4
MM
1537 current_binding_level->blocks
1538 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 1539
d9b2d9da
MM
1540 /* Each and every BLOCK node created here in `poplevel' is important
1541 (e.g. for proper debugging information) so if we created one
1542 earlier, mark it as "used". */
1543 if (block)
1544 TREE_USED (block) = 1;
1545
8d08fdba 1546 /* Take care of compiler's internal binding structures. */
a4443a08 1547 if (tmp == 2)
8d08fdba 1548 {
d9b2d9da
MM
1549 tree scope_stmts;
1550
68642fb6 1551 scope_stmts
d9b2d9da 1552 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
8d08fdba 1553 if (block)
d9b2d9da
MM
1554 {
1555 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1556 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1557 }
1558
8f471b0d 1559 block = poplevel (keep, reverse, functionbody);
8d08fdba
MS
1560 }
1561
8d08fdba
MS
1562 return block;
1563}
1564
1565/* Delete the node BLOCK from the current binding level.
1566 This is used for the block inside a stmt expr ({...})
1567 so that the block can be reinserted where appropriate. */
1568
1569void
1570delete_block (block)
1571 tree block;
1572{
1573 tree t;
1574 if (current_binding_level->blocks == block)
1575 current_binding_level->blocks = TREE_CHAIN (block);
1576 for (t = current_binding_level->blocks; t;)
1577 {
1578 if (TREE_CHAIN (t) == block)
1579 TREE_CHAIN (t) = TREE_CHAIN (block);
1580 else
1581 t = TREE_CHAIN (t);
1582 }
1583 TREE_CHAIN (block) = NULL_TREE;
1584 /* Clear TREE_USED which is always set by poplevel.
1585 The flag is set again if insert_block is called. */
1586 TREE_USED (block) = 0;
1587}
1588
1589/* Insert BLOCK at the end of the list of subblocks of the
1590 current binding level. This is used when a BIND_EXPR is expanded,
1591 to handle the BLOCK node inside the BIND_EXPR. */
1592
1593void
1594insert_block (block)
1595 tree block;
1596{
1597 TREE_USED (block) = 1;
1598 current_binding_level->blocks
1599 = chainon (current_binding_level->blocks, block);
1600}
1601
8d08fdba
MS
1602/* Set the BLOCK node for the innermost scope
1603 (the one we are currently in). */
1604
1605void
1606set_block (block)
f444e36b 1607 tree block ATTRIBUTE_UNUSED;
8d08fdba 1608{
f444e36b
MM
1609 /* The RTL expansion machinery requires us to provide this callback,
1610 but it is not applicable in function-at-a-time mode. */
1611 my_friendly_assert (cfun && !doing_semantic_analysis_p (), 20000911);
8d08fdba
MS
1612}
1613
1614/* Do a pushlevel for class declarations. */
e92cc029 1615
8d08fdba
MS
1616void
1617pushlevel_class ()
1618{
e2500fed 1619 register struct cp_binding_level *newlevel;
8d08fdba
MS
1620
1621 /* Reuse or create a struct for this binding level. */
e2500fed 1622#if defined(DEBUG_BINDING_LEVELS)
8d08fdba 1623 if (0)
e2500fed 1624#else /* !defined(DEBUG_BINDING_LEVELS) */
8d08fdba 1625 if (free_binding_level)
e2500fed 1626#endif /* !defined(DEBUG_BINDING_LEVELS) */
8d08fdba
MS
1627 {
1628 newlevel = free_binding_level;
1629 free_binding_level = free_binding_level->level_chain;
1630 }
1631 else
f181d4ae 1632 newlevel = make_binding_level ();
8d08fdba 1633
e2500fed 1634#if defined(DEBUG_BINDING_LEVELS)
8d08fdba 1635 is_class_level = 1;
e2500fed 1636#endif /* defined(DEBUG_BINDING_LEVELS) */
8d08fdba
MS
1637
1638 push_binding_level (newlevel, 0, 0);
1639
8d08fdba
MS
1640 class_binding_level = current_binding_level;
1641 class_binding_level->parm_flag = 2;
70adf8a9 1642 class_binding_level->this_class = current_class_type;
8d08fdba
MS
1643}
1644
b74a0560 1645/* ...and a poplevel for class declarations. */
e92cc029 1646
273a708f 1647void
b74a0560 1648poplevel_class ()
8d08fdba 1649{
e2500fed 1650 register struct cp_binding_level *level = class_binding_level;
8d08fdba
MS
1651 tree shadowed;
1652
1653 my_friendly_assert (level != 0, 354);
68642fb6 1654
8d08fdba 1655 /* If we're leaving a toplevel class, don't bother to do the setting
ddd5a7c1 1656 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
8d08fdba 1657 shouldn't even be used when current_class_type isn't set, and second,
ddd5a7c1 1658 if we don't touch it here, we're able to use the cache effect if the
8d08fdba 1659 next time we're entering a class scope, it is the same class. */
b74a0560 1660 if (current_class_depth != 1)
8f032717 1661 {
e2500fed 1662 struct cp_binding_level* b;
8f032717
MM
1663
1664 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1665 for (shadowed = level->class_shadowed;
1666 shadowed;
1667 shadowed = TREE_CHAIN (shadowed))
1668 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
68642fb6 1669
8f032717
MM
1670 /* Find the next enclosing class, and recreate
1671 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1672 b = level->level_chain;
1673 while (b && b->parm_flag != 2)
1674 b = b->level_chain;
1675
1676 if (b)
68642fb6
UD
1677 for (shadowed = b->class_shadowed;
1678 shadowed;
8f032717
MM
1679 shadowed = TREE_CHAIN (shadowed))
1680 {
1681 tree t;
1682
1683 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1684 while (t && BINDING_LEVEL (t) != b)
1685 t = TREE_CHAIN (t);
68642fb6 1686
8f032717 1687 if (t)
68642fb6 1688 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
8f032717
MM
1689 = BINDING_VALUE (t);
1690 }
1691 }
8d08fdba
MS
1692 else
1693 /* Remember to save what IDENTIFIER's were bound in this scope so we
1694 can recover from cache misses. */
e76a2646
MS
1695 {
1696 previous_class_type = current_class_type;
1697 previous_class_values = class_binding_level->class_shadowed;
1698 }
8d08fdba
MS
1699 for (shadowed = level->type_shadowed;
1700 shadowed;
1701 shadowed = TREE_CHAIN (shadowed))
2c73f9f5 1702 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
8d08fdba 1703
f181d4ae 1704 /* Remove the bindings for all of the class-level declarations. */
68642fb6
UD
1705 for (shadowed = level->class_shadowed;
1706 shadowed;
f181d4ae 1707 shadowed = TREE_CHAIN (shadowed))
d8f8dca1 1708 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
f181d4ae 1709
38e01259 1710 /* Now, pop out of the binding level which we created up in the
8d08fdba 1711 `pushlevel_class' routine. */
e2500fed 1712#if defined(DEBUG_BINDING_LEVELS)
8d08fdba 1713 is_class_level = 1;
e2500fed 1714#endif /* defined(DEBUG_BINDING_LEVELS) */
8d08fdba
MS
1715
1716 pop_binding_level ();
8d08fdba 1717}
8f032717
MM
1718
1719/* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1720 for any names in enclosing classes. */
1721
1722void
1723clear_identifier_class_values ()
1724{
1725 tree t;
1726
1727 if (!class_binding_level)
1728 return;
1729
1730 for (t = class_binding_level->class_shadowed;
1731 t;
1732 t = TREE_CHAIN (t))
1733 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1734}
1735
838dfd8a 1736/* Returns nonzero if T is a virtual function table. */
0aafb128
MM
1737
1738int
1739vtable_decl_p (t, data)
1740 tree t;
1741 void *data ATTRIBUTE_UNUSED;
1742{
1743 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1744}
1745
838dfd8a 1746/* Returns nonzero if T is a TYPE_DECL for a type with virtual
0aafb128
MM
1747 functions. */
1748
1749int
1750vtype_decl_p (t, data)
1751 tree t;
1752 void *data ATTRIBUTE_UNUSED;
1753{
1754 return (TREE_CODE (t) == TYPE_DECL
34249844
NS
1755 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1756 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
0aafb128
MM
1757}
1758
f71f87f9
MM
1759/* Return the declarations that are members of the namespace NS. */
1760
1761tree
1762cp_namespace_decls (ns)
1763 tree ns;
1764{
1765 return NAMESPACE_LEVEL (ns)->names;
1766}
1767
70b76b34
DP
1768struct walk_globals_data {
1769 walk_globals_pred p;
1770 walk_globals_fn f;
1771 void *data;
1772};
1773
1774/* Walk the vtable declarations in NAMESPACE. Whenever one is found
838dfd8a
KH
1775 for which P returns nonzero, call F with its address. If any call
1776 to F returns a nonzero value, return a nonzero value. */
70b76b34
DP
1777
1778static int
1779walk_vtables_r (namespace, data)
1780 tree namespace;
1781 void *data;
1782{
1783 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1784 walk_globals_fn f = wgd->f;
1785 void *d = wgd->data;
1786 tree decl = NAMESPACE_LEVEL (namespace)->vtables;
1787 int result = 0;
1788
1789 for (; decl ; decl = TREE_CHAIN (decl))
0246d49e 1790 result |= (*f) (&decl, d);
70b76b34
DP
1791
1792 return result;
1793}
1794
1795/* Walk the vtable declarations. Whenever one is found for which P
838dfd8a
KH
1796 returns nonzero, call F with its address. If any call to F
1797 returns a nonzero value, return a nonzero value. */
848eed92
GDR
1798bool
1799walk_vtables (walk_globals_pred p, walk_globals_fn f, void *data)
70b76b34
DP
1800{
1801 struct walk_globals_data wgd;
1802 wgd.p = p;
1803 wgd.f = f;
1804 wgd.data = data;
1805
1806 return walk_namespaces (walk_vtables_r, &wgd);
1807}
1808
0aafb128
MM
1809/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1810 itself, calling F for each. The DATA is passed to F as well. */
1811
1812static int
1813walk_namespaces_r (namespace, f, data)
1814 tree namespace;
1815 walk_namespaces_fn f;
1816 void *data;
1817{
0aafb128 1818 int result = 0;
70b76b34 1819 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
0aafb128
MM
1820
1821 result |= (*f) (namespace, data);
1822
70b76b34
DP
1823 for (; current; current = TREE_CHAIN (current))
1824 result |= walk_namespaces_r (current, f, data);
0aafb128
MM
1825
1826 return result;
1827}
1828
1829/* Walk all the namespaces, calling F for each. The DATA is passed to
1830 F as well. */
1831
1832int
1833walk_namespaces (f, data)
1834 walk_namespaces_fn f;
1835 void *data;
1836{
1837 return walk_namespaces_r (global_namespace, f, data);
1838}
1839
0aafb128 1840/* Walk the global declarations in NAMESPACE. Whenever one is found
838dfd8a
KH
1841 for which P returns nonzero, call F with its address. If any call
1842 to F returns a nonzero value, return a nonzero value. */
0aafb128 1843
68642fb6 1844static int
0aafb128
MM
1845walk_globals_r (namespace, data)
1846 tree namespace;
1847 void *data;
1848{
1849 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1850 walk_globals_pred p = wgd->p;
1851 walk_globals_fn f = wgd->f;
1852 void *d = wgd->data;
1853 tree *t;
1854 int result = 0;
1855
1856 t = &NAMESPACE_LEVEL (namespace)->names;
1857
1858 while (*t)
1859 {
1860 tree glbl = *t;
1861
1862 if ((*p) (glbl, d))
1863 result |= (*f) (t, d);
1864
1865 /* If F changed *T, then *T still points at the next item to
1866 examine. */
1867 if (*t == glbl)
1868 t = &TREE_CHAIN (*t);
1869 }
1870
1871 return result;
1872}
1873
1874/* Walk the global declarations. Whenever one is found for which P
848eed92
GDR
1875 returns true, call F with its address. If any call to F
1876 returns true, return true. */
0aafb128 1877
848eed92
GDR
1878bool
1879walk_globals (walk_globals_pred p, walk_globals_fn f, void *data)
0aafb128
MM
1880{
1881 struct walk_globals_data wgd;
1882 wgd.p = p;
1883 wgd.f = f;
1884 wgd.data = data;
1885
1886 return walk_namespaces (walk_globals_r, &wgd);
1887}
1888
1889/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1890 DATA is non-NULL, this is the last time we will call
1891 wrapup_global_declarations for this NAMESPACE. */
1892
1893int
1894wrapup_globals_for_namespace (namespace, data)
1895 tree namespace;
1896 void *data;
1897{
f71f87f9 1898 tree globals = cp_namespace_decls (namespace);
70b76b34 1899 int len = NAMESPACE_LEVEL (namespace)->names_size;
0aafb128
MM
1900 tree *vec = (tree *) alloca (sizeof (tree) * len);
1901 int i;
0352cfc8 1902 int result;
0aafb128
MM
1903 tree decl;
1904 int last_time = (data != 0);
1905
1906 if (last_time && namespace == global_namespace)
1907 /* Let compile_file handle the global namespace. */
1908 return 0;
1909
1910 /* Process the decls in reverse order--earliest first.
70b76b34 1911 Put them into VEC from back to front, then take out from front. */
0aafb128 1912 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
62136084 1913 vec[len - i - 1] = decl;
68642fb6 1914
0352cfc8
MM
1915 if (last_time)
1916 {
1917 check_global_declarations (vec, len);
1918 return 0;
1919 }
1920
0352cfc8
MM
1921 /* Write out any globals that need to be output. */
1922 result = wrapup_global_declarations (vec, len);
1923
0352cfc8 1924 return result;
0aafb128
MM
1925}
1926
8d08fdba
MS
1927\f
1928/* For debugging. */
5566b478
MS
1929static int no_print_functions = 0;
1930static int no_print_builtins = 0;
8d08fdba
MS
1931
1932void
1933print_binding_level (lvl)
e2500fed 1934 struct cp_binding_level *lvl;
8d08fdba
MS
1935{
1936 tree t;
1937 int i = 0, len;
1938 fprintf (stderr, " blocks=");
1939 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
8d08fdba
MS
1940 if (lvl->tag_transparent)
1941 fprintf (stderr, " tag-transparent");
1942 if (lvl->more_cleanups_ok)
1943 fprintf (stderr, " more-cleanups-ok");
1944 if (lvl->have_cleanups)
1945 fprintf (stderr, " have-cleanups");
8d08fdba
MS
1946 fprintf (stderr, "\n");
1947 if (lvl->names)
1948 {
1949 fprintf (stderr, " names:\t");
1950 /* We can probably fit 3 names to a line? */
1951 for (t = lvl->names; t; t = TREE_CHAIN (t))
1952 {
68642fb6 1953 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
8d08fdba
MS
1954 continue;
1955 if (no_print_builtins
fc378698
MS
1956 && (TREE_CODE (t) == TYPE_DECL)
1957 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
8d08fdba
MS
1958 continue;
1959
1960 /* Function decls tend to have longer names. */
1961 if (TREE_CODE (t) == FUNCTION_DECL)
1962 len = 3;
1963 else
1964 len = 2;
1965 i += len;
1966 if (i > 6)
1967 {
1968 fprintf (stderr, "\n\t");
1969 i = len;
1970 }
1971 print_node_brief (stderr, "", t, 0);
bd6dd845 1972 if (t == error_mark_node)
8d08fdba
MS
1973 break;
1974 }
1975 if (i)
1976 fprintf (stderr, "\n");
1977 }
1978 if (lvl->tags)
1979 {
1980 fprintf (stderr, " tags:\t");
1981 i = 0;
1982 for (t = lvl->tags; t; t = TREE_CHAIN (t))
1983 {
1984 if (TREE_PURPOSE (t) == NULL_TREE)
1985 len = 3;
1986 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1987 len = 2;
1988 else
1989 len = 4;
1990 i += len;
1991 if (i > 5)
1992 {
1993 fprintf (stderr, "\n\t");
1994 i = len;
1995 }
1996 if (TREE_PURPOSE (t) == NULL_TREE)
1997 {
1998 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1999 fprintf (stderr, ">");
2000 }
2001 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2002 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2003 else
2004 {
2005 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2006 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2007 fprintf (stderr, ">");
2008 }
2009 }
2010 if (i)
2011 fprintf (stderr, "\n");
2012 }
8d08fdba
MS
2013 if (lvl->class_shadowed)
2014 {
2015 fprintf (stderr, " class-shadowed:");
2016 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2017 {
2018 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2019 }
2020 fprintf (stderr, "\n");
2021 }
2022 if (lvl->type_shadowed)
2023 {
2024 fprintf (stderr, " type-shadowed:");
2025 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2026 {
8d08fdba 2027 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
8d08fdba
MS
2028 }
2029 fprintf (stderr, "\n");
2030 }
2031}
2032
2033void
2034print_other_binding_stack (stack)
e2500fed 2035 struct cp_binding_level *stack;
8d08fdba 2036{
e2500fed 2037 struct cp_binding_level *level;
8d08fdba
MS
2038 for (level = stack; level != global_binding_level; level = level->level_chain)
2039 {
2040 fprintf (stderr, "binding level ");
2041 fprintf (stderr, HOST_PTR_PRINTF, level);
2042 fprintf (stderr, "\n");
2043 print_binding_level (level);
2044 }
2045}
2046
2047void
2048print_binding_stack ()
2049{
e2500fed 2050 struct cp_binding_level *b;
8d08fdba
MS
2051 fprintf (stderr, "current_binding_level=");
2052 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2053 fprintf (stderr, "\nclass_binding_level=");
2054 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2055 fprintf (stderr, "\nglobal_binding_level=");
2056 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2057 fprintf (stderr, "\n");
2058 if (class_binding_level)
2059 {
2060 for (b = class_binding_level; b; b = b->level_chain)
2061 if (b == current_binding_level)
2062 break;
2063 if (b)
2064 b = class_binding_level;
2065 else
2066 b = current_binding_level;
2067 }
2068 else
2069 b = current_binding_level;
2070 print_other_binding_stack (b);
2071 fprintf (stderr, "global:\n");
2072 print_binding_level (global_binding_level);
2073}
a9aedbc2 2074
2c73f9f5
ML
2075/* Namespace binding access routines: The namespace_bindings field of
2076 the identifier is polymorphic, with three possible values:
2077 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
a1c65f9f 2078 indicating the BINDING_VALUE of global_namespace. */
30394414 2079
2c73f9f5
ML
2080/* Check whether the a binding for the name to scope is known.
2081 Assumes that the bindings of the name are already a list
a1c65f9f 2082 of bindings. Returns the binding found, or NULL_TREE. */
2c73f9f5
ML
2083
2084static tree
2085find_binding (name, scope)
30394414
JM
2086 tree name;
2087 tree scope;
2088{
2c73f9f5 2089 tree iter, prev = NULL_TREE;
3e3f722c
ML
2090
2091 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2092
30394414
JM
2093 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2094 iter = TREE_CHAIN (iter))
2095 {
2096 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2097 if (BINDING_SCOPE (iter) == scope)
2c73f9f5 2098 {
cfe507be 2099 /* Move binding found to the front of the list, so
a1c65f9f 2100 subsequent lookups will find it faster. */
2c73f9f5
ML
2101 if (prev)
2102 {
2103 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2104 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2105 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2106 }
2107 return iter;
2108 }
2109 prev = iter;
30394414 2110 }
2c73f9f5
ML
2111 return NULL_TREE;
2112}
2113
2114/* Always returns a binding for name in scope. If the
2115 namespace_bindings is not a list, convert it to one first.
a1c65f9f 2116 If no binding is found, make a new one. */
2c73f9f5
ML
2117
2118tree
2119binding_for_name (name, scope)
2120 tree name;
2121 tree scope;
2122{
2123 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2124 tree result;
3e3f722c
ML
2125
2126 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2127
2c73f9f5
ML
2128 if (b && TREE_CODE (b) != CPLUS_BINDING)
2129 {
a1c65f9f 2130 /* Get rid of optimization for global scope. */
2c73f9f5
ML
2131 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2132 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2133 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2134 }
2135 if (b && (result = find_binding (name, scope)))
2136 return result;
a1c65f9f 2137 /* Not found, make a new one. */
2c73f9f5
ML
2138 result = make_node (CPLUS_BINDING);
2139 TREE_CHAIN (result) = b;
2140 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2141 BINDING_SCOPE (result) = scope;
2142 BINDING_TYPE (result) = NULL_TREE;
2143 BINDING_VALUE (result) = NULL_TREE;
2c73f9f5
ML
2144 return result;
2145}
2146
2147/* Return the binding value for name in scope, considering that
a1c65f9f 2148 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2c73f9f5
ML
2149
2150tree
2151namespace_binding (name, scope)
2152 tree name;
2153 tree scope;
2154{
2155 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2156 if (b == NULL_TREE)
2157 return NULL_TREE;
cb0dbb9a
JM
2158 if (scope == NULL_TREE)
2159 scope = global_namespace;
2c73f9f5
ML
2160 if (TREE_CODE (b) != CPLUS_BINDING)
2161 return (scope == global_namespace) ? b : NULL_TREE;
2162 name = find_binding (name,scope);
2163 if (name == NULL_TREE)
2164 return name;
2165 return BINDING_VALUE (name);
2166}
2167
2168/* Set the binding value for name in scope. If modifying the binding
a1c65f9f 2169 of global_namespace is attempted, try to optimize it. */
2c73f9f5
ML
2170
2171void
2172set_namespace_binding (name, scope, val)
2173 tree name;
2174 tree scope;
2175 tree val;
2176{
2177 tree b;
cb0dbb9a
JM
2178
2179 if (scope == NULL_TREE)
2180 scope = global_namespace;
68642fb6 2181
2c73f9f5
ML
2182 if (scope == global_namespace)
2183 {
2184 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2185 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2186 {
2187 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2188 return;
2189 }
2190 }
2191 b = binding_for_name (name, scope);
2192 BINDING_VALUE (b) = val;
30394414
JM
2193}
2194
dff6b454
RK
2195/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2196 select a name that is unique to this compilation unit. */
e92cc029 2197
a9aedbc2
MS
2198void
2199push_namespace (name)
2200 tree name;
2201{
b370501f 2202 tree d = NULL_TREE;
30394414
JM
2203 int need_new = 1;
2204 int implicit_use = 0;
2c73f9f5 2205 int global = 0;
30394414
JM
2206 if (!global_namespace)
2207 {
a1c65f9f 2208 /* This must be ::. */
30394414 2209 my_friendly_assert (name == get_identifier ("::"), 377);
2c73f9f5 2210 global = 1;
30394414
JM
2211 }
2212 else if (!name)
2213 {
3ab52652
ML
2214 /* The name of anonymous namespace is unique for the translation
2215 unit. */
0c8feefe
MM
2216 if (!anonymous_namespace_name)
2217 anonymous_namespace_name = get_file_function_name ('N');
2218 name = anonymous_namespace_name;
3ab52652
ML
2219 d = IDENTIFIER_NAMESPACE_VALUE (name);
2220 if (d)
2221 /* Reopening anonymous namespace. */
2222 need_new = 0;
30394414 2223 implicit_use = 1;
2c73f9f5 2224 }
30394414
JM
2225 else
2226 {
a1c65f9f 2227 /* Check whether this is an extended namespace definition. */
30394414
JM
2228 d = IDENTIFIER_NAMESPACE_VALUE (name);
2229 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
3e3f722c
ML
2230 {
2231 need_new = 0;
2232 if (DECL_NAMESPACE_ALIAS (d))
2233 {
33bd39a2 2234 error ("namespace alias `%D' not allowed here, assuming `%D'",
3e3f722c
ML
2235 d, DECL_NAMESPACE_ALIAS (d));
2236 d = DECL_NAMESPACE_ALIAS (d);
2237 }
2238 }
30394414 2239 }
68642fb6 2240
30394414
JM
2241 if (need_new)
2242 {
a1c65f9f 2243 /* Make a new namespace, binding the name to it. */
6b57ac29 2244 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2c73f9f5
ML
2245 /* The global namespace is not pushed, and the global binding
2246 level is set elsewhere. */
2247 if (!global)
2248 {
40f1e342 2249 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
2c73f9f5
ML
2250 d = pushdecl (d);
2251 pushlevel (0);
2252 declare_namespace_level ();
2253 NAMESPACE_LEVEL (d) = current_binding_level;
2254 }
30394414 2255 }
2c73f9f5
ML
2256 else
2257 resume_binding_level (NAMESPACE_LEVEL (d));
2258
30394414
JM
2259 if (implicit_use)
2260 do_using_directive (d);
a1c65f9f 2261 /* Enter the name space. */
30394414 2262 current_namespace = d;
a9aedbc2
MS
2263}
2264
2265/* Pop from the scope of the current namespace. */
e92cc029 2266
a9aedbc2
MS
2267void
2268pop_namespace ()
2269{
1dbb6023 2270 my_friendly_assert (current_namespace != global_namespace, 20010801);
cb0dbb9a 2271 current_namespace = CP_DECL_CONTEXT (current_namespace);
2c73f9f5
ML
2272 /* The binding level is not popped, as it might be re-opened later. */
2273 suspend_binding_level ();
2274}
a9aedbc2 2275
61fc8c9e
MM
2276/* Push into the scope of the namespace NS, even if it is deeply
2277 nested within another namespace. */
2278
2279void
2280push_nested_namespace (ns)
2281 tree ns;
2282{
2283 if (ns == global_namespace)
2284 push_to_top_level ();
2285 else
2286 {
2287 push_nested_namespace (CP_DECL_CONTEXT (ns));
2288 push_namespace (DECL_NAME (ns));
2289 }
2290}
2291
2292/* Pop back from the scope of the namespace NS, which was previously
2293 entered with push_nested_namespace. */
68642fb6 2294
61fc8c9e
MM
2295void
2296pop_nested_namespace (ns)
2297 tree ns;
2298{
2299 while (ns != global_namespace)
2300 {
2301 pop_namespace ();
2302 ns = CP_DECL_CONTEXT (ns);
2303 }
2304
2305 pop_from_top_level ();
2306}
2307
8d08fdba
MS
2308\f
2309/* Subroutines for reverting temporarily to top-level for instantiation
2310 of templates and such. We actually need to clear out the class- and
2311 local-value slots of all identifiers, so that only the global values
2312 are at all visible. Simply setting current_binding_level to the global
2313 scope isn't enough, because more binding levels may be pushed. */
9cd64686 2314struct saved_scope *scope_chain;
8d08fdba 2315
e92cc029 2316static tree
45537677
MS
2317store_bindings (names, old_bindings)
2318 tree names, old_bindings;
2319{
2320 tree t;
c00996a3
JM
2321 tree search_bindings = old_bindings;
2322
45537677
MS
2323 for (t = names; t; t = TREE_CHAIN (t))
2324 {
2325 tree binding, t1, id;
2326
2327 if (TREE_CODE (t) == TREE_LIST)
2328 id = TREE_PURPOSE (t);
2329 else
2330 id = DECL_NAME (t);
2331
68642fb6 2332 if (!id
f181d4ae
MM
2333 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2334 we have no IDENTIFIER_BINDING if we have left the class
2335 scope, but cached the class-level declarations. */
2336 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
45537677
MS
2337 continue;
2338
c00996a3 2339 for (t1 = search_bindings; t1; t1 = TREE_CHAIN (t1))
45537677
MS
2340 if (TREE_VEC_ELT (t1, 0) == id)
2341 goto skip_it;
78957a2a 2342
31a714f6 2343 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
87e3dbc9 2344 binding = make_tree_vec (4);
31a714f6
MM
2345 TREE_VEC_ELT (binding, 0) = id;
2346 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2347 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2348 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2349 IDENTIFIER_BINDING (id) = NULL_TREE;
2350 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
45537677
MS
2351 TREE_CHAIN (binding) = old_bindings;
2352 old_bindings = binding;
2353 skip_it:
2354 ;
2355 }
2356 return old_bindings;
2357}
2358
8d08fdba 2359void
5566b478
MS
2360maybe_push_to_top_level (pseudo)
2361 int pseudo;
8d08fdba 2362{
a8f73d4b 2363 struct saved_scope *s;
e2500fed 2364 struct cp_binding_level *b;
a8f73d4b
MM
2365 tree old_bindings;
2366 int need_pop;
2367
e2500fed 2368 s = (struct saved_scope *) ggc_alloc_cleared (sizeof (struct saved_scope));
8d08fdba 2369
9cd64686
MM
2370 b = scope_chain ? current_binding_level : 0;
2371
a8f73d4b 2372 /* If we're in the middle of some function, save our state. */
01d939e8 2373 if (cfun)
a8f73d4b
MM
2374 {
2375 need_pop = 1;
2376 push_function_context_to (NULL_TREE);
2377 }
2378 else
2379 need_pop = 0;
e349ee73 2380
a8f73d4b 2381 old_bindings = NULL_TREE;
9cd64686 2382 if (scope_chain && previous_class_type)
a50f0918
MS
2383 old_bindings = store_bindings (previous_class_values, old_bindings);
2384
8d08fdba
MS
2385 /* Have to include global_binding_level, because class-level decls
2386 aren't listed anywhere useful. */
2387 for (; b; b = b->level_chain)
2388 {
2389 tree t;
2390
2c73f9f5
ML
2391 /* Template IDs are inserted into the global level. If they were
2392 inserted into namespace level, finish_file wouldn't find them
2393 when doing pending instantiations. Therefore, don't stop at
2394 namespace level, but continue until :: . */
74b846e0 2395 if (b == global_binding_level || (pseudo && b->template_parms_p))
5566b478 2396 break;
8d08fdba 2397
45537677 2398 old_bindings = store_bindings (b->names, old_bindings);
cffa8729 2399 /* We also need to check class_shadowed to save class-level type
45537677
MS
2400 bindings, since pushclass doesn't fill in b->names. */
2401 if (b->parm_flag == 2)
cffa8729 2402 old_bindings = store_bindings (b->class_shadowed, old_bindings);
8d08fdba 2403
8d08fdba
MS
2404 /* Unwind type-value slots back to top level. */
2405 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2406 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2407 }
fc0e7bf5
MM
2408 s->prev = scope_chain;
2409 s->old_bindings = old_bindings;
a8f73d4b
MM
2410 s->bindings = b;
2411 s->need_pop_function_context = need_pop;
2412 s->function_decl = current_function_decl;
0f4237c2 2413 s->last_parms = last_function_parms;
a723baf1 2414 s->check_access = flag_access_control;
fc0e7bf5
MM
2415
2416 scope_chain = s;
8d08fdba 2417 current_function_decl = NULL_TREE;
9cd64686 2418 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
51c184be 2419 current_lang_name = lang_name_cplusplus;
2c73f9f5 2420 current_namespace = global_namespace;
5566b478
MS
2421}
2422
2423void
2424push_to_top_level ()
2425{
2426 maybe_push_to_top_level (0);
8d08fdba
MS
2427}
2428
2429void
2430pop_from_top_level ()
2431{
9cd64686 2432 struct saved_scope *s = scope_chain;
8d08fdba
MS
2433 tree t;
2434
e76a2646 2435 /* Clear out class-level bindings cache. */
8d08fdba 2436 if (previous_class_type)
8f032717 2437 invalidate_class_lookup_cache ();
8d08fdba 2438
e2500fed 2439 current_lang_base = 0;
9cd64686
MM
2440
2441 scope_chain = s->prev;
87e3dbc9 2442 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
8d08fdba
MS
2443 {
2444 tree id = TREE_VEC_ELT (t, 0);
31a714f6
MM
2445
2446 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2447 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2448 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
8d08fdba 2449 }
9cd64686 2450
a8f73d4b
MM
2451 /* If we were in the middle of compiling a function, restore our
2452 state. */
2453 if (s->need_pop_function_context)
2454 pop_function_context_from (NULL_TREE);
2455 current_function_decl = s->function_decl;
0f4237c2 2456 last_function_parms = s->last_parms;
8d08fdba
MS
2457}
2458\f
2459/* Push a definition of struct, union or enum tag "name".
68642fb6 2460 into binding_level "b". "type" should be the type node,
8d08fdba
MS
2461 We assume that the tag "name" is not already defined.
2462
2463 Note that the definition may really be just a forward reference.
2464 In that case, the TYPE_SIZE will be a NULL_TREE.
2465
e92cc029 2466 C++ gratuitously puts all these tags in the name space. */
8d08fdba
MS
2467
2468/* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2469 record the shadowed value for this binding contour. TYPE is
2470 the type that ID maps to. */
2471
2472static void
2473set_identifier_type_value_with_scope (id, type, b)
2474 tree id;
2475 tree type;
e2500fed 2476 struct cp_binding_level *b;
8d08fdba 2477{
2c73f9f5 2478 if (!b->namespace_p)
8d08fdba 2479 {
2c73f9f5 2480 /* Shadow the marker, not the real thing, so that the marker
a1c65f9f 2481 gets restored later. */
2c73f9f5 2482 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
8d08fdba
MS
2483 b->type_shadowed
2484 = tree_cons (id, old_type_value, b->type_shadowed);
2485 }
2c73f9f5
ML
2486 else
2487 {
2488 tree binding = binding_for_name (id, current_namespace);
2489 BINDING_TYPE (binding) = type;
a1c65f9f 2490 /* Store marker instead of real type. */
2c73f9f5
ML
2491 type = global_type_node;
2492 }
8d08fdba
MS
2493 SET_IDENTIFIER_TYPE_VALUE (id, type);
2494}
2495
8f032717 2496/* As set_identifier_type_value_with_scope, but using current_binding_level. */
8d08fdba
MS
2497
2498void
2499set_identifier_type_value (id, type)
2500 tree id;
2501 tree type;
2502{
8f032717 2503 set_identifier_type_value_with_scope (id, type, current_binding_level);
8d08fdba
MS
2504}
2505
a1c65f9f 2506/* Return the type associated with id. */
2c73f9f5
ML
2507
2508tree
2509identifier_type_value (id)
2510 tree id;
2511{
a1c65f9f 2512 /* There is no type with that name, anywhere. */
2c73f9f5
ML
2513 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2514 return NULL_TREE;
a1c65f9f 2515 /* This is not the type marker, but the real thing. */
2c73f9f5
ML
2516 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2517 return REAL_IDENTIFIER_TYPE_VALUE (id);
2518 /* Have to search for it. It must be on the global level, now.
a723baf1
MM
2519 Ask lookup_name not to return non-types. */
2520 id = lookup_name_real (id, 2, 1, 0, LOOKUP_COMPLAIN);
2c73f9f5
ML
2521 if (id)
2522 return TREE_TYPE (id);
2523 return NULL_TREE;
2524}
2525
a9aedbc2
MS
2526/* Pop off extraneous binding levels left over due to syntax errors.
2527
2528 We don't pop past namespaces, as they might be valid. */
e92cc029 2529
8926095f
MS
2530void
2531pop_everything ()
2532{
e2500fed 2533#ifdef DEBUG_BINDING_LEVELS
8926095f
MS
2534 fprintf (stderr, "XXX entering pop_everything ()\n");
2535#endif
8f032717 2536 while (!toplevel_bindings_p ())
8926095f 2537 {
8f032717 2538 if (current_binding_level->parm_flag == 2)
b74a0560 2539 pop_nested_class ();
8926095f
MS
2540 else
2541 poplevel (0, 0, 0);
2542 }
e2500fed 2543#ifdef DEBUG_BINDING_LEVELS
8926095f
MS
2544 fprintf (stderr, "XXX leaving pop_everything ()\n");
2545#endif
2546}
2547
39c01e4c
MM
2548/* The type TYPE is being declared. If it is a class template, or a
2549 specialization of a class template, do any processing required and
838dfd8a 2550 perform error-checking. If IS_FRIEND is nonzero, this TYPE is
39c01e4c
MM
2551 being declared a friend. B is the binding level at which this TYPE
2552 should be bound.
2553
2554 Returns the TYPE_DECL for TYPE, which may have been altered by this
2555 processing. */
2556
68642fb6 2557static tree
39c01e4c
MM
2558maybe_process_template_type_declaration (type, globalize, b)
2559 tree type;
2560 int globalize;
e2500fed 2561 struct cp_binding_level* b;
39c01e4c
MM
2562{
2563 tree decl = TYPE_NAME (type);
68642fb6 2564
39c01e4c
MM
2565 if (processing_template_parmlist)
2566 /* You can't declare a new template type in a template parameter
2567 list. But, you can declare a non-template type:
68642fb6 2568
39c01e4c 2569 template <class A*> struct S;
68642fb6 2570
39c01e4c
MM
2571 is a forward-declaration of `A'. */
2572 ;
68642fb6 2573 else
39c01e4c
MM
2574 {
2575 maybe_check_template_type (type);
2576
68642fb6 2577 my_friendly_assert (IS_AGGR_TYPE (type)
ed44da02 2578 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
68642fb6
UD
2579
2580
3ebc5c52 2581 if (processing_template_decl)
39c01e4c
MM
2582 {
2583 /* This may change after the call to
2584 push_template_decl_real, but we want the original value. */
2585 tree name = DECL_NAME (decl);
2586
2587 decl = push_template_decl_real (decl, globalize);
2588 /* If the current binding level is the binding level for the
2589 template parameters (see the comment in
2590 begin_template_parm_list) and the enclosing level is a class
2591 scope, and we're not looking at a friend, push the
2592 declaration of the member class into the class scope. In the
2593 friend case, push_template_decl will already have put the
2594 friend into global scope, if appropriate. */
ed44da02 2595 if (TREE_CODE (type) != ENUMERAL_TYPE
74b846e0 2596 && !globalize && b->template_parms_p
39c01e4c
MM
2597 && b->level_chain->parm_flag == 2)
2598 {
61a127b3 2599 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
39c01e4c
MM
2600 /* Put this tag on the list of tags for the class, since
2601 that won't happen below because B is not the class
2602 binding level, but is instead the pseudo-global level. */
68642fb6 2603 b->level_chain->tags =
e1b3e07d 2604 tree_cons (name, type, b->level_chain->tags);
d0f062fb 2605 if (!COMPLETE_TYPE_P (current_class_type))
7088fca9
KL
2606 {
2607 maybe_add_class_template_decl_list (current_class_type,
2608 type, /*friend_p=*/0);
2609 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2610 }
39c01e4c
MM
2611 }
2612 }
2613 }
2614
2615 return decl;
2616}
2617
9188c363
MM
2618/* In C++, you don't have to write `struct S' to refer to `S'; you
2619 can just use `S'. We accomplish this by creating a TYPE_DECL as
2620 if the user had written `typedef struct S S'. Create and return
2621 the TYPE_DECL for TYPE. */
2622
2623tree
2624create_implicit_typedef (name, type)
2625 tree name;
2626 tree type;
2627{
2628 tree decl;
2629
2630 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 2631 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
2632 /* There are other implicit type declarations, like the one *within*
2633 a class that allows you to write `S::S'. We must distinguish
2634 amongst these. */
2635 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2636 TYPE_NAME (type) = decl;
2637
2638 return decl;
2639}
2640
8e4ce833
JJ
2641/* Remember a local name for name-mangling purposes. */
2642
2643static void
2644push_local_name (decl)
2645 tree decl;
2646{
2647 size_t i, nelts;
2648 tree t, name;
2649
2650 if (!local_names)
2651 VARRAY_TREE_INIT (local_names, 8, "local_names");
2652
2653 name = DECL_NAME (decl);
2654
2655 nelts = VARRAY_ACTIVE_SIZE (local_names);
2656 for (i = 0; i < nelts; i++)
2657 {
2658 t = VARRAY_TREE (local_names, i);
2659 if (DECL_NAME (t) == name)
2660 {
2661 if (!DECL_LANG_SPECIFIC (decl))
2662 retrofit_lang_decl (decl);
e2500fed 2663 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
8e4ce833
JJ
2664 if (DECL_LANG_SPECIFIC (t))
2665 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
2666 else
2667 DECL_DISCRIMINATOR (decl) = 1;
2668
2669 VARRAY_TREE (local_names, i) = decl;
2670 return;
2671 }
2672 }
2673
2674 VARRAY_PUSH_TREE (local_names, decl);
2675}
2676
8d08fdba 2677/* Push a tag name NAME for struct/class/union/enum type TYPE.
6757edfe 2678 Normally put it into the inner-most non-tag-transparent scope,
8d08fdba 2679 but if GLOBALIZE is true, put it in the inner-most non-class scope.
e92cc029 2680 The latter is needed for implicit declarations. */
8d08fdba
MS
2681
2682void
2683pushtag (name, type, globalize)
2684 tree name, type;
2685 int globalize;
2686{
e2500fed 2687 register struct cp_binding_level *b;
8d08fdba 2688
8f032717 2689 b = current_binding_level;
8d08fdba 2690 while (b->tag_transparent
fcebb2dd
NS
2691 || (b->parm_flag == 2
2692 && (globalize
2693 /* We may be defining a new type in the initializer
2694 of a static member variable. We allow this when
2695 not pedantic, and it is particularly useful for
a1c65f9f 2696 type punning via an anonymous union. */
fcebb2dd 2697 || COMPLETE_TYPE_P (b->this_class))))
8d08fdba
MS
2698 b = b->level_chain;
2699
e1b3e07d 2700 b->tags = tree_cons (name, type, b->tags);
8d08fdba
MS
2701
2702 if (name)
2703 {
8d08fdba 2704 /* Do C++ gratuitous typedefing. */
db5ae43f 2705 if (IDENTIFIER_TYPE_VALUE (name) != type)
8d08fdba 2706 {
93cdc044 2707 register tree d = NULL_TREE;
848cf1e0 2708 int in_class = 0;
9188c363 2709 tree context = TYPE_CONTEXT (type);
280f9385 2710
280f9385
MM
2711 if (! context)
2712 {
2713 tree cs = current_scope ();
2714
2715 if (! globalize)
2716 context = cs;
2f939d94 2717 else if (cs != NULL_TREE && TYPE_P (cs))
280f9385
MM
2718 /* When declaring a friend class of a local class, we want
2719 to inject the newly named class into the scope
2720 containing the local class, not the namespace scope. */
4f1c5b7d 2721 context = decl_function_context (get_type_decl (cs));
280f9385 2722 }
280f9385
MM
2723 if (!context)
2724 context = current_namespace;
8d08fdba 2725
74b846e0 2726 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
93cdc044
JM
2727 || b->parm_flag == 2)
2728 in_class = 1;
93cdc044 2729
848cf1e0
MM
2730 if (current_lang_name == lang_name_java)
2731 TYPE_FOR_JAVA (type) = 1;
93cdc044 2732
9188c363 2733 d = create_implicit_typedef (name, type);
cb0dbb9a 2734 DECL_CONTEXT (d) = FROB_CONTEXT (context);
9188c363
MM
2735 if (! in_class)
2736 set_identifier_type_value_with_scope (name, type, b);
e1cd6e56 2737
39c01e4c
MM
2738 d = maybe_process_template_type_declaration (type,
2739 globalize, b);
93cdc044
JM
2740
2741 if (b->parm_flag == 2)
61a127b3 2742 {
848cf1e0 2743 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
61a127b3
MM
2744 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2745 class. But if it's a member template class, we
2746 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2747 is done later. */
2748 finish_member_declaration (d);
8f032717
MM
2749 else
2750 pushdecl_class_level (d);
61a127b3 2751 }
93cdc044
JM
2752 else
2753 d = pushdecl_with_scope (d, b);
2754
1951a1b6 2755 /* FIXME what if it gets a name from typedef? */
848cf1e0
MM
2756 if (ANON_AGGRNAME_P (name))
2757 DECL_IGNORED_P (d) = 1;
2758
2759 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
1f6e1acc
AS
2760
2761 /* If this is a local class, keep track of it. We need this
2762 information for name-mangling, and so that it is possible to find
2763 all function definitions in a translation unit in a convenient
2764 way. (It's otherwise tricky to find a member function definition
2765 it's only pointed to from within a local class.) */
5362b086 2766 if (TYPE_CONTEXT (type)
089acd57
MM
2767 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL
2768 && !processing_template_decl)
1f6e1acc 2769 VARRAY_PUSH_TREE (local_classes, type);
8d08fdba
MS
2770 }
2771 if (b->parm_flag == 2)
2772 {
d0f062fb 2773 if (!COMPLETE_TYPE_P (current_class_type))
7088fca9
KL
2774 {
2775 maybe_add_class_template_decl_list (current_class_type,
2776 type, /*friend_p=*/0);
2777 CLASSTYPE_TAGS (current_class_type) = b->tags;
2778 }
8d08fdba
MS
2779 }
2780 }
2781
2782 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2783 /* Use the canonical TYPE_DECL for this node. */
2784 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2785 else
2786 {
2787 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2788 will be the tagged type we just added to the current
2789 binding level. This fake NULL-named TYPE_DECL node helps
2790 dwarfout.c to know when it needs to output a
2791 representation of a tagged type, and it also gives us a
2792 convenient place to record the "scope start" address for
2793 the tagged type. */
2794
8d08fdba 2795 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
2796 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2797 }
2798}
2799
2800/* Counter used to create anonymous type names. */
e92cc029 2801
8d08fdba
MS
2802static int anon_cnt = 0;
2803
2804/* Return an IDENTIFIER which can be used as a name for
2805 anonymous structs and unions. */
e92cc029 2806
8d08fdba
MS
2807tree
2808make_anon_name ()
2809{
2810 char buf[32];
2811
2812 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2813 return get_identifier (buf);
2814}
2815
2816/* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2817 This keeps dbxout from getting confused. */
e92cc029 2818
8d08fdba
MS
2819void
2820clear_anon_tags ()
2821{
e2500fed 2822 register struct cp_binding_level *b;
8d08fdba
MS
2823 register tree tags;
2824 static int last_cnt = 0;
2825
2826 /* Fast out if no new anon names were declared. */
2827 if (last_cnt == anon_cnt)
2828 return;
2829
2830 b = current_binding_level;
2831 while (b->tag_transparent)
2832 b = b->level_chain;
2833 tags = b->tags;
2834 while (tags)
2835 {
2836 /* A NULL purpose means we have already processed all tags
2837 from here to the end of the list. */
2838 if (TREE_PURPOSE (tags) == NULL_TREE)
2839 break;
2840 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2841 TREE_PURPOSE (tags) = NULL_TREE;
2842 tags = TREE_CHAIN (tags);
2843 }
2844 last_cnt = anon_cnt;
2845}
2846\f
2847/* Subroutine of duplicate_decls: return truthvalue of whether
2848 or not types of these decls match.
2849
2850 For C++, we must compare the parameter list so that `int' can match
2851 `int&' in a parameter position, but `int&' is not confused with
2852 `const int&'. */
e92cc029 2853
6060a796 2854int
8d08fdba
MS
2855decls_match (newdecl, olddecl)
2856 tree newdecl, olddecl;
2857{
2858 int types_match;
2859
347d73d7
ML
2860 if (newdecl == olddecl)
2861 return 1;
2862
6b4b3deb
MM
2863 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2864 /* If the two DECLs are not even the same kind of thing, we're not
2865 interested in their types. */
2866 return 0;
2867
2868 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
2869 {
2870 tree f1 = TREE_TYPE (newdecl);
2871 tree f2 = TREE_TYPE (olddecl);
2872 tree p1 = TYPE_ARG_TYPES (f1);
2873 tree p2 = TYPE_ARG_TYPES (f2);
2874
4f1c5b7d 2875 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
2876 && ! (DECL_EXTERN_C_P (newdecl)
2877 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
2878 return 0;
2879
8d08fdba 2880 if (TREE_CODE (f1) != TREE_CODE (f2))
e867a179 2881 return 0;
8d08fdba 2882
3bfdc719 2883 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 2884 {
8b27e9ef
NS
2885 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
2886 && (DECL_BUILT_IN (olddecl)
2887#ifndef NO_IMPLICIT_EXTERN_C
2888 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
2889 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
2890#endif
2891 ))
a28e3c7f
MS
2892 {
2893 types_match = self_promoting_args_p (p1);
2894 if (p1 == void_list_node)
2895 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2896 }
8b27e9ef
NS
2897#ifndef NO_IMPLICIT_EXTERN_C
2898 else if (p1 == NULL_TREE
2899 && (DECL_EXTERN_C_P (olddecl)
2900 && DECL_IN_SYSTEM_HEADER (olddecl)
2901 && !DECL_CLASS_SCOPE_P (olddecl))
2902 && (DECL_EXTERN_C_P (newdecl)
2903 && DECL_IN_SYSTEM_HEADER (newdecl)
2904 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
2905 {
2906 types_match = self_promoting_args_p (p2);
2907 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2908 }
8b27e9ef 2909#endif
8926095f 2910 else
91063b51 2911 types_match = compparms (p1, p2);
8926095f 2912 }
8d08fdba
MS
2913 else
2914 types_match = 0;
2915 }
6b4b3deb 2916 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 2917 {
f84b4be9
JM
2918 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2919 DECL_TEMPLATE_PARMS (olddecl)))
2920 return 0;
68642fb6 2921
2bb5d995
JM
2922 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
2923 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
2924 return 0;
2925
f84b4be9
JM
2926 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2927 types_match = 1;
2928 else
2929 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2930 DECL_TEMPLATE_RESULT (newdecl));
51c184be 2931 }
8d08fdba
MS
2932 else
2933 {
2934 if (TREE_TYPE (newdecl) == error_mark_node)
2935 types_match = TREE_TYPE (olddecl) == error_mark_node;
2936 else if (TREE_TYPE (olddecl) == NULL_TREE)
2937 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
2938 else if (TREE_TYPE (newdecl) == NULL_TREE)
2939 types_match = 0;
8d08fdba 2940 else
01240200 2941 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
2942 TREE_TYPE (olddecl),
2943 COMPARE_REDECLARATION);
8d08fdba
MS
2944 }
2945
2946 return types_match;
2947}
2948
2949/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 2950 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
2951
2952 Note that this does not apply to the C++ case of declaring
2953 a variable `extern const' and then later `const'.
2954
8d08fdba
MS
2955 Don't complain about built-in functions, since they are beyond
2956 the user's control. */
2957
2958static void
2959warn_extern_redeclared_static (newdecl, olddecl)
2960 tree newdecl, olddecl;
2961{
83182544 2962 static const char *const explicit_extern_static_warning
8251199e 2963 = "`%D' was declared `extern' and later `static'";
83182544 2964 static const char *const implicit_extern_static_warning
8251199e
JM
2965 = "`%D' was declared implicitly `extern' and later `static'";
2966
24f30ed4
MM
2967 tree name;
2968
68642fb6 2969 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee
JM
2970 || TREE_CODE (newdecl) == TEMPLATE_DECL
2971 || TREE_CODE (newdecl) == CONST_DECL)
8d08fdba 2972 return;
68642fb6 2973
963d5758
MM
2974 /* Don't get confused by static member functions; that's a different
2975 use of `static'. */
2976 if (TREE_CODE (newdecl) == FUNCTION_DECL
2977 && DECL_STATIC_FUNCTION_P (newdecl))
2978 return;
8d08fdba 2979
24f30ed4
MM
2980 /* If the old declaration was `static', or the new one isn't, then
2981 then everything is OK. */
2982 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
2983 return;
2984
2985 /* It's OK to declare a builtin function as `static'. */
2986 if (TREE_CODE (olddecl) == FUNCTION_DECL
2987 && DECL_ARTIFICIAL (olddecl))
2988 return;
2989
8d08fdba 2990 name = DECL_ASSEMBLER_NAME (newdecl);
33bd39a2 2991 pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
24f30ed4
MM
2992 ? implicit_extern_static_warning
2993 : explicit_extern_static_warning, newdecl);
2994 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
2995}
2996
2997/* Handle when a new declaration NEWDECL has the same name as an old
2998 one OLDDECL in the same binding contour. Prints an error message
2999 if appropriate.
3000
3001 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3002 Otherwise, return 0. */
3003
51c184be 3004int
8d08fdba 3005duplicate_decls (newdecl, olddecl)
824b9a4c 3006 tree newdecl, olddecl;
8d08fdba 3007{
8d08fdba
MS
3008 unsigned olddecl_uid = DECL_UID (olddecl);
3009 int olddecl_friend = 0, types_match = 0;
0b60dfe3 3010 int new_defines_function = 0;
5566b478
MS
3011
3012 if (newdecl == olddecl)
3013 return 1;
8d08fdba 3014
8926095f 3015 types_match = decls_match (newdecl, olddecl);
8d08fdba 3016
8d08fdba
MS
3017 /* If either the type of the new decl or the type of the old decl is an
3018 error_mark_node, then that implies that we have already issued an
3019 error (earlier) for some bogus type specification, and in that case,
3020 it is rather pointless to harass the user with yet more error message
0b60dfe3 3021 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
3022 if (TREE_TYPE (newdecl) == error_mark_node
3023 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba 3024 types_match = 1;
68642fb6 3025
97055d5c
AO
3026 if (DECL_P (olddecl)
3027 && TREE_CODE (newdecl) == FUNCTION_DECL
3028 && TREE_CODE (olddecl) == FUNCTION_DECL
3029 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
3030 {
3031 if (DECL_DECLARED_INLINE_P (newdecl)
3032 && DECL_UNINLINABLE (newdecl)
3033 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
3034 /* Already warned elsewhere. */;
3035 else if (DECL_DECLARED_INLINE_P (olddecl)
3036 && DECL_UNINLINABLE (olddecl)
3037 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
3038 /* Already warned. */;
3039 else if (DECL_DECLARED_INLINE_P (newdecl)
3040 && DECL_UNINLINABLE (olddecl)
3041 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
3042 {
3043 warning_with_decl (newdecl,
3044 "function `%s' redeclared as inline");
3045 warning_with_decl (olddecl,
3046 "previous declaration of function `%s' with attribute noinline");
3047 }
3048 else if (DECL_DECLARED_INLINE_P (olddecl)
3049 && DECL_UNINLINABLE (newdecl)
3050 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
3051 {
3052 warning_with_decl (newdecl,
3053 "function `%s' redeclared with attribute noinline");
3054 warning_with_decl (olddecl,
3055 "previous declaration of function `%s' was inline");
3056 }
3057 }
3058
a1c65f9f 3059 /* Check for redeclaration and other discrepancies. */
d22c8596 3060 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
3061 && DECL_ARTIFICIAL (olddecl))
3062 {
3063 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3064 {
d52e4867
RS
3065 /* Avoid warnings redeclaring anticipated built-ins. */
3066 if (DECL_ANTICIPATED (olddecl))
3067 return 0;
3068
9f33663b
JM
3069 /* If you declare a built-in or predefined function name as static,
3070 the old definition is overridden, but optionally warn this was a
3071 bad choice of name. */
3072 if (! TREE_PUBLIC (newdecl))
3073 {
3074 if (warn_shadow)
33bd39a2 3075 warning ("shadowing %s function `%#D'",
9f33663b
JM
3076 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3077 olddecl);
3078 /* Discard the old built-in function. */
3079 return 0;
3080 }
3081 /* If the built-in is not ansi, then programs can override
3082 it even globally without an error. */
3083 else if (! DECL_BUILT_IN (olddecl))
33bd39a2 3084 warning ("library function `%#D' redeclared as non-function `%#D'",
9f33663b
JM
3085 olddecl, newdecl);
3086 else
3087 {
33bd39a2
ZW
3088 error ("declaration of `%#D'", newdecl);
3089 error ("conflicts with built-in declaration `%#D'",
a4443a08 3090 olddecl);
9f33663b 3091 }
a4443a08
MS
3092 return 0;
3093 }
9f33663b 3094 else if (!types_match)
8d08fdba 3095 {
d52e4867
RS
3096 /* Avoid warnings redeclaring anticipated built-ins. */
3097 if (DECL_ANTICIPATED (olddecl))
3098 ; /* Do nothing yet. */
3099 else if ((DECL_EXTERN_C_P (newdecl)
eb68cb58 3100 && DECL_EXTERN_C_P (olddecl))
9f33663b
JM
3101 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3102 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 3103 {
9f33663b
JM
3104 /* A near match; override the builtin. */
3105
3106 if (TREE_PUBLIC (newdecl))
a4443a08 3107 {
33bd39a2
ZW
3108 warning ("new declaration `%#D'", newdecl);
3109 warning ("ambiguates built-in declaration `%#D'",
9f33663b 3110 olddecl);
a4443a08 3111 }
9f33663b 3112 else if (warn_shadow)
33bd39a2 3113 warning ("shadowing %s function `%#D'",
9f33663b
JM
3114 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3115 olddecl);
a4443a08 3116 }
9f33663b
JM
3117 else
3118 /* Discard the old built-in function. */
3119 return 0;
04a9d080
RS
3120
3121 /* Replace the old RTL to avoid problems with inlining. */
3122 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
8d08fdba 3123 }
68642fb6 3124
24f30ed4
MM
3125 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3126 {
3127 /* If a builtin function is redeclared as `static', merge
3128 the declarations, but make the original one static. */
3129 DECL_THIS_STATIC (olddecl) = 1;
3130 TREE_PUBLIC (olddecl) = 0;
9bfadf57 3131
421844e7
MM
3132 /* Make the old declaration consistent with the new one so
3133 that all remnants of the builtin-ness of this function
3134 will be banished. */
5d2ed28c 3135 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
19e7881c 3136 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
24f30ed4 3137 }
39211cd5
MS
3138 }
3139 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3140 {
9ed182dc
JM
3141 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3142 && TREE_CODE (newdecl) != TYPE_DECL
3143 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3144 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3145 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3146 && TREE_CODE (olddecl) != TYPE_DECL
3147 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3148 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3149 == TYPE_DECL))))
3150 {
3151 /* We do nothing special here, because C++ does such nasty
3152 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3153 get shadowed, and know that if we need to find a TYPE_DECL
3154 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3155 slot of the identifier. */
3156 return 0;
3157 }
3158
39211cd5 3159 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 3160 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 3161 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 3162 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
39211cd5 3163 return 0;
9ed182dc 3164
33bd39a2 3165 error ("`%#D' redeclared as different kind of symbol", newdecl);
39211cd5
MS
3166 if (TREE_CODE (olddecl) == TREE_LIST)
3167 olddecl = TREE_VALUE (olddecl);
8251199e 3168 cp_error_at ("previous declaration of `%#D'", olddecl);
39211cd5
MS
3169
3170 /* New decl is completely inconsistent with the old one =>
3171 tell caller to replace the old one. */
3172
3173 return 0;
8d08fdba 3174 }
8d08fdba
MS
3175 else if (!types_match)
3176 {
4f1c5b7d 3177 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
3178 /* These are certainly not duplicate declarations; they're
3179 from different scopes. */
3180 return 0;
3181
8926095f 3182 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
3183 {
3184 /* The name of a class template may not be declared to refer to
3185 any other template, class, function, object, namespace, value,
e92cc029 3186 or type in the same scope. */
5566b478
MS
3187 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3188 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 3189 {
33bd39a2 3190 error ("declaration of template `%#D'", newdecl);
8251199e 3191 cp_error_at ("conflicts with previous declaration `%#D'",
f0e01782
MS
3192 olddecl);
3193 }
ec255269
MS
3194 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3195 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3196 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 3197 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646 3198 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
b9201622
NS
3199 DECL_TEMPLATE_PARMS (olddecl))
3200 /* Template functions can be disambiguated by
3201 return type. */
3202 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
3203 TREE_TYPE (TREE_TYPE (olddecl))))
ec255269 3204 {
33bd39a2 3205 error ("new declaration `%#D'", newdecl);
8251199e 3206 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
ec255269 3207 }
f0e01782
MS
3208 return 0;
3209 }
8926095f
MS
3210 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3211 {
eb68cb58 3212 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 3213 {
33bd39a2 3214 error ("declaration of C function `%#D' conflicts with",
8926095f 3215 newdecl);
8251199e 3216 cp_error_at ("previous declaration `%#D' here", olddecl);
8926095f 3217 }
00595019 3218 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 3219 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 3220 {
33bd39a2 3221 error ("new declaration `%#D'", newdecl);
8251199e 3222 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
700f8a87
MS
3223 }
3224 else
3225 return 0;
8926095f 3226 }
8d08fdba
MS
3227
3228 /* Already complained about this, so don't do so again. */
a4443a08 3229 else if (current_class_type == NULL_TREE
8d08fdba
MS
3230 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3231 {
33bd39a2 3232 error ("conflicting types for `%#D'", newdecl);
8251199e 3233 cp_error_at ("previous declaration as `%#D'", olddecl);
8d08fdba
MS
3234 }
3235 }
68642fb6 3236 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
3237 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3238 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 3239 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
3240 != DECL_TI_TEMPLATE (olddecl))))
3241 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3242 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 3243 || (DECL_TI_TEMPLATE (olddecl)
75650646 3244 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
3245 /* It's OK to have a template specialization and a non-template
3246 with the same type, or to have specializations of two
75650646
MM
3247 different templates with the same type. Note that if one is a
3248 specialization, and the other is an instantiation of the same
3249 template, that we do not exit at this point. That situation
3250 can occur if we instantiate a template class, and then
0e339752 3251 specialize one of its methods. This situation is valid, but
75650646
MM
3252 the declarations must be merged in the usual way. */
3253 return 0;
68642fb6
UD
3254 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3255 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
3256 && !DECL_USE_TEMPLATE (newdecl))
3257 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3258 && !DECL_USE_TEMPLATE (olddecl))))
3259 /* One of the declarations is a template instantiation, and the
3260 other is not a template at all. That's OK. */
386b8a85 3261 return 0;
85c6cbaf
ML
3262 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3263 && DECL_NAMESPACE_ALIAS (newdecl)
3264 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
a1c65f9f 3265 /* Redeclaration of namespace alias, ignore it. */
85c6cbaf 3266 return 1;
8d08fdba
MS
3267 else
3268 {
d8e178a0 3269 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 3270 if (errmsg)
8d08fdba 3271 {
33bd39a2 3272 error (errmsg, newdecl);
8d08fdba
MS
3273 if (DECL_NAME (olddecl) != NULL_TREE)
3274 cp_error_at ((DECL_INITIAL (olddecl)
2c73f9f5 3275 && namespace_bindings_p ())
8251199e
JM
3276 ? "`%#D' previously defined here"
3277 : "`%#D' previously declared here", olddecl);
00fae85d 3278 return 0;
8d08fdba
MS
3279 }
3280 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3281 && DECL_INITIAL (olddecl) != NULL_TREE
3282 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3283 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3284 {
3285 /* Prototype decl follows defn w/o prototype. */
8251199e
JM
3286 cp_warning_at ("prototype for `%#D'", newdecl);
3287 cp_warning_at ("follows non-prototype definition here", olddecl);
8d08fdba
MS
3288 }
3289 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3290 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f
MS
3291 {
3292 /* extern "C" int foo ();
3293 int foo () { bar (); }
3294 is OK. */
46ccf50a 3295 if (current_lang_depth () == 0)
5d2ed28c 3296 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
8926095f
MS
3297 else
3298 {
8251199e 3299 cp_error_at ("previous declaration of `%#D' with %L linkage",
8926095f 3300 olddecl, DECL_LANGUAGE (olddecl));
33bd39a2 3301 error ("conflicts with new declaration with %L linkage",
8926095f
MS
3302 DECL_LANGUAGE (newdecl));
3303 }
3304 }
e1cd6e56 3305
a6f02587 3306 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
3307 ;
3308 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
3309 {
3310 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3311 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3312 int i = 1;
3313
3314 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3315 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 3316
e1cd6e56
MS
3317 for (; t1 && t1 != void_list_node;
3318 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3319 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3320 {
2507f3b5
RK
3321 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3322 TREE_PURPOSE (t2)))
e1cd6e56 3323 {
624a5800
CR
3324 pedwarn ("default argument given for parameter %d of `%#D'",
3325 i, newdecl);
3326 cp_pedwarn_at ("after previous specification in `%#D'",
3327 olddecl);
e1cd6e56
MS
3328 }
3329 else
3330 {
33bd39a2 3331 error ("default argument given for parameter %d of `%#D'",
e1cd6e56 3332 i, newdecl);
8251199e 3333 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
3334 olddecl);
3335 }
3336 }
a5894242 3337
79065db2
MM
3338 if (DECL_DECLARED_INLINE_P (newdecl)
3339 && ! DECL_DECLARED_INLINE_P (olddecl)
7fcdf4c2 3340 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 3341 {
33bd39a2 3342 warning ("`%#D' was used before it was declared inline",
7fcdf4c2 3343 newdecl);
8251199e 3344 cp_warning_at ("previous non-inline declaration here",
7fcdf4c2 3345 olddecl);
dff6b454 3346 }
e1cd6e56 3347 }
8d08fdba
MS
3348 }
3349
4782bd5b
RS
3350 /* Do not merge an implicit typedef with an explicit one. In:
3351
3352 class A;
3353 ...
3354 typedef class A A __attribute__ ((foo));
3355
3356 the attribute should apply only to the typedef. */
3357 if (TREE_CODE (olddecl) == TYPE_DECL
3358 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
3359 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
3360 return 0;
3361
8d08fdba
MS
3362 /* If new decl is `static' and an `extern' was seen previously,
3363 warn about it. */
3364 warn_extern_redeclared_static (newdecl, olddecl);
3365
e92cc029 3366 /* We have committed to returning 1 at this point. */
8d08fdba
MS
3367 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3368 {
3369 /* Now that functions must hold information normally held
3370 by field decls, there is extra work to do so that
3371 declaration information does not get destroyed during
3372 definition. */
3373 if (DECL_VINDEX (olddecl))
3374 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3375 if (DECL_CONTEXT (olddecl))
3376 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
e1cd6e56
MS
3377 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3378 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 3379 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 3380 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
4a67c9e9 3381 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
963d5758 3382 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
3383 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
3384 SET_OVERLOADED_OPERATOR_CODE
3385 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 3386 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 3387
0b60dfe3
BK
3388 /* Optionally warn about more than one declaration for the same
3389 name, but don't warn about a function declaration followed by a
3390 definition. */
3391 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3392 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
a1c65f9f 3393 /* Don't warn about extern decl followed by definition. */
0b60dfe3 3394 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
a1c65f9f 3395 /* Don't warn about friends, let add_friend take care of it. */
3581fae0 3396 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
0b60dfe3 3397 {
33bd39a2 3398 warning ("redundant redeclaration of `%D' in same scope", newdecl);
8251199e 3399 cp_warning_at ("previous declaration of `%D'", olddecl);
0b60dfe3 3400 }
8d08fdba
MS
3401 }
3402
3403 /* Deal with C++: must preserve virtual function table size. */
3404 if (TREE_CODE (olddecl) == TYPE_DECL)
3405 {
3406 register tree newtype = TREE_TYPE (newdecl);
3407 register tree oldtype = TREE_TYPE (olddecl);
3408
3409 if (newtype != error_mark_node && oldtype != error_mark_node
3410 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
e93ee644
MM
3411 CLASSTYPE_FRIEND_CLASSES (newtype)
3412 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3413\
970d6386 3414 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
3415 }
3416
8d08fdba
MS
3417 /* Copy all the DECL_... slots specified in the new decl
3418 except for any that we copy here from the old type. */
91d231cb 3419 DECL_ATTRIBUTES (newdecl)
f6897b10 3420 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
8d08fdba 3421
5566b478
MS
3422 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3423 {
4d85e00e 3424 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
68642fb6 3425 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
3426 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3427 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 3428
daa8df65
MM
3429 /* If the new declaration is a definition, update the file and
3430 line information on the declaration. */
06d5e633
NS
3431 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
3432 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
daa8df65 3433 {
3e72ec9a
GDR
3434 DECL_SOURCE_LOCATION (olddecl)
3435 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
3436 = DECL_SOURCE_LOCATION (newdecl);
daa8df65
MM
3437 }
3438
5566b478
MS
3439 return 1;
3440 }
68642fb6 3441
8d08fdba
MS
3442 if (types_match)
3443 {
3444 /* Automatically handles default parameters. */
3445 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 3446 tree newtype;
8d08fdba 3447
e1cd6e56 3448 /* Merge the data types specified in the two decls. */
6da794e8 3449 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
e1cd6e56 3450
6da794e8 3451 /* If merge_types produces a non-typedef type, just use the old type. */
9076e292
JM
3452 if (TREE_CODE (newdecl) == TYPE_DECL
3453 && newtype == DECL_ORIGINAL_TYPE (newdecl))
3454 newtype = oldtype;
3455
8d08fdba 3456 if (TREE_CODE (newdecl) == VAR_DECL)
17bbb839
MM
3457 {
3458 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3459 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
3460 }
3461
6da794e8 3462 /* Do this after calling `merge_types' so that default
8d08fdba
MS
3463 parameters don't confuse us. */
3464 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3465 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3466 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3467 {
f30432d7 3468 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 3469 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 3470 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
3471 TYPE_RAISES_EXCEPTIONS (oldtype));
3472
9a224b4a
JM
3473 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3474 && DECL_SOURCE_LINE (olddecl) != 0
da20811c 3475 && flag_exceptions
4cc1d462
NS
3476 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3477 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
8d08fdba 3478 {
33bd39a2 3479 error ("declaration of `%F' throws different exceptions",
a28e3c7f 3480 newdecl);
a09ba2e0 3481 cp_error_at ("than previous declaration `%F'", olddecl);
8d08fdba
MS
3482 }
3483 }
3484 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3485
3486 /* Lay the type out, unless already done. */
407f03b8 3487 if (! same_type_p (newtype, oldtype)
5566b478 3488 && TREE_TYPE (newdecl) != error_mark_node
5156628f 3489 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
3490 layout_type (TREE_TYPE (newdecl));
3491
5566b478
MS
3492 if ((TREE_CODE (newdecl) == VAR_DECL
3493 || TREE_CODE (newdecl) == PARM_DECL
3494 || TREE_CODE (newdecl) == RESULT_DECL
3495 || TREE_CODE (newdecl) == FIELD_DECL
3496 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 3497 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 3498 layout_decl (newdecl, 0);
8d08fdba
MS
3499
3500 /* Merge the type qualifiers. */
3501 if (TREE_READONLY (newdecl))
3502 TREE_READONLY (olddecl) = 1;
3503 if (TREE_THIS_VOLATILE (newdecl))
3504 TREE_THIS_VOLATILE (olddecl) = 1;
3505
3506 /* Merge the initialization information. */
8926095f
MS
3507 if (DECL_INITIAL (newdecl) == NULL_TREE
3508 && DECL_INITIAL (olddecl) != NULL_TREE)
3509 {
3510 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3e72ec9a 3511 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
b0d06515
MM
3512 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3513 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e
MM
3514 && DECL_LANG_SPECIFIC (olddecl))
3515 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
8926095f 3516 }
39211cd5
MS
3517
3518 /* Merge the section attribute.
3519 We want to issue an error if the sections conflict but that must be
3520 done later in decl_attributes since we are called before attributes
3521 are assigned. */
3522 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3523 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3524
a157febd
GK
3525 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3526 {
3527 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3528 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
a157febd
GK
3529 DECL_NO_LIMIT_STACK (newdecl)
3530 |= DECL_NO_LIMIT_STACK (olddecl);
c740732f
MM
3531 /* Keep the old RTL. */
3532 COPY_DECL_RTL (olddecl, newdecl);
3533 }
3534 else if (TREE_CODE (newdecl) == VAR_DECL
3535 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
3536 {
3537 /* Keep the old RTL. We cannot keep the old RTL if the old
3538 declaration was for an incomplete object and the new
3539 declaration is not since many attributes of the RTL will
3540 change. */
3541 COPY_DECL_RTL (olddecl, newdecl);
a157febd 3542 }
8d08fdba
MS
3543 }
3544 /* If cannot merge, then use the new type and qualifiers,
3545 and don't preserve the old rtl. */
3546 else
3547 {
3548 /* Clean out any memory we had of the old declaration. */
3549 tree oldstatic = value_member (olddecl, static_aggregates);
3550 if (oldstatic)
3551 TREE_VALUE (oldstatic) = error_mark_node;
3552
3553 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3554 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3555 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3556 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3557 }
3558
3559 /* Merge the storage class information. */
45806a3f
FS
3560 merge_weak (newdecl, olddecl);
3561
e92cc029 3562 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 3563 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
3564 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3565 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3566 if (! DECL_EXTERNAL (olddecl))
3567 DECL_EXTERNAL (newdecl) = 0;
68642fb6 3568
0b60dfe3 3569 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 3570 {
a9aedbc2
MS
3571 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3572 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 3573 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
68642fb6 3574 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 3575 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
0b60dfe3
BK
3576 /* Don't really know how much of the language-specific
3577 values we should copy from old to new. */
3578 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
e2500fed
GK
3579 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
3580 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
0b60dfe3 3581 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
fbf1c34b 3582 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3febd123
NS
3583 DECL_INITIALIZED_IN_CLASS_P (newdecl)
3584 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
0b60dfe3 3585 olddecl_friend = DECL_FRIEND_P (olddecl);
6a629cac
MM
3586
3587 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3588 if (TREE_CODE (newdecl) == FUNCTION_DECL
3589 || DECL_FUNCTION_TEMPLATE_P (newdecl))
bb5e8a7f
MM
3590 {
3591 DECL_BEFRIENDING_CLASSES (newdecl)
3592 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3593 DECL_BEFRIENDING_CLASSES (olddecl));
3594 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
3595 }
8d08fdba
MS
3596 }
3597
8d08fdba
MS
3598 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3599 {
68642fb6
UD
3600 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3601 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
3602 {
3603 /* If newdecl is not a specialization, then it is not a
3604 template-related function at all. And that means that we
3605 shoud have exited above, returning 0. */
3606 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3607 0);
3608
68642fb6 3609 if (TREE_USED (olddecl))
75650646 3610 /* From [temp.expl.spec]:
68642fb6 3611
75650646
MM
3612 If a template, a member template or the member of a class
3613 template is explicitly specialized then that
3614 specialization shall be declared before the first use of
3615 that specialization that would cause an implicit
3616 instantiation to take place, in every translation unit in
3617 which such a use occurs. */
33bd39a2 3618 error ("explicit specialization of %D after first use",
75650646
MM
3619 olddecl);
3620
3621 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
d03d18e8
KL
3622
3623 /* [temp.expl.spec/14] We don't inline explicit specialization
3624 just because the primary template says so. */
75650646 3625 }
d03d18e8
KL
3626 else
3627 {
3628 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
3629 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
faae18ab 3630
d03d18e8 3631 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab 3632
d03d18e8
KL
3633 /* If either decl says `inline', this fn is inline, unless
3634 its definition was passed already. */
3635 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3636 DECL_INLINE (olddecl) = 1;
3637 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3638
3639 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
3640 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
3641 }
97055d5c 3642
5daf7c0a
JM
3643 /* Preserve abstractness on cloned [cd]tors. */
3644 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
3645
700f8a87
MS
3646 if (! types_match)
3647 {
5d2ed28c 3648 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 3649 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
19e7881c 3650 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
5566b478
MS
3651 }
3652 if (! types_match || new_defines_function)
3653 {
6f1b4c42
JM
3654 /* These need to be copied so that the names are available.
3655 Note that if the types do match, we'll preserve inline
3656 info and other bits, but if not, we won't. */
700f8a87
MS
3657 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3658 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 3659 }
8d08fdba
MS
3660 if (new_defines_function)
3661 /* If defining a function declared with other language
3662 linkage, use the previously declared language linkage. */
5d2ed28c 3663 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 3664 else if (types_match)
8d08fdba
MS
3665 {
3666 /* If redeclaring a builtin function, and not a definition,
3667 it stays built in. */
3668 if (DECL_BUILT_IN (olddecl))
3669 {
26db82d8 3670 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 3671 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
3672 /* If we're keeping the built-in definition, keep the rtl,
3673 regardless of declaration matches. */
19e7881c 3674 SET_DECL_RTL (newdecl, DECL_RTL (olddecl));
8d08fdba
MS
3675 }
3676 else
b850de4f 3677 DECL_NUM_STMTS (newdecl) = DECL_NUM_STMTS (olddecl);
8d08fdba
MS
3678
3679 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8d08fdba
MS
3680 /* Don't clear out the arguments if we're redefining a function. */
3681 if (DECL_ARGUMENTS (olddecl))
3682 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3683 }
3684 }
0b1161fc
MM
3685 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3686 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
a9aedbc2 3687
8d08fdba
MS
3688 /* Now preserve various other info from the definition. */
3689 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3690 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3691 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 3692 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 3693
8d08fdba
MS
3694 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3695 {
3696 int function_size;
8d08fdba
MS
3697
3698 function_size = sizeof (struct tree_decl);
3699
730e1556
KG
3700 memcpy ((char *) olddecl + sizeof (struct tree_common),
3701 (char *) newdecl + sizeof (struct tree_common),
3702 function_size - sizeof (struct tree_common));
8d08fdba 3703
75650646
MM
3704 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3705 {
3706 /* If newdecl is a template instantiation, it is possible that
3707 the following sequence of events has occurred:
3708
3709 o A friend function was declared in a class template. The
68642fb6 3710 class template was instantiated.
75650646 3711
68642fb6
UD
3712 o The instantiation of the friend declaration was
3713 recorded on the instantiation list, and is newdecl.
75650646
MM
3714
3715 o Later, however, instantiate_class_template called pushdecl
3716 on the newdecl to perform name injection. But, pushdecl in
3717 turn called duplicate_decls when it discovered that another
3718 declaration of a global function with the same name already
68642fb6 3719 existed.
75650646
MM
3720
3721 o Here, in duplicate_decls, we decided to clobber newdecl.
3722
3723 If we're going to do that, we'd better make sure that
3724 olddecl, and not newdecl, is on the list of
3725 instantiations so that if we try to do the instantiation
3726 again we won't get the clobbered declaration. */
3727
68642fb6
UD
3728 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3729 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
75650646
MM
3730
3731 for (; decls; decls = TREE_CHAIN (decls))
3732 if (TREE_VALUE (decls) == newdecl)
3733 TREE_VALUE (decls) = olddecl;
3734 }
8d08fdba
MS
3735 }
3736 else
3737 {
730e1556
KG
3738 memcpy ((char *) olddecl + sizeof (struct tree_common),
3739 (char *) newdecl + sizeof (struct tree_common),
3740 sizeof (struct tree_decl) - sizeof (struct tree_common)
2f9834e8 3741 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
8d08fdba
MS
3742 }
3743
3744 DECL_UID (olddecl) = olddecl_uid;
3745 if (olddecl_friend)
3746 DECL_FRIEND_P (olddecl) = 1;
3747
d9525bec
BK
3748 /* NEWDECL contains the merged attribute lists.
3749 Update OLDDECL to be the same. */
91d231cb 3750 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
d9525bec 3751
8d08fdba
MS
3752 return 1;
3753}
3754
3755/* Record a decl-node X as belonging to the current lexical scope.
3756 Check for errors (such as an incompatible declaration for the same
3757 name already seen in the same scope).
3758
3759 Returns either X or an old decl for the same name.
3760 If an old decl is returned, it may have been smashed
3761 to agree with what X says. */
3762
3763tree
3764pushdecl (x)
3765 tree x;
3766{
3767 register tree t;
b35d4555
MM
3768 register tree name;
3769 int need_new_binding;
3770
3771 /* We shouldn't be calling pushdecl when we're generating RTL for a
3772 function that we already did semantic analysis on previously. */
01d939e8 3773 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
b35d4555
MM
3774 19990913);
3775
b35d4555 3776 need_new_binding = 1;
8d08fdba 3777
50714e79
MM
3778 if (DECL_TEMPLATE_PARM_P (x))
3779 /* Template parameters have no context; they are not X::T even
3780 when declared within a class or namespace. */
3781 ;
3782 else
3783 {
3784 if (current_function_decl && x != current_function_decl
3785 /* A local declaration for a function doesn't constitute
3786 nesting. */
f39ee884
MM
3787 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3788 /* A local declaration for an `extern' variable is in the
94dfccd1 3789 scope of the current namespace, not the current
f39ee884
MM
3790 function. */
3791 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
50714e79
MM
3792 && !DECL_CONTEXT (x))
3793 DECL_CONTEXT (x) = current_function_decl;
cd9f6678
MM
3794
3795 /* If this is the declaration for a namespace-scope function,
3796 but the declaration itself is in a local scope, mark the
3797 declaration. */
68642fb6 3798 if (TREE_CODE (x) == FUNCTION_DECL
cd9f6678
MM
3799 && DECL_NAMESPACE_SCOPE_P (x)
3800 && current_function_decl
3801 && x != current_function_decl)
3802 DECL_LOCAL_FUNCTION_P (x) = 1;
50714e79 3803 }
8d08fdba 3804
fe8fadc1 3805 name = DECL_NAME (x);
8d08fdba
MS
3806 if (name)
3807 {
94dfccd1
JM
3808 int different_binding_level = 0;
3809
386b8a85
JM
3810 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3811 name = TREE_OPERAND (name, 0);
68642fb6 3812
94dfccd1
JM
3813 /* In case this decl was explicitly namespace-qualified, look it
3814 up in its namespace context. */
3815 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x)
3816 && namespace_bindings_p ())
2c73f9f5
ML
3817 t = namespace_binding (name, DECL_CONTEXT (x));
3818 else
3819 t = lookup_name_current_level (name);
fe8fadc1 3820
94dfccd1
JM
3821 /* [basic.link] If there is a visible declaration of an entity
3822 with linkage having the same name and type, ignoring entities
3823 declared outside the innermost enclosing namespace scope, the
3824 block scope declaration declares that same entity and
3825 receives the linkage of the previous declaration. */
3826 if (! t && current_function_decl && x != current_function_decl
3827 && (TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
3828 && DECL_EXTERNAL (x))
3829 {
3830 /* Look in block scope. */
3831 t = IDENTIFIER_VALUE (name);
3832 /* Or in the innermost namespace. */
3833 if (! t)
3834 t = namespace_binding (name, DECL_CONTEXT (x));
fab09a24
JM
3835 /* Does it have linkage? Note that if this isn't a DECL, it's an
3836 OVERLOAD, which is OK. */
3837 if (t && DECL_P (t) && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
94dfccd1
JM
3838 t = NULL_TREE;
3839 if (t)
3840 different_binding_level = 1;
3841 }
3842
fe8fadc1
MM
3843 /* If we are declaring a function, and the result of name-lookup
3844 was an OVERLOAD, look for an overloaded instance that is
3845 actually the same as the function we are declaring. (If
3846 there is one, we have to merge our declaration with the
3847 previous declaration.) */
655dc6ee 3848 if (t && TREE_CODE (t) == OVERLOAD)
fe8fadc1
MM
3849 {
3850 tree match;
3851
655dc6ee
JM
3852 if (TREE_CODE (x) == FUNCTION_DECL)
3853 for (match = t; match; match = OVL_NEXT (match))
3854 {
92643fea 3855 if (decls_match (OVL_CURRENT (match), x))
655dc6ee
JM
3856 break;
3857 }
3858 else
3859 /* Just choose one. */
3860 match = t;
fe8fadc1
MM
3861
3862 if (match)
3863 t = OVL_CURRENT (match);
3864 else
3865 t = NULL_TREE;
3866 }
3867
8d08fdba
MS
3868 if (t == error_mark_node)
3869 {
3870 /* error_mark_node is 0 for a while during initialization! */
3871 t = NULL_TREE;
8251199e 3872 cp_error_at ("`%#D' used prior to declaration", x);
8d08fdba 3873 }
51c184be 3874 else if (t != NULL_TREE)
8d08fdba 3875 {
94dfccd1
JM
3876 if (different_binding_level)
3877 {
3878 if (decls_match (x, t))
3879 /* The standard only says that the local extern
3880 inherits linkage from the previous decl; in
3881 particular, default args are not shared. It would
3882 be nice to propagate inlining info, though. FIXME. */
3883 TREE_PUBLIC (x) = TREE_PUBLIC (t);
3884 }
3885 else if (TREE_CODE (t) == PARM_DECL)
8d08fdba
MS
3886 {
3887 if (DECL_CONTEXT (t) == NULL_TREE)
400500c4
RK
3888 /* This is probaby caused by too many errors, but calling
3889 abort will say that if errors have occurred. */
3890 abort ();
be99da77 3891
e92cc029 3892 /* Check for duplicate params. */
be99da77
MS
3893 if (duplicate_decls (x, t))
3894 return t;
8d08fdba 3895 }
eb68cb58 3896 else if ((DECL_EXTERN_C_FUNCTION_P (x)
5566b478
MS
3897 || DECL_FUNCTION_TEMPLATE_P (x))
3898 && is_overloaded_fn (t))
a1c65f9f 3899 /* Don't do anything just yet. */;
e1cd6e56
MS
3900 else if (t == wchar_decl_node)
3901 {
3902 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
33bd39a2 3903 pedwarn ("redeclaration of `wchar_t' as `%T'",
2b0cbc5d 3904 TREE_TYPE (x));
e1cd6e56
MS
3905
3906 /* Throw away the redeclaration. */
3907 return t;
3908 }
8926095f 3909 else if (TREE_CODE (t) != TREE_CODE (x))
8d08fdba 3910 {
9ed182dc 3911 if (duplicate_decls (x, t))
51c184be 3912 return t;
8d08fdba
MS
3913 }
3914 else if (duplicate_decls (x, t))
51c184be 3915 {
7177d104
MS
3916 if (TREE_CODE (t) == TYPE_DECL)
3917 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
f30432d7
MS
3918 else if (TREE_CODE (t) == FUNCTION_DECL)
3919 check_default_args (t);
7177d104 3920
51c184be
MS
3921 return t;
3922 }
35680744
MM
3923 else if (DECL_MAIN_P (x))
3924 {
3925 /* A redeclaration of main, but not a duplicate of the
68642fb6 3926 previous one.
35680744
MM
3927
3928 [basic.start.main]
3929
3930 This function shall not be overloaded. */
8251199e 3931 cp_error_at ("invalid redeclaration of `%D'", t);
33bd39a2 3932 error ("as `%D'", x);
35680744
MM
3933 /* We don't try to push this declaration since that
3934 causes a crash. */
3935 return x;
3936 }
8d08fdba 3937 }
8926095f 3938
f3400fe2
JM
3939 check_template_shadow (x);
3940
fcfcdfc8
JM
3941 /* If this is a function conjured up by the backend, massage it
3942 so it looks friendly. */
eb68cb58 3943 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
fcfcdfc8
JM
3944 {
3945 retrofit_lang_decl (x);
5d2ed28c 3946 SET_DECL_LANGUAGE (x, lang_c);
fcfcdfc8
JM
3947 }
3948
eb68cb58 3949 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
8926095f 3950 {
7bdbfa05 3951 t = push_overloaded_decl (x, PUSH_LOCAL);
5fdaba89 3952 if (t != x)
8926095f 3953 return t;
f181d4ae
MM
3954 if (!namespace_bindings_p ())
3955 /* We do not need to create a binding for this name;
3956 push_overloaded_decl will have already done so if
3957 necessary. */
3958 need_new_binding = 0;
8926095f 3959 }
6eb3bb27 3960 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
cfe507be
MM
3961 {
3962 t = push_overloaded_decl (x, PUSH_GLOBAL);
3963 if (t == x)
3964 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3965 return t;
3966 }
8d08fdba 3967
a1774733
BK
3968 /* If declaring a type as a typedef, copy the type (unless we're
3969 at line 0), and install this TYPE_DECL as the new type's typedef
a1c65f9f 3970 name. See the extensive comment in ../c-decl.c (pushdecl). */
8d08fdba
MS
3971 if (TREE_CODE (x) == TYPE_DECL)
3972 {
3973 tree type = TREE_TYPE (x);
655dc6ee 3974 if (DECL_SOURCE_LINE (x) == 0)
a1774733
BK
3975 {
3976 if (TYPE_NAME (type) == 0)
3977 TYPE_NAME (type) = x;
3978 }
1c80fb65
MM
3979 else if (type != error_mark_node && TYPE_NAME (type) != x
3980 /* We don't want to copy the type when all we're
3981 doing is making a TYPE_DECL for the purposes of
3982 inlining. */
68642fb6 3983 && (!TYPE_NAME (type)
1c80fb65 3984 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
a1774733
BK
3985 {
3986 DECL_ORIGINAL_TYPE (x) = type;
3987 type = build_type_copy (type);
3988 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3989 TYPE_NAME (type) = x;
3990 TREE_TYPE (x) = type;
3991 }
8d08fdba 3992
8d08fdba
MS
3993 if (type != error_mark_node
3994 && TYPE_NAME (type)
3995 && TYPE_IDENTIFIER (type))
68642fb6 3996 set_identifier_type_value_with_scope (DECL_NAME (x), type,
f181d4ae
MM
3997 current_binding_level);
3998
8d08fdba
MS
3999 }
4000
4001 /* Multiple external decls of the same identifier ought to match.
4002
4003 We get warnings about inline functions where they are defined.
39211cd5 4004 We get warnings about other functions from push_overloaded_decl.
68642fb6 4005
8d08fdba 4006 Avoid duplicate warnings where they are used. */
39211cd5 4007 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
8d08fdba
MS
4008 {
4009 tree decl;
4010
f49fad00
JM
4011 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4012 if (decl && TREE_CODE (decl) == OVERLOAD)
4013 decl = OVL_FUNCTION (decl);
8d08fdba 4014
f49fad00
JM
4015 if (decl && decl != error_mark_node
4016 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))
8d08fdba
MS
4017 /* If different sort of thing, we already gave an error. */
4018 && TREE_CODE (decl) == TREE_CODE (x)
3bfdc719 4019 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
8d08fdba 4020 {
33bd39a2 4021 pedwarn ("type mismatch with previous external decl", x);
8251199e 4022 cp_pedwarn_at ("previous external decl of `%#D'", decl);
8d08fdba
MS
4023 }
4024 }
4025
8d08fdba
MS
4026 /* This name is new in its binding level.
4027 Install the new declaration and return it. */
2c73f9f5 4028 if (namespace_bindings_p ())
8d08fdba
MS
4029 {
4030 /* Install a global value. */
4031
8d08fdba
MS
4032 /* If the first global decl has external linkage,
4033 warn if we later see static one. */
31928556 4034 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
8d08fdba 4035 TREE_PUBLIC (name) = 1;
5362b086 4036
92643fea
MM
4037 /* Bind the name for the entity. */
4038 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4039 && t != NULL_TREE)
4040 && (TREE_CODE (x) == TYPE_DECL
4041 || TREE_CODE (x) == VAR_DECL
0ca7178c 4042 || TREE_CODE (x) == ALIAS_DECL
92643fea
MM
4043 || TREE_CODE (x) == NAMESPACE_DECL
4044 || TREE_CODE (x) == CONST_DECL
4045 || TREE_CODE (x) == TEMPLATE_DECL))
4046 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
8d08fdba
MS
4047
4048 /* Don't forget if the function was used via an implicit decl. */
4049 if (IDENTIFIER_IMPLICIT_DECL (name)
4050 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4051 TREE_USED (x) = 1;
4052
4053 /* Don't forget if its address was taken in that way. */
4054 if (IDENTIFIER_IMPLICIT_DECL (name)
4055 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4056 TREE_ADDRESSABLE (x) = 1;
4057
4058 /* Warn about mismatches against previous implicit decl. */
4059 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4060 /* If this real decl matches the implicit, don't complain. */
4061 && ! (TREE_CODE (x) == FUNCTION_DECL
4062 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
33bd39a2 4063 warning
8251199e 4064 ("`%D' was previously implicitly declared to return `int'", x);
8d08fdba
MS
4065
4066 /* If new decl is `static' and an `extern' was seen previously,
4067 warn about it. */
a0a33927
MS
4068 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4069 warn_extern_redeclared_static (x, t);
8d08fdba
MS
4070 }
4071 else
4072 {
4073 /* Here to install a non-global value. */
f181d4ae 4074 tree oldlocal = IDENTIFIER_VALUE (name);
31928556 4075 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba 4076
f181d4ae
MM
4077 if (need_new_binding)
4078 {
0034cf72 4079 push_local_binding (name, x, 0);
f181d4ae
MM
4080 /* Because push_local_binding will hook X on to the
4081 current_binding_level's name list, we don't want to
4082 do that again below. */
4083 need_new_binding = 0;
4084 }
8d08fdba
MS
4085
4086 /* If this is a TYPE_DECL, push it into the type value slot. */
4087 if (TREE_CODE (x) == TYPE_DECL)
68642fb6 4088 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
f181d4ae 4089 current_binding_level);
8d08fdba 4090
a9aedbc2
MS
4091 /* Clear out any TYPE_DECL shadowed by a namespace so that
4092 we won't think this is a type. The C struct hack doesn't
4093 go through namespaces. */
4094 if (TREE_CODE (x) == NAMESPACE_DECL)
68642fb6 4095 set_identifier_type_value_with_scope (name, NULL_TREE,
f181d4ae 4096 current_binding_level);
a9aedbc2 4097
e905ac8a
MS
4098 if (oldlocal)
4099 {
4100 tree d = oldlocal;
17aec3eb 4101
74dc0d8c
MS
4102 while (oldlocal
4103 && TREE_CODE (oldlocal) == VAR_DECL
4104 && DECL_DEAD_FOR_LOCAL (oldlocal))
17aec3eb
RK
4105 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4106
e905ac8a
MS
4107 if (oldlocal == NULL_TREE)
4108 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4109 }
4110
8d08fdba
MS
4111 /* If this is an extern function declaration, see if we
4112 have a global definition or declaration for the function. */
4113 if (oldlocal == NULL_TREE
faae18ab 4114 && DECL_EXTERNAL (x)
31928556 4115 && oldglobal != NULL_TREE
8d08fdba 4116 && TREE_CODE (x) == FUNCTION_DECL
31928556 4117 && TREE_CODE (oldglobal) == FUNCTION_DECL)
8d08fdba
MS
4118 {
4119 /* We have one. Their types must agree. */
31928556 4120 if (decls_match (x, oldglobal))
6060a796
MS
4121 /* OK */;
4122 else
8d08fdba 4123 {
33bd39a2 4124 warning ("extern declaration of `%#D' doesn't match", x);
8251199e 4125 cp_warning_at ("global declaration `%#D'", oldglobal);
8d08fdba 4126 }
8d08fdba
MS
4127 }
4128 /* If we have a local external declaration,
4129 and no file-scope declaration has yet been seen,
4130 then if we later have a file-scope decl it must not be static. */
4131 if (oldlocal == NULL_TREE
31928556 4132 && oldglobal == NULL_TREE
8d08fdba
MS
4133 && DECL_EXTERNAL (x)
4134 && TREE_PUBLIC (x))
f181d4ae 4135 TREE_PUBLIC (name) = 1;
8d08fdba 4136
8d08fdba 4137 /* Warn if shadowing an argument at the top level of the body. */
e905ac8a
MS
4138 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4139 /* Inline decls shadow nothing. */
4140 && !DECL_FROM_INLINE (x)
8ac9ea61 4141 && TREE_CODE (oldlocal) == PARM_DECL)
8d08fdba 4142 {
8ac9ea61 4143 bool err = false;
8d08fdba 4144
8ac9ea61
NB
4145 /* Don't complain if it's from an enclosing function. */
4146 if (DECL_CONTEXT (oldlocal) == current_function_decl
4147 && TREE_CODE (x) != PARM_DECL)
4148 {
4149 /* Go to where the parms should be and see if we find
4150 them there. */
e2500fed 4151 struct cp_binding_level *b = current_binding_level->level_chain;
8ac9ea61 4152
9f175208
JM
4153 /* Skip the ctor/dtor cleanup level. */
4154 b = b->level_chain;
4155
8ac9ea61
NB
4156 /* ARM $8.3 */
4157 if (b->parm_flag == 1)
4158 {
33bd39a2 4159 error ("declaration of `%#D' shadows a parameter",
8ac9ea61
NB
4160 name);
4161 err = true;
4162 }
4163 }
8d08fdba 4164
8ac9ea61
NB
4165 if (warn_shadow && !err)
4166 shadow_warning ("a parameter", name, oldlocal);
8d08fdba 4167 }
e905ac8a 4168
8d08fdba 4169 /* Maybe warn if shadowing something else. */
8ac9ea61 4170 else if (warn_shadow && !DECL_EXTERNAL (x)
e905ac8a
MS
4171 /* No shadow warnings for internally generated vars. */
4172 && ! DECL_ARTIFICIAL (x)
4173 /* No shadow warnings for vars made for inlining. */
4174 && ! DECL_FROM_INLINE (x))
8d08fdba 4175 {
8ac9ea61 4176 if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4ac14744 4177 && current_class_ptr
8d08fdba 4178 && !TREE_STATIC (name))
33bd39a2 4179 warning ("declaration of `%s' shadows a member of `this'",
8ac9ea61
NB
4180 IDENTIFIER_POINTER (name));
4181 else if (oldlocal != NULL_TREE
4182 && TREE_CODE (oldlocal) == VAR_DECL)
4183 shadow_warning ("a previous local", name, oldlocal);
4184 else if (oldglobal != NULL_TREE
4185 && TREE_CODE (oldglobal) == VAR_DECL)
30394414 4186 /* XXX shadow warnings in outer-more namespaces */
8ac9ea61 4187 shadow_warning ("a global declaration", name, oldglobal);
8d08fdba 4188 }
e1cd6e56 4189 }
8d08fdba 4190
e1cd6e56 4191 if (TREE_CODE (x) == FUNCTION_DECL)
f30432d7 4192 check_default_args (x);
8145f082 4193
0154eaa8
MM
4194 if (TREE_CODE (x) == VAR_DECL)
4195 maybe_register_incomplete_var (x);
8d08fdba
MS
4196 }
4197
f181d4ae 4198 if (need_new_binding)
68642fb6 4199 add_decl_to_level (x,
efee38a9
MM
4200 DECL_NAMESPACE_SCOPE_P (x)
4201 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4202 : current_binding_level);
8d08fdba
MS
4203
4204 return x;
4205}
4206
5566b478
MS
4207/* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4208 caller to set DECL_CONTEXT properly. */
8d08fdba
MS
4209
4210static tree
4211pushdecl_with_scope (x, level)
4212 tree x;
e2500fed 4213 struct cp_binding_level *level;
8d08fdba 4214{
e2500fed 4215 register struct cp_binding_level *b;
5566b478 4216 tree function_decl = current_function_decl;
8d08fdba 4217
5566b478 4218 current_function_decl = NULL_TREE;
8d019cef
JM
4219 if (level->parm_flag == 2)
4220 {
4221 b = class_binding_level;
4222 class_binding_level = level;
4223 pushdecl_class_level (x);
4224 class_binding_level = b;
4225 }
4226 else
4227 {
4228 b = current_binding_level;
4229 current_binding_level = level;
4230 x = pushdecl (x);
4231 current_binding_level = b;
4232 }
5566b478 4233 current_function_decl = function_decl;
8d08fdba
MS
4234 return x;
4235}
4236
2c73f9f5 4237/* Like pushdecl, only it places X in the current namespace,
8d08fdba 4238 if appropriate. */
e92cc029 4239
8d08fdba 4240tree
2c73f9f5 4241pushdecl_namespace_level (x)
8d08fdba
MS
4242 tree x;
4243{
e2500fed 4244 register struct cp_binding_level *b = current_binding_level;
2c73f9f5
ML
4245 register tree t;
4246
4247 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
8d08fdba
MS
4248
4249 /* Now, the type_shadowed stack may screw us. Munge it so it does
4250 what we want. */
4251 if (TREE_CODE (x) == TYPE_DECL)
4252 {
4253 tree name = DECL_NAME (x);
4254 tree newval;
4255 tree *ptr = (tree *)0;
4256 for (; b != global_binding_level; b = b->level_chain)
4257 {
4258 tree shadowed = b->type_shadowed;
4259 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4260 if (TREE_PURPOSE (shadowed) == name)
4261 {
4262 ptr = &TREE_VALUE (shadowed);
4263 /* Can't break out of the loop here because sometimes
4264 a binding level will have duplicate bindings for
4265 PT names. It's gross, but I haven't time to fix it. */
4266 }
4267 }
4268 newval = TREE_TYPE (x);
4269 if (ptr == (tree *)0)
4270 {
4271 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4272 up here if this is changed to an assertion. --KR */
4273 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4274 }
4275 else
4276 {
8d08fdba
MS
4277 *ptr = newval;
4278 }
4279 }
4280 return t;
4281}
4282
2c73f9f5
ML
4283/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4284 if appropriate. */
4285
4286tree
4287pushdecl_top_level (x)
4288 tree x;
4289{
b35d4555 4290 push_to_top_level ();
2c73f9f5 4291 x = pushdecl_namespace_level (x);
b35d4555 4292 pop_from_top_level ();
2c73f9f5
ML
4293 return x;
4294}
4295
8d08fdba 4296/* Make the declaration of X appear in CLASS scope. */
e92cc029 4297
61a127b3 4298void
8d08fdba
MS
4299pushdecl_class_level (x)
4300 tree x;
4301{
22eadedb 4302 tree name;
8f032717 4303
22eadedb 4304 /* Get the name of X. */
8f032717 4305 if (TREE_CODE (x) == OVERLOAD)
22eadedb
MM
4306 name = DECL_NAME (get_first_fn (x));
4307 else
4308 name = DECL_NAME (x);
8d08fdba
MS
4309
4310 if (name)
4311 {
4312 push_class_level_binding (name, x);
4313 if (TREE_CODE (x) == TYPE_DECL)
f181d4ae 4314 set_identifier_type_value (name, TREE_TYPE (x));
8d08fdba 4315 }
6bdb8141 4316 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
8f032717 4317 {
22eadedb
MM
4318 /* If X is an anonymous aggregate, all of its members are
4319 treated as if they were members of the class containing the
4320 aggregate, for naming purposes. */
8f032717
MM
4321 tree f;
4322
22eadedb 4323 for (f = TYPE_FIELDS (TREE_TYPE (x)); f; f = TREE_CHAIN (f))
8f032717
MM
4324 pushdecl_class_level (f);
4325 }
8d08fdba
MS
4326}
4327
9188c363
MM
4328/* Enter DECL into the symbol table, if that's appropriate. Returns
4329 DECL, or a modified version thereof. */
4330
4331tree
4332maybe_push_decl (decl)
4333 tree decl;
4334{
4335 tree type = TREE_TYPE (decl);
4336
4337 /* Add this decl to the current binding level, but not if it comes
4338 from another scope, e.g. a static member variable. TEM may equal
4339 DECL or it may be a previous decl of the same name. */
07c88314
MM
4340 if (decl == error_mark_node
4341 || (TREE_CODE (decl) != PARM_DECL
4342 && DECL_CONTEXT (decl) != NULL_TREE
4343 /* Definitions of namespace members outside their namespace are
a1c65f9f 4344 possible. */
07c88314 4345 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
9188c363
MM
4346 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4347 || TREE_CODE (type) == UNKNOWN_TYPE
558475f0 4348 /* The declaration of a template specialization does not affect
9188c363
MM
4349 the functions available for overload resolution, so we do not
4350 call pushdecl. */
4351 || (TREE_CODE (decl) == FUNCTION_DECL
4352 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4353 return decl;
4354 else
4355 return pushdecl (decl);
4356}
4357
8d08fdba
MS
4358/* Make the declaration(s) of X appear in CLASS scope
4359 under the name NAME. */
e92cc029 4360
8d08fdba
MS
4361void
4362push_class_level_binding (name, x)
4363 tree name;
4364 tree x;
4365{
8f032717 4366 tree binding;
68642fb6 4367 /* The class_binding_level will be NULL if x is a template
98c1c668
JM
4368 parameter name in a member template. */
4369 if (!class_binding_level)
4370 return;
4371
908c4e83
MM
4372 /* Make sure that this new member does not have the same name
4373 as a template parameter. */
4374 if (TYPE_BEING_DEFINED (current_class_type))
4375 check_template_shadow (x);
4376
f181d4ae
MM
4377 /* If this declaration shadows a declaration from an enclosing
4378 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4379 we leave this class. Record the shadowed declaration here. */
8f032717 4380 binding = IDENTIFIER_BINDING (name);
68642fb6 4381 if (binding
8f032717
MM
4382 && ((TREE_CODE (x) == OVERLOAD
4383 && BINDING_VALUE (binding)
4384 && is_overloaded_fn (BINDING_VALUE (binding)))
4385 || INHERITED_VALUE_BINDING_P (binding)))
4386 {
4387 tree shadow;
4388 tree old_decl;
4389
4390 /* If the old binding was from a base class, and was for a tag
4391 name, slide it over to make room for the new binding. The
4392 old binding is still visible if explicitly qualified with a
4393 class-key. */
4394 if (INHERITED_VALUE_BINDING_P (binding)
4395 && BINDING_VALUE (binding)
4396 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4397 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4398 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4399 {
4400 old_decl = BINDING_TYPE (binding);
4401 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4402 BINDING_VALUE (binding) = NULL_TREE;
4403 INHERITED_VALUE_BINDING_P (binding) = 0;
4404 }
4405 else
4406 old_decl = BINDING_VALUE (binding);
4407
76191fdd
NS
4408 /* Find the previous binding of name on the class-shadowed
4409 list, and update it. */
8f032717
MM
4410 for (shadow = class_binding_level->class_shadowed;
4411 shadow;
4412 shadow = TREE_CHAIN (shadow))
4413 if (TREE_PURPOSE (shadow) == name
4414 && TREE_TYPE (shadow) == old_decl)
4415 {
4416 BINDING_VALUE (binding) = x;
4417 INHERITED_VALUE_BINDING_P (binding) = 0;
4418 TREE_TYPE (shadow) = x;
76191fdd 4419 IDENTIFIER_CLASS_VALUE (name) = x;
8f032717
MM
4420 return;
4421 }
4422 }
f181d4ae 4423
8f032717 4424 /* If we didn't replace an existing binding, put the binding on the
76191fdd 4425 stack of bindings for the identifier, and update the shadowed list. */
8f032717
MM
4426 if (push_class_binding (name, x))
4427 {
8f032717 4428 class_binding_level->class_shadowed
76191fdd 4429 = tree_cons (name, NULL,
8f032717 4430 class_binding_level->class_shadowed);
8f032717
MM
4431 /* Record the value we are binding NAME to so that we can know
4432 what to pop later. */
4433 TREE_TYPE (class_binding_level->class_shadowed) = x;
4434 }
8d08fdba
MS
4435}
4436
dd4fae80
ML
4437/* Insert another USING_DECL into the current binding level, returning
4438 this declaration. If this is a redeclaration, do nothing, and
4439 return NULL_TREE if this not in namespace scope (in namespace
4440 scope, a using decl might extend any previous bindings). */
e92cc029 4441
2c73f9f5
ML
4442tree
4443push_using_decl (scope, name)
4444 tree scope;
4445 tree name;
8d08fdba 4446{
2c73f9f5 4447 tree decl;
68642fb6 4448
2c73f9f5
ML
4449 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4450 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4451 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4452 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4453 break;
4454 if (decl)
dd4fae80 4455 return namespace_bindings_p () ? decl : NULL_TREE;
4ce3d537 4456 decl = build_lang_decl (USING_DECL, name, void_type_node);
2c73f9f5
ML
4457 DECL_INITIAL (decl) = scope;
4458 TREE_CHAIN (decl) = current_binding_level->usings;
4459 current_binding_level->usings = decl;
4460 return decl;
8d08fdba
MS
4461}
4462
ea9635c7
ML
4463/* Add namespace to using_directives. Return NULL_TREE if nothing was
4464 changed (i.e. there was already a directive), or the fresh
4465 TREE_LIST otherwise. */
4466
4467tree
9ed182dc 4468push_using_directive (used)
ea9635c7 4469 tree used;
ea9635c7
ML
4470{
4471 tree ud = current_binding_level->using_directives;
9ed182dc 4472 tree iter, ancestor;
68642fb6 4473
a1c65f9f 4474 /* Check if we already have this. */
ea9635c7
ML
4475 if (purpose_member (used, ud) != NULL_TREE)
4476 return NULL_TREE;
00dc6358 4477
a1c65f9f 4478 /* Recursively add all namespaces used. */
00dc6358 4479 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
9ed182dc 4480 push_using_directive (TREE_PURPOSE (iter));
00dc6358 4481
9ed182dc 4482 ancestor = namespace_ancestor (current_decl_namespace (), used);
00dc6358 4483 ud = current_binding_level->using_directives;
e1b3e07d 4484 ud = tree_cons (used, ancestor, ud);
ea9635c7
ML
4485 current_binding_level->using_directives = ud;
4486 return ud;
4487}
4488
f181d4ae
MM
4489/* DECL is a FUNCTION_DECL for a non-member function, which may have
4490 other definitions already in place. We get around this by making
4491 the value of the identifier point to a list of all the things that
4492 want to be referenced by that name. It is then up to the users of
4493 that name to decide what to do with that list.
8d08fdba 4494
17aec3eb
RK
4495 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4496 DECL_TEMPLATE_RESULT. It is dealt with the same way.
8d08fdba 4497
7bdbfa05
MM
4498 FLAGS is a bitwise-or of the following values:
4499 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4500 namespace scope.
4501 PUSH_USING: DECL is being pushed as the result of a using
68642fb6 4502 declaration.
7bdbfa05 4503
8d08fdba
MS
4504 The value returned may be a previous declaration if we guessed wrong
4505 about what language DECL should belong to (C or C++). Otherwise,
4506 it's always DECL (and never something that's not a _DECL). */
e92cc029 4507
7bdbfa05
MM
4508tree
4509push_overloaded_decl (decl, flags)
8d08fdba 4510 tree decl;
7bdbfa05 4511 int flags;
8d08fdba 4512{
f181d4ae 4513 tree name = DECL_NAME (decl);
700f8a87 4514 tree old;
f181d4ae 4515 tree new_binding;
7bdbfa05 4516 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
700f8a87
MS
4517
4518 if (doing_global)
9f33663b 4519 old = namespace_binding (name, DECL_CONTEXT (decl));
700f8a87 4520 else
f181d4ae 4521 old = lookup_name_current_level (name);
8d08fdba 4522
700f8a87 4523 if (old)
8d08fdba 4524 {
e1cd6e56 4525 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
8926095f 4526 {
700f8a87 4527 tree t = TREE_TYPE (old);
cdf5b885
MS
4528 if (IS_AGGR_TYPE (t) && warn_shadow
4529 && (! DECL_IN_SYSTEM_HEADER (decl)
4530 || ! DECL_IN_SYSTEM_HEADER (old)))
33bd39a2 4531 warning ("`%#D' hides constructor for `%#T'", decl, t);
5b605f68 4532 old = NULL_TREE;
8926095f 4533 }
700f8a87 4534 else if (is_overloaded_fn (old))
8d08fdba 4535 {
8d08fdba 4536 tree tmp;
68642fb6 4537
2c73f9f5 4538 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
7bdbfa05
MM
4539 {
4540 tree fn = OVL_CURRENT (tmp);
4541
4542 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4543 && !(flags & PUSH_USING)
4544 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4545 TYPE_ARG_TYPES (TREE_TYPE (decl))))
33bd39a2 4546 error ("`%#D' conflicts with previous using declaration `%#D'",
7bdbfa05 4547 decl, fn);
68642fb6 4548
7bdbfa05
MM
4549 if (duplicate_decls (decl, fn))
4550 return fn;
4551 }
8d08fdba 4552 }
655dc6ee
JM
4553 else if (old == error_mark_node)
4554 /* Ignore the undefined symbol marker. */
4555 old = NULL_TREE;
e1cd6e56
MS
4556 else
4557 {
8251199e 4558 cp_error_at ("previous non-function declaration `%#D'", old);
33bd39a2 4559 error ("conflicts with function declaration `%#D'", decl);
a9aedbc2 4560 return decl;
e1cd6e56 4561 }
8d08fdba 4562 }
7177d104 4563
700f8a87 4564 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
8d08fdba 4565 {
2c73f9f5 4566 if (old && TREE_CODE (old) != OVERLOAD)
f181d4ae
MM
4567 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4568 else
4569 new_binding = ovl_cons (decl, old);
347d73d7
ML
4570 if (flags & PUSH_USING)
4571 OVL_USED (new_binding) = 1;
8d08fdba
MS
4572 }
4573 else
f181d4ae
MM
4574 /* NAME is not ambiguous. */
4575 new_binding = decl;
700f8a87
MS
4576
4577 if (doing_global)
f181d4ae 4578 set_namespace_binding (name, current_namespace, new_binding);
700f8a87 4579 else
f181d4ae
MM
4580 {
4581 /* We only create an OVERLOAD if there was a previous binding at
0580c9aa
ML
4582 this level, or if decl is a template. In the former case, we
4583 need to remove the old binding and replace it with the new
4584 binding. We must also run through the NAMES on the binding
4585 level where the name was bound to update the chain. */
4586
4587 if (TREE_CODE (new_binding) == OVERLOAD && old)
f181d4ae
MM
4588 {
4589 tree *d;
68642fb6 4590
f181d4ae
MM
4591 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4592 *d;
4593 d = &TREE_CHAIN (*d))
4594 if (*d == old
4595 || (TREE_CODE (*d) == TREE_LIST
4596 && TREE_VALUE (*d) == old))
4597 {
d8f8dca1
MM
4598 if (TREE_CODE (*d) == TREE_LIST)
4599 /* Just replace the old binding with the new. */
4600 TREE_VALUE (*d) = new_binding;
4601 else
4602 /* Build a TREE_LIST to wrap the OVERLOAD. */
68642fb6 4603 *d = tree_cons (NULL_TREE, new_binding,
ed5511d9 4604 TREE_CHAIN (*d));
d8f8dca1
MM
4605
4606 /* And update the CPLUS_BINDING node. */
4607 BINDING_VALUE (IDENTIFIER_BINDING (name))
4608 = new_binding;
4609 return decl;
f181d4ae
MM
4610 }
4611
d8f8dca1 4612 /* We should always find a previous binding in this case. */
a98facb0 4613 abort ();
f181d4ae
MM
4614 }
4615
4616 /* Install the new binding. */
0034cf72 4617 push_local_binding (name, new_binding, flags);
f181d4ae 4618 }
700f8a87 4619
8d08fdba
MS
4620 return decl;
4621}
4622\f
4623/* Generate an implicit declaration for identifier FUNCTIONID
4624 as a function of type int (). Print a warning if appropriate. */
4625
4626tree
4627implicitly_declare (functionid)
4628 tree functionid;
4629{
4630 register tree decl;
8d08fdba
MS
4631
4632 /* We used to reuse an old implicit decl here,
4633 but this loses with inline functions because it can clobber
4634 the saved decl chains. */
4635 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4636
4637 DECL_EXTERNAL (decl) = 1;
4638 TREE_PUBLIC (decl) = 1;
4639
cab1f180 4640 /* ISO standard says implicit declarations are in the innermost block.
d22c8596 4641 So we record the decl in the standard fashion. */
8d08fdba 4642 pushdecl (decl);
3e411c3f 4643 rest_of_decl_compilation (decl, NULL, 0, 0);
8d08fdba
MS
4644
4645 if (warn_implicit
4646 /* Only one warning per identifier. */
4647 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4648 {
33bd39a2 4649 pedwarn ("implicit declaration of function `%#D'", decl);
8d08fdba
MS
4650 }
4651
4652 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4653
8d08fdba
MS
4654 return decl;
4655}
4656
8251199e 4657/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
4658 when the declaration OLDDECL (assumed to be for the same name)
4659 has already been seen.
4660 Otherwise return an error message format string with a %s
4661 where the identifier should go. */
4662
d8e178a0 4663static const char *
8d08fdba
MS
4664redeclaration_error_message (newdecl, olddecl)
4665 tree newdecl, olddecl;
4666{
4667 if (TREE_CODE (newdecl) == TYPE_DECL)
4668 {
4669 /* Because C++ can put things into name space for free,
4670 constructs like "typedef struct foo { ... } foo"
4671 would look like an erroneous redeclaration. */
3bfdc719 4672 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8251199e 4673 return 0;
8d08fdba 4674 else
8251199e 4675 return "redefinition of `%#D'";
8d08fdba
MS
4676 }
4677 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4678 {
4679 /* If this is a pure function, its olddecl will actually be
4680 the original initialization to `0' (which we force to call
4681 abort()). Don't complain about redefinition in this case. */
fee7654e 4682 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
8251199e 4683 return 0;
8d08fdba 4684
2c73f9f5 4685 /* If both functions come from different namespaces, this is not
a1c65f9f 4686 a redeclaration - this is a conflict with a used function. */
6eb3bb27 4687 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2c73f9f5 4688 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
8251199e 4689 return "`%D' conflicts with used function";
2c73f9f5 4690
db5ae43f
MS
4691 /* We'll complain about linkage mismatches in
4692 warn_extern_redeclared_static. */
4693
2c73f9f5 4694 /* Defining the same name twice is no good. */
8d08fdba 4695 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 4696 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
4697 {
4698 if (DECL_NAME (olddecl) == NULL_TREE)
8251199e 4699 return "`%#D' not declared in class";
8d08fdba 4700 else
8251199e 4701 return "redefinition of `%#D'";
8d08fdba 4702 }
8251199e 4703 return 0;
8d08fdba 4704 }
51c184be
MS
4705 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4706 {
ec255269 4707 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
5362b086 4708 && (DECL_TEMPLATE_RESULT (newdecl)
f4381d62 4709 != DECL_TEMPLATE_RESULT (olddecl))
ec255269
MS
4710 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4711 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4712 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
d0f062fb
NS
4713 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4714 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
8251199e
JM
4715 return "redefinition of `%#D'";
4716 return 0;
51c184be 4717 }
1f51a992 4718 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba
MS
4719 {
4720 /* Objects declared at top level: */
4721 /* If at least one is a reference, it's ok. */
4722 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
8251199e 4723 return 0;
8926095f 4724 /* Reject two definitions. */
8251199e 4725 return "redefinition of `%#D'";
8d08fdba
MS
4726 }
4727 else
4728 {
4729 /* Objects declared with block scope: */
4730 /* Reject two definitions, and reject a definition
4731 together with an external reference. */
4732 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
8251199e
JM
4733 return "redeclaration of `%#D'";
4734 return 0;
8d08fdba
MS
4735 }
4736}
4737\f
acef433b 4738/* Create a new label, named ID. */
8d08fdba 4739
acef433b
MM
4740static tree
4741make_label_decl (id, local_p)
8d08fdba 4742 tree id;
acef433b 4743 int local_p;
8d08fdba 4744{
acef433b 4745 tree decl;
8d08fdba 4746
acef433b 4747 decl = build_decl (LABEL_DECL, id, void_type_node);
b35d4555 4748 if (expanding_p)
acef433b
MM
4749 /* Make sure every label has an rtx. */
4750 label_rtx (decl);
4751
4752 DECL_CONTEXT (decl) = current_function_decl;
4753 DECL_MODE (decl) = VOIDmode;
4754 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 4755
acef433b
MM
4756 /* Say where one reference is to the label, for the sake of the
4757 error if it is not defined. */
4758 DECL_SOURCE_LINE (decl) = lineno;
4759 DECL_SOURCE_FILE (decl) = input_filename;
4760
4761 /* Record the fact that this identifier is bound to this label. */
4762 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4763
6625cdb5
JM
4764 return decl;
4765}
4766
4767/* Record this label on the list of used labels so that we can check
4768 at the end of the function to see whether or not the label was
4769 actually defined, and so we can check when the label is defined whether
4770 this use is valid. */
4771
4772static void
4773use_label (decl)
4774 tree decl;
4775{
4776 if (named_label_uses == NULL
4777 || named_label_uses->names_in_scope != current_binding_level->names
4778 || named_label_uses->label_decl != decl)
4779 {
4780 struct named_label_use_list *new_ent;
4781 new_ent = ((struct named_label_use_list *)
4782 ggc_alloc (sizeof (struct named_label_use_list)));
e349ee73
MS
4783 new_ent->label_decl = decl;
4784 new_ent->names_in_scope = current_binding_level->names;
4785 new_ent->binding_level = current_binding_level;
4786 new_ent->lineno_o_goto = lineno;
4787 new_ent->filename_o_goto = input_filename;
4788 new_ent->next = named_label_uses;
4789 named_label_uses = new_ent;
8d08fdba 4790 }
acef433b 4791}
8d08fdba 4792
acef433b
MM
4793/* Look for a label named ID in the current function. If one cannot
4794 be found, create one. (We keep track of used, but undefined,
4795 labels, and complain about them at the end of a function.) */
8d08fdba 4796
68642fb6 4797tree
acef433b
MM
4798lookup_label (id)
4799 tree id;
4800{
4801 tree decl;
6625cdb5 4802 struct named_label_list *ent;
8d08fdba 4803
acef433b
MM
4804 /* You can't use labels at global scope. */
4805 if (current_function_decl == NULL_TREE)
4806 {
4807 error ("label `%s' referenced outside of any function",
4808 IDENTIFIER_POINTER (id));
4809 return NULL_TREE;
4810 }
68642fb6 4811
acef433b
MM
4812 /* See if we've already got this label. */
4813 decl = IDENTIFIER_LABEL_VALUE (id);
4814 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4815 return decl;
8d08fdba 4816
acef433b
MM
4817 /* Record this label on the list of labels used in this function.
4818 We do this before calling make_label_decl so that we get the
4819 IDENTIFIER_LABEL_VALUE before the new label is declared. */
6625cdb5 4820 ent = ((struct named_label_list *)
f8a83ee3 4821 ggc_alloc_cleared (sizeof (struct named_label_list)));
6625cdb5
JM
4822 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
4823 ent->next = named_labels;
4824 named_labels = ent;
4825
acef433b
MM
4826 /* We need a new label. */
4827 decl = make_label_decl (id, /*local_p=*/0);
6625cdb5 4828
acef433b 4829 /* Now fill in the information we didn't have before. */
6625cdb5 4830 ent->label_decl = decl;
8d08fdba
MS
4831
4832 return decl;
4833}
4834
acef433b 4835/* Declare a local label named ID. */
8d08fdba
MS
4836
4837tree
acef433b
MM
4838declare_local_label (id)
4839 tree id;
8d08fdba 4840{
acef433b 4841 tree decl;
8d08fdba 4842
acef433b
MM
4843 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4844 this scope we can restore the old value of
4845 IDENTIFIER_TYPE_VALUE. */
68642fb6 4846 current_binding_level->shadowed_labels
acef433b
MM
4847 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4848 current_binding_level->shadowed_labels);
4849 /* Look for the label. */
4850 decl = make_label_decl (id, /*local_p=*/1);
4851 /* Now fill in the information we didn't have before. */
4852 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
68642fb6 4853
acef433b 4854 return decl;
8d08fdba
MS
4855}
4856
6625cdb5
JM
4857/* Returns nonzero if it is ill-formed to jump past the declaration of
4858 DECL. Returns 2 if it's also a real problem. */
4859
4860static int
4861decl_jump_unsafe (decl)
4862 tree decl;
4863{
4864 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
4865 return 0;
4866
4867 if (DECL_INITIAL (decl) == NULL_TREE
4868 && pod_type_p (TREE_TYPE (decl)))
4869 return 0;
4870
4871 /* This is really only important if we're crossing an initialization.
4872 The POD stuff is just pedantry; why should it matter if the class
4873 contains a field of pointer to member type? */
4874 if (DECL_INITIAL (decl)
4875 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
4876 return 2;
4877 return 1;
4878}
4879
4880/* Check that a single previously seen jump to a newly defined label
4881 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
4882 the jump context; NAMES are the names in scope in LEVEL at the jump
4883 context; FILE and LINE are the source position of the jump or 0. */
4884
4885static void
4886check_previous_goto_1 (decl, level, names, file, line)
4887 tree decl;
e2500fed 4888 struct cp_binding_level *level;
6625cdb5
JM
4889 tree names;
4890 const char *file;
4891 int line;
4892{
4893 int identified = 0;
4894 int saw_eh = 0;
e2500fed 4895 struct cp_binding_level *b = current_binding_level;
6625cdb5
JM
4896 for (; b; b = b->level_chain)
4897 {
4898 tree new_decls = b->names;
4899 tree old_decls = (b == level ? names : NULL_TREE);
4900 for (; new_decls != old_decls;
4901 new_decls = TREE_CHAIN (new_decls))
4902 {
4903 int problem = decl_jump_unsafe (new_decls);
4904 if (! problem)
4905 continue;
4906
4907 if (! identified)
4908 {
4909 if (decl)
33bd39a2 4910 pedwarn ("jump to label `%D'", decl);
6625cdb5
JM
4911 else
4912 pedwarn ("jump to case label");
4913
4914 if (file)
4915 pedwarn_with_file_and_line (file, line, " from here");
4916 identified = 1;
4917 }
4918
826840d9 4919 if (problem > 1)
6625cdb5
JM
4920 cp_error_at (" crosses initialization of `%#D'",
4921 new_decls);
4922 else
4923 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4924 new_decls);
4925 }
4926
4927 if (b == level)
4928 break;
826840d9 4929 if ((b->is_try_scope || b->is_catch_scope) && ! saw_eh)
6625cdb5
JM
4930 {
4931 if (! identified)
4932 {
4933 if (decl)
33bd39a2 4934 pedwarn ("jump to label `%D'", decl);
6625cdb5
JM
4935 else
4936 pedwarn ("jump to case label");
4937
4938 if (file)
4939 pedwarn_with_file_and_line (file, line, " from here");
4940 identified = 1;
4941 }
826840d9
RH
4942 if (b->is_try_scope)
4943 error (" enters try block");
4944 else
4945 error (" enters catch block");
6625cdb5
JM
4946 saw_eh = 1;
4947 }
4948 }
4949}
4950
4951static void
4952check_previous_goto (use)
4953 struct named_label_use_list *use;
4954{
4955 check_previous_goto_1 (use->label_decl, use->binding_level,
4956 use->names_in_scope, use->filename_o_goto,
4957 use->lineno_o_goto);
4958}
4959
4960static void
4961check_switch_goto (level)
e2500fed 4962 struct cp_binding_level *level;
6625cdb5
JM
4963{
4964 check_previous_goto_1 (NULL_TREE, level, level->names, NULL, 0);
4965}
4966
4967/* Check that any previously seen jumps to a newly defined label DECL
4968 are OK. Called by define_label. */
4969
4970static void
4971check_previous_gotos (decl)
4972 tree decl;
4973{
4974 struct named_label_use_list **usep;
4975
4976 if (! TREE_USED (decl))
4977 return;
4978
4979 for (usep = &named_label_uses; *usep; )
4980 {
4981 struct named_label_use_list *use = *usep;
4982 if (use->label_decl == decl)
4983 {
4984 check_previous_goto (use);
4985 *usep = use->next;
4986 }
4987 else
4988 usep = &(use->next);
4989 }
4990}
4991
4992/* Check that a new jump to a label DECL is OK. Called by
4993 finish_goto_stmt. */
4994
4995void
4996check_goto (decl)
4997 tree decl;
4998{
4999 int identified = 0;
5000 tree bad;
5001 struct named_label_list *lab;
5002
e3cd9945
APB
5003 /* We can't know where a computed goto is jumping. So we assume
5004 that it's OK. */
5005 if (! DECL_P (decl))
5006 return;
5007
6625cdb5
JM
5008 /* If the label hasn't been defined yet, defer checking. */
5009 if (! DECL_INITIAL (decl))
5010 {
5011 use_label (decl);
5012 return;
5013 }
5014
5015 for (lab = named_labels; lab; lab = lab->next)
5016 if (decl == lab->label_decl)
5017 break;
5018
5019 /* If the label is not on named_labels it's a gcc local label, so
5020 it must be in an outer scope, so jumping to it is always OK. */
5021 if (lab == 0)
5022 return;
5023
826840d9
RH
5024 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
5025 && !identified)
6625cdb5
JM
5026 {
5027 cp_pedwarn_at ("jump to label `%D'", decl);
5028 pedwarn (" from here");
5029 identified = 1;
5030 }
5031
5032 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
5033 {
5034 tree b = TREE_VALUE (bad);
5035 int u = decl_jump_unsafe (b);
5036
5037 if (u > 1 && DECL_ARTIFICIAL (b))
5038 /* Can't skip init of __exception_info. */
5039 cp_error_at (" enters catch block", b);
5040 else if (u > 1)
5041 cp_error_at (" skips initialization of `%#D'", b);
5042 else
5043 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
5044 }
5045
826840d9 5046 if (lab->in_try_scope)
6625cdb5 5047 error (" enters try block");
826840d9
RH
5048 else if (lab->in_catch_scope)
5049 error (" enters catch block");
6625cdb5
JM
5050}
5051
8d08fdba
MS
5052/* Define a label, specifying the location in the source file.
5053 Return the LABEL_DECL node for the label, if the definition is valid.
5054 Otherwise return 0. */
5055
5056tree
5057define_label (filename, line, name)
3b304f5b 5058 const char *filename;
8d08fdba
MS
5059 int line;
5060 tree name;
5061{
f01b0acb 5062 tree decl = lookup_label (name);
6625cdb5 5063 struct named_label_list *ent;
e2500fed 5064 register struct cp_binding_level *p;
6625cdb5
JM
5065
5066 for (ent = named_labels; ent; ent = ent->next)
5067 if (ent->label_decl == decl)
5068 break;
8d08fdba 5069
3dc9aec6 5070 /* After labels, make any new cleanups in the function go into their
8d08fdba 5071 own new (temporary) binding contour. */
3dc9aec6
WC
5072 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5073 p->more_cleanups_ok = 0;
8d08fdba 5074
e1cd6e56 5075 if (name == get_identifier ("wchar_t"))
33bd39a2 5076 pedwarn ("label named wchar_t");
e1cd6e56 5077
8d08fdba
MS
5078 if (DECL_INITIAL (decl) != NULL_TREE)
5079 {
33bd39a2 5080 error ("duplicate label `%D'", decl);
8d08fdba
MS
5081 return 0;
5082 }
5083 else
5084 {
8d08fdba
MS
5085 /* Mark label as having been defined. */
5086 DECL_INITIAL (decl) = error_mark_node;
5087 /* Say where in the source. */
5088 DECL_SOURCE_FILE (decl) = filename;
5089 DECL_SOURCE_LINE (decl) = line;
6625cdb5
JM
5090 if (ent)
5091 {
5092 ent->names_in_scope = current_binding_level->names;
5093 ent->binding_level = current_binding_level;
5094 }
5095 check_previous_gotos (decl);
8d08fdba
MS
5096 return decl;
5097 }
5098}
5099
a5894242
MS
5100struct cp_switch
5101{
e2500fed 5102 struct cp_binding_level *level;
a5894242 5103 struct cp_switch *next;
56cb9733
MM
5104 /* The SWITCH_STMT being built. */
5105 tree switch_stmt;
5106 /* A splay-tree mapping the low element of a case range to the high
5107 element, or NULL_TREE if there is no high element. Used to
5108 determine whether or not a new case label duplicates an old case
5109 label. We need a tree, rather than simply a hash table, because
5110 of the GNU case range extension. */
5111 splay_tree cases;
a5894242
MS
5112};
5113
56cb9733
MM
5114/* A stack of the currently active switch statements. The innermost
5115 switch statement is on the top of the stack. There is no need to
5116 mark the stack for garbage collection because it is only active
5117 during the processing of the body of a function, and we never
5118 collect at that point. */
5362b086 5119
a5894242
MS
5120static struct cp_switch *switch_stack;
5121
56cb9733
MM
5122/* Called right after a switch-statement condition is parsed.
5123 SWITCH_STMT is the switch statement being parsed. */
5124
a5894242 5125void
56cb9733
MM
5126push_switch (switch_stmt)
5127 tree switch_stmt;
a5894242
MS
5128{
5129 struct cp_switch *p
bedda2da 5130 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
a5894242
MS
5131 p->level = current_binding_level;
5132 p->next = switch_stack;
56cb9733
MM
5133 p->switch_stmt = switch_stmt;
5134 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
5135 switch_stack = p;
5136}
5137
5138void
5139pop_switch ()
5140{
bedda2da 5141 struct cp_switch *cs;
5362b086 5142
bedda2da 5143 cs = switch_stack;
56cb9733 5144 splay_tree_delete (cs->cases);
a5894242 5145 switch_stack = switch_stack->next;
bedda2da 5146 free (cs);
a5894242
MS
5147}
5148
b0a1da19
JM
5149/* Note that we've seen a definition of a case label, and complain if this
5150 is a bad place for one. */
e92cc029 5151
3e4d04a1 5152tree
56cb9733
MM
5153finish_case_label (low_value, high_value)
5154 tree low_value;
5155 tree high_value;
8d08fdba 5156{
3e4d04a1 5157 tree cond, r;
e2500fed 5158 register struct cp_binding_level *p;
a5894242 5159
b0a1da19 5160 if (! switch_stack)
56cb9733
MM
5161 {
5162 if (high_value)
5163 error ("case label not within a switch statement");
5164 else if (low_value)
33bd39a2 5165 error ("case label `%E' not within a switch statement",
56cb9733
MM
5166 low_value);
5167 else
5168 error ("`default' label not within a switch statement");
3e4d04a1 5169 return NULL_TREE;
56cb9733
MM
5170 }
5171
56cb9733
MM
5172 if (processing_template_decl)
5173 {
8f17b5c5
MM
5174 tree label;
5175
56cb9733
MM
5176 /* For templates, just add the case label; we'll do semantic
5177 analysis at instantiation-time. */
8f17b5c5 5178 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3e4d04a1 5179 return add_stmt (build_case_label (low_value, high_value, label));
56cb9733
MM
5180 }
5181
5182 /* Find the condition on which this switch statement depends. */
5183 cond = SWITCH_COND (switch_stack->switch_stmt);
5184 if (cond && TREE_CODE (cond) == TREE_LIST)
5185 cond = TREE_VALUE (cond);
56cb9733 5186
3e4d04a1
RH
5187 r = c_add_case_label (switch_stack->cases, cond, low_value, high_value);
5188 if (r == error_mark_node)
5189 r = NULL_TREE;
8d08fdba 5190
6625cdb5 5191 check_switch_goto (switch_stack->level);
a5894242 5192
3dc9aec6 5193 /* After labels, make any new cleanups in the function go into their
8d08fdba 5194 own new (temporary) binding contour. */
3dc9aec6
WC
5195 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5196 p->more_cleanups_ok = 0;
3e4d04a1
RH
5197
5198 return r;
8d08fdba
MS
5199}
5200\f
5201/* Return the list of declarations of the current level.
5202 Note that this list is in reverse order unless/until
5203 you nreverse it; and when you do nreverse it, you must
5204 store the result back using `storedecls' or you will lose. */
5205
5206tree
5207getdecls ()
5208{
5209 return current_binding_level->names;
5210}
5211
5212/* Return the list of type-tags (for structs, etc) of the current level. */
5213
5214tree
5215gettags ()
5216{
5217 return current_binding_level->tags;
5218}
5219
5220/* Store the list of declarations of the current level.
5221 This is done for the parameter declarations of a function being defined,
5222 after they are modified in the light of any missing parameters. */
5223
5224static void
5225storedecls (decls)
5226 tree decls;
5227{
5228 current_binding_level->names = decls;
5229}
5230
5231/* Similarly, store the list of tags of the current level. */
5232
280f9385 5233void
8d08fdba
MS
5234storetags (tags)
5235 tree tags;
5236{
5237 current_binding_level->tags = tags;
5238}
5239\f
4782bd5b
RS
5240/* Return the type that should be used when TYPE's name is preceded
5241 by a tag such as 'struct' or 'union', or null if the name cannot
5242 be used in this way.
5243
5244 For example, when processing the third line of:
5245
5246 struct A;
5247 typedef struct A A;
5248 struct A;
5249
5250 lookup of A will find the typedef. Given A's typedef, this function
5251 will return the type associated with "struct A". For the tag to be
5252 anything other than TYPE, TYPE must be a typedef whose original type
5253 has the same name and context as TYPE itself.
5254
5255 It is not valid for a typedef of an anonymous type to be used with
5256 an explicit tag:
5257
5258 typedef struct { ... } B;
5259 struct B;
5260
5261 Return null for this case. */
5262
5263static tree
5264follow_tag_typedef (type)
5265 tree type;
5266{
5267 tree original;
5268
5269 original = original_type (type);
3a73bffb
JJ
5270 if (! TYPE_NAME (original))
5271 return NULL_TREE;
4782bd5b
RS
5272 if (TYPE_IDENTIFIER (original) == TYPE_IDENTIFIER (type)
5273 && (CP_DECL_CONTEXT (TYPE_NAME (original))
5274 == CP_DECL_CONTEXT (TYPE_NAME (type)))
5275 && !(CLASS_TYPE_P (original) && TYPE_WAS_ANONYMOUS (original)))
5276 return original;
5277 else
5278 return NULL_TREE;
5279}
5280
8d08fdba
MS
5281/* Given NAME, an IDENTIFIER_NODE,
5282 return the structure (or union or enum) definition for that name.
5283 Searches binding levels from BINDING_LEVEL up to the global level.
5284 If THISLEVEL_ONLY is nonzero, searches only the specified context
5285 (but skips any tag-transparent contexts to find one that is
5286 meaningful for tags).
5287 FORM says which kind of type the caller wants;
5288 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5289 If the wrong kind of type is found, and it's not a template, an error is
5290 reported. */
5291
5292static tree
5293lookup_tag (form, name, binding_level, thislevel_only)
5294 enum tree_code form;
8d08fdba 5295 tree name;
e2500fed 5296 struct cp_binding_level *binding_level;
8d08fdba
MS
5297 int thislevel_only;
5298{
e2500fed 5299 register struct cp_binding_level *level;
838dfd8a 5300 /* Nonzero if, we should look past a template parameter level, even
74b846e0
MM
5301 if THISLEVEL_ONLY. */
5302 int allow_template_parms_p = 1;
8d08fdba
MS
5303
5304 for (level = binding_level; level; level = level->level_chain)
5305 {
5306 register tree tail;
5307 if (ANON_AGGRNAME_P (name))
5308 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5309 {
5310 /* There's no need for error checking here, because
5311 anon names are unique throughout the compilation. */
5312 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5313 return TREE_VALUE (tail);
5314 }
2c73f9f5 5315 else if (level->namespace_p)
a1c65f9f 5316 /* Do namespace lookup. */
6c011b01 5317 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
2c73f9f5 5318 {
36a117a5
MM
5319 tree old = binding_for_name (name, tail);
5320
74b846e0
MM
5321 /* If we just skipped past a template parameter level,
5322 even though THISLEVEL_ONLY, and we find a template
5323 class declaration, then we use the _TYPE node for the
36a117a5 5324 template. See the example below. */
74b846e0 5325 if (thislevel_only && !allow_template_parms_p
68642fb6 5326 && old && BINDING_VALUE (old)
36a117a5
MM
5327 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5328 old = TREE_TYPE (BINDING_VALUE (old));
68642fb6 5329 else
36a117a5
MM
5330 old = BINDING_TYPE (old);
5331
4782bd5b 5332 if (old)
2c73f9f5 5333 {
4782bd5b
RS
5334 /* We've found something at this binding level. If it is
5335 a typedef, extract the tag it refers to. Lookup fails
5336 if the typedef doesn't refer to a taggable type. */
5337 old = follow_tag_typedef (old);
5338 if (!old)
5339 return NULL_TREE;
5340 if (TREE_CODE (old) != form
5341 && (form == ENUMERAL_TYPE
5342 || TREE_CODE (old) == ENUMERAL_TYPE))
5343 {
5344 error ("`%#D' redeclared as %C", old, form);
5345 return NULL_TREE;
5346 }
5347 return old;
2c73f9f5 5348 }
2c73f9f5
ML
5349 if (thislevel_only || tail == global_namespace)
5350 return NULL_TREE;
5351 }
8d08fdba
MS
5352 else
5353 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5354 {
a80e4195 5355 if (TREE_PURPOSE (tail) == name)
8d08fdba
MS
5356 {
5357 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
fd87b7a7 5358
8d08fdba 5359 if (code != form
fd87b7a7 5360 && (form == ENUMERAL_TYPE || code == ENUMERAL_TYPE))
8d08fdba
MS
5361 {
5362 /* Definition isn't the kind we were looking for. */
fd87b7a7 5363 error ("`%#D' redeclared as %C", TREE_VALUE (tail), form);
72b7eeff 5364 return NULL_TREE;
8d08fdba
MS
5365 }
5366 return TREE_VALUE (tail);
5367 }
5368 }
5369 if (thislevel_only && ! level->tag_transparent)
5566b478 5370 {
74b846e0 5371 if (level->template_parms_p && allow_template_parms_p)
5566b478 5372 {
36a117a5 5373 /* We must deal with cases like this:
68642fb6 5374
36a117a5
MM
5375 template <class T> struct S;
5376 template <class T> struct S {};
68642fb6 5377
36a117a5
MM
5378 When looking up `S', for the second declaration, we
5379 would like to find the first declaration. But, we
5380 are in the pseudo-global level created for the
5381 template parameters, rather than the (surrounding)
5382 namespace level. Thus, we keep going one more level,
838dfd8a 5383 even though THISLEVEL_ONLY is nonzero. */
74b846e0 5384 allow_template_parms_p = 0;
36a117a5 5385 continue;
5566b478 5386 }
36a117a5
MM
5387 else
5388 return NULL_TREE;
5566b478 5389 }
8d08fdba
MS
5390 }
5391 return NULL_TREE;
5392}
5393
bd6dd845 5394#if 0
8d08fdba
MS
5395void
5396set_current_level_tags_transparency (tags_transparent)
5397 int tags_transparent;
5398{
5399 current_binding_level->tag_transparent = tags_transparent;
5400}
bd6dd845 5401#endif
8d08fdba
MS
5402
5403/* Given a type, find the tag that was defined for it and return the tag name.
5404 Otherwise return 0. However, the value can never be 0
5405 in the cases in which this is used.
5406
838dfd8a 5407 C++: If NAME is nonzero, this is the new name to install. This is
8d08fdba
MS
5408 done when replacing anonymous tags with real tag names. */
5409
5410static tree
5411lookup_tag_reverse (type, name)
5412 tree type;
5413 tree name;
5414{
e2500fed 5415 register struct cp_binding_level *level;
8d08fdba
MS
5416
5417 for (level = current_binding_level; level; level = level->level_chain)
5418 {
5419 register tree tail;
5420 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5421 {
5422 if (TREE_VALUE (tail) == type)
5423 {
5424 if (name)
5425 TREE_PURPOSE (tail) = name;
5426 return TREE_PURPOSE (tail);
5427 }
5428 }
5429 }
5430 return NULL_TREE;
5431}
8d08fdba 5432\f
a9aedbc2 5433/* Look up NAME in the NAMESPACE. */
e92cc029 5434
a9aedbc2
MS
5435tree
5436lookup_namespace_name (namespace, name)
5437 tree namespace, name;
5438{
30394414 5439 tree val;
f30c84c9 5440 tree template_id = NULL_TREE;
2c73f9f5 5441
30394414 5442 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
1231fb96 5443
1231fb96 5444 if (TREE_CODE (name) == NAMESPACE_DECL)
a1c65f9f 5445 /* This happens for A::B<int> when B is a namespace. */
1231fb96 5446 return name;
d8f8dca1
MM
5447 else if (TREE_CODE (name) == TEMPLATE_DECL)
5448 {
5449 /* This happens for A::B where B is a template, and there are no
5450 template arguments. */
33bd39a2 5451 error ("invalid use of `%D'", name);
d8f8dca1
MM
5452 return error_mark_node;
5453 }
1231fb96 5454
b262d64c
JM
5455 namespace = ORIGINAL_NAMESPACE (namespace);
5456
f30c84c9
MM
5457 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5458 {
5459 template_id = name;
5460 name = TREE_OPERAND (name, 0);
5461 if (TREE_CODE (name) == OVERLOAD)
5462 name = DECL_NAME (OVL_CURRENT (name));
2f939d94 5463 else if (DECL_P (name))
f30c84c9
MM
5464 name = DECL_NAME (name);
5465 }
5466
30394414 5467 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
68642fb6 5468
87e3dbc9 5469 val = make_node (CPLUS_BINDING);
52c11ef6 5470 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
2c73f9f5
ML
5471 return error_mark_node;
5472
5473 if (BINDING_VALUE (val))
1c35f5b6
JM
5474 {
5475 val = BINDING_VALUE (val);
5476
f30c84c9
MM
5477 if (template_id)
5478 {
5479 if (DECL_CLASS_TEMPLATE_P (val))
68642fb6 5480 val = lookup_template_class (val,
f30c84c9
MM
5481 TREE_OPERAND (template_id, 1),
5482 /*in_decl=*/NULL_TREE,
5483 /*context=*/NULL_TREE,
f9c244b8 5484 /*entering_scope=*/0,
c2ea3a40 5485 tf_error | tf_warning);
f30c84c9
MM
5486 else if (DECL_FUNCTION_TEMPLATE_P (val)
5487 || TREE_CODE (val) == OVERLOAD)
68642fb6 5488 val = lookup_template_function (val,
f30c84c9
MM
5489 TREE_OPERAND (template_id, 1));
5490 else
5491 {
33bd39a2 5492 error ("`%D::%D' is not a template",
f30c84c9
MM
5493 namespace, name);
5494 return error_mark_node;
5495 }
5496 }
5497
1c35f5b6
JM
5498 /* If we have a single function from a using decl, pull it out. */
5499 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5500 val = OVL_FUNCTION (val);
d52e4867
RS
5501
5502 /* Ignore built-in functions that haven't been prototyped yet. */
5503 if (!val || !DECL_P(val)
5504 || !DECL_LANG_SPECIFIC(val)
5505 || !DECL_ANTICIPATED (val))
5506 return val;
1c35f5b6
JM
5507 }
5508
33bd39a2 5509 error ("`%D' undeclared in namespace `%D'", name, namespace);
30394414 5510 return error_mark_node;
a9aedbc2
MS
5511}
5512
7ddedda4
MM
5513/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5514
e2500fed 5515static hashval_t
7ddedda4 5516typename_hash (k)
e2500fed 5517 const void * k;
7ddedda4 5518{
e2500fed
GK
5519 hashval_t hash;
5520 tree t = (tree) k;
7ddedda4 5521
7bdfd72e
KG
5522 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
5523 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
7ddedda4
MM
5524
5525 return hash;
5526}
5527
5528/* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5529
e2500fed 5530static int
7ddedda4 5531typename_compare (k1, k2)
e2500fed
GK
5532 const void * k1;
5533 const void * k2;
7ddedda4
MM
5534{
5535 tree t1;
5536 tree t2;
5537 tree d1;
5538 tree d2;
5539
5540 t1 = (tree) k1;
5541 t2 = (tree) k2;
5542 d1 = TYPE_NAME (t1);
5543 d2 = TYPE_NAME (t2);
68642fb6 5544
7ddedda4 5545 return (DECL_NAME (d1) == DECL_NAME (d2)
e2500fed 5546 && TYPE_CONTEXT (t1) == TYPE_CONTEXT (t2)
68642fb6 5547 && ((TREE_TYPE (t1) != NULL_TREE)
7ddedda4
MM
5548 == (TREE_TYPE (t2) != NULL_TREE))
5549 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5550 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5551}
5552
45869a6c
MM
5553/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5554 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5555 is non-NULL, this type is being created by the implicit typename
5556 extension, and BASE_TYPE is a type named `t' in some base class of
68642fb6 5557 `T' which depends on template parameters.
45869a6c
MM
5558
5559 Returns the new TYPENAME_TYPE. */
5560
e2500fed
GK
5561static GTY ((param_is (union tree_node))) htab_t typename_htab;
5562
45869a6c
MM
5563tree
5564build_typename_type (context, name, fullname, base_type)
5565 tree context;
5566 tree name;
5567 tree fullname;
5568 tree base_type;
5569{
5570 tree t;
5571 tree d;
e2500fed 5572 PTR *e;
45869a6c 5573
e2500fed 5574 if (typename_htab == NULL)
9cd64686 5575 {
e2500fed
GK
5576 typename_htab = htab_create_ggc (61, &typename_hash,
5577 &typename_compare, NULL);
9cd64686 5578 }
45869a6c
MM
5579
5580 /* Build the TYPENAME_TYPE. */
33848bb0 5581 t = make_aggr_type (TYPENAME_TYPE);
45869a6c
MM
5582 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5583 TYPENAME_TYPE_FULLNAME (t) = fullname;
5584 TREE_TYPE (t) = base_type;
45869a6c
MM
5585
5586 /* Build the corresponding TYPE_DECL. */
5587 d = build_decl (TYPE_DECL, name, t);
5588 TYPE_NAME (TREE_TYPE (d)) = d;
5589 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5590 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2642b9bf 5591 DECL_ARTIFICIAL (d) = 1;
45869a6c 5592
7ddedda4 5593 /* See if we already have this type. */
e2500fed
GK
5594 e = htab_find_slot (typename_htab, t, INSERT);
5595 if (*e)
5596 t = (tree) *e;
7ddedda4 5597 else
e2500fed 5598 *e = t;
7ddedda4 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.
4f2b0fb2
NS
5605 If we locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is
5606 set, we return that, rather than the _TYPE it corresponds to, in
5607 other cases we look through the type decl. If TF_ERROR is set,
5608 complain about errors, otherwise be quiet. */
3baa501d 5609
5566b478 5610tree
3baa501d 5611make_typename_type (context, name, complain)
5566b478 5612 tree context, name;
4f2b0fb2 5613 tsubst_flags_t complain;
5566b478 5614{
b2b7d40a 5615 tree fullname;
a80e4195 5616
2f939d94 5617 if (TYPE_P (name))
78638e24 5618 {
68642fb6
UD
5619 if (!(TYPE_LANG_SPECIFIC (name)
5620 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
5621 || CLASSTYPE_USE_TEMPLATE (name))))
5622 name = TYPE_IDENTIFIER (name);
5623 else
5624 /* Create a TEMPLATE_ID_EXPR for the type. */
5625 name = build_nt (TEMPLATE_ID_EXPR,
5626 CLASSTYPE_TI_TEMPLATE (name),
5627 CLASSTYPE_TI_ARGS (name));
5628 }
653cc74a 5629 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 5630 name = DECL_NAME (name);
b2b7d40a
JM
5631
5632 fullname = name;
5633
5634 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
5635 {
5636 name = TREE_OPERAND (name, 0);
5637 if (TREE_CODE (name) == TEMPLATE_DECL)
5638 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5639 }
8a2b77e7
JM
5640 if (TREE_CODE (name) == TEMPLATE_DECL)
5641 {
33bd39a2 5642 error ("`%D' used without template parameters", name);
8a2b77e7
JM
5643 return error_mark_node;
5644 }
b2b7d40a 5645 if (TREE_CODE (name) != IDENTIFIER_NODE)
a98facb0 5646 abort ();
5566b478 5647
04ddee1b
BK
5648 if (TREE_CODE (context) == NAMESPACE_DECL)
5649 {
5650 /* We can get here from typename_sub0 in the explicit_template_type
5651 expansion. Just fail. */
4f2b0fb2 5652 if (complain & tf_error)
33bd39a2 5653 error ("no class template named `%#T' in `%#T'",
3baa501d 5654 name, context);
04ddee1b
BK
5655 return error_mark_node;
5656 }
5657
85b71cf2 5658 if (! uses_template_parms (context)
b77ead33 5659 || currently_open_class (context))
5566b478 5660 {
b2b7d40a
JM
5661 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5662 {
ad810b22 5663 tree tmpl = NULL_TREE;
b2b7d40a 5664 if (IS_AGGR_TYPE (context))
ad810b22
MM
5665 tmpl = lookup_field (context, name, 0, 0);
5666 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
b2b7d40a 5667 {
4f2b0fb2 5668 if (complain & tf_error)
33bd39a2 5669 error ("no class template named `%#T' in `%#T'",
3baa501d 5670 name, context);
b2b7d40a
JM
5671 return error_mark_node;
5672 }
ffb690bd 5673
2b59fc25
KL
5674 if (complain & tf_error)
5675 {
5676 if (complain & tf_parsing)
5677 type_access_control (context, tmpl);
5678 else
5679 enforce_access (context, tmpl);
5680 }
ba59df78 5681
68642fb6 5682 return lookup_template_class (tmpl,
ad810b22 5683 TREE_OPERAND (fullname, 1),
68642fb6 5684 NULL_TREE, context,
f9c244b8 5685 /*entering_scope=*/0,
c2ea3a40 5686 tf_error | tf_warning);
b2b7d40a
JM
5687 }
5688 else
5566b478 5689 {
b4f70b3d 5690 tree t;
68642fb6 5691
b4f70b3d 5692 if (!IS_AGGR_TYPE (context))
b2b7d40a 5693 {
4f2b0fb2 5694 if (complain & tf_error)
33bd39a2 5695 error ("no type named `%#T' in `%#T'", name, context);
b2b7d40a
JM
5696 return error_mark_node;
5697 }
1107c4b3 5698
b4f70b3d 5699 t = lookup_field (context, name, 0, 1);
7d4bdeed 5700 if (t)
4f2b0fb2 5701 {
8c081e84
MM
5702 if (TREE_CODE (t) != TYPE_DECL)
5703 {
5704 if (complain & tf_error)
5705 error ("no type named `%#T' in `%#T'", name, context);
5706 return error_mark_node;
5707 }
5708
2b59fc25
KL
5709 if (complain & tf_error)
5710 {
5711 if (complain & tf_parsing)
5712 type_access_control (context, t);
5713 else
5714 enforce_access (context, t);
5715 }
ba59df78 5716
4f2b0fb2
NS
5717 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
5718 t = TREE_TYPE (t);
ba3307c0
NS
5719 if (IMPLICIT_TYPENAME_P (t))
5720 {
5721 /* Lookup found an implicit typename that we had
5722 injected into the current scope. Doing things
5723 properly would have located the exact same type,
5724 so there is no error here. We must remove the
5725 implicitness so that we do not warn about it. */
5726 t = copy_node (t);
5727 TREE_TYPE (t) = NULL_TREE;
5728 }
5729
4f2b0fb2
NS
5730 return t;
5731 }
5566b478 5732 }
5566b478 5733 }
11249cf0
MM
5734
5735 /* If the CONTEXT is not a template type, then either the field is
5736 there now or its never going to be. */
b4f70b3d 5737 if (!uses_template_parms (context))
11249cf0 5738 {
4f2b0fb2 5739 if (complain & tf_error)
33bd39a2 5740 error ("no type named `%#T' in `%#T'", name, context);
11249cf0
MM
5741 return error_mark_node;
5742 }
68642fb6 5743
45869a6c 5744 return build_typename_type (context, name, fullname, NULL_TREE);
5566b478
MS
5745}
5746
b8c6534b
KL
5747/* Resolve `CONTEXT::template NAME'. Returns an appropriate type,
5748 unless an error occurs, in which case error_mark_node is returned.
4f2b0fb2
NS
5749 If we locate a TYPE_DECL, we return that, rather than the _TYPE it
5750 corresponds to. If COMPLAIN zero, don't complain about any errors
5751 that occur. */
b8c6534b
KL
5752
5753tree
5754make_unbound_class_template (context, name, complain)
5755 tree context, name;
4f09be91 5756 tsubst_flags_t complain;
b8c6534b
KL
5757{
5758 tree t;
5759 tree d;
5760
5761 if (TYPE_P (name))
5762 name = TYPE_IDENTIFIER (name);
5763 else if (DECL_P (name))
5764 name = DECL_NAME (name);
5765 if (TREE_CODE (name) != IDENTIFIER_NODE)
a98facb0 5766 abort ();
b8c6534b
KL
5767
5768 if (!uses_template_parms (context)
5769 || currently_open_class (context))
5770 {
5771 tree tmpl = NULL_TREE;
5772
5773 if (IS_AGGR_TYPE (context))
5774 tmpl = lookup_field (context, name, 0, 0);
5775
5776 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5777 {
4f09be91 5778 if (complain & tf_error)
33bd39a2 5779 error ("no class template named `%#T' in `%#T'", name, context);
b8c6534b
KL
5780 return error_mark_node;
5781 }
5782
2b59fc25
KL
5783 if (complain & tf_error)
5784 {
5785 if (complain & tf_parsing)
5786 type_access_control (context, tmpl);
5787 else
5788 enforce_access (context, tmpl);
5789 }
b8c6534b
KL
5790
5791 return tmpl;
5792 }
5793
5794 /* Build the UNBOUND_CLASS_TEMPLATE. */
5795 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
5796 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5797 TREE_TYPE (t) = NULL_TREE;
5798
5799 /* Build the corresponding TEMPLATE_DECL. */
5800 d = build_decl (TEMPLATE_DECL, name, t);
5801 TYPE_NAME (TREE_TYPE (d)) = d;
5802 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5803 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5804 DECL_ARTIFICIAL (d) = 1;
5805
5806 return t;
5807}
5808
a1c65f9f 5809/* Select the right _DECL from multiple choices. */
2c73f9f5
ML
5810
5811static tree
52c11ef6 5812select_decl (binding, flags)
2c73f9f5 5813 tree binding;
52c11ef6 5814 int flags;
2c73f9f5
ML
5815{
5816 tree val;
5817 val = BINDING_VALUE (binding);
97ba1e3c 5818
52c11ef6 5819 if (LOOKUP_NAMESPACES_ONLY (flags))
3e3f722c 5820 {
a1c65f9f 5821 /* We are not interested in types. */
3e3f722c
ML
5822 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5823 return val;
5824 return NULL_TREE;
5825 }
68642fb6 5826
2c73f9f5
ML
5827 /* If we could have a type and
5828 we have nothing or we need a type and have none. */
5829 if (BINDING_TYPE (binding)
52c11ef6
JM
5830 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5831 && TREE_CODE (val) != TYPE_DECL)))
2c73f9f5 5832 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
a1c65f9f 5833 /* Don't return non-types if we really prefer types. */
52c11ef6 5834 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
c592d5d2
ML
5835 && (TREE_CODE (val) != TEMPLATE_DECL
5836 || !DECL_CLASS_TEMPLATE_P (val)))
2c73f9f5 5837 val = NULL_TREE;
1c35f5b6 5838
2c73f9f5
ML
5839 return val;
5840}
5841
2c169bab
JM
5842/* Unscoped lookup of a global: iterate over current namespaces,
5843 considering using-directives. If SPACESP is non-NULL, store a list
5844 of the namespaces we've considered in it. */
ea9635c7 5845
2c169bab
JM
5846tree
5847unqualified_namespace_lookup (name, flags, spacesp)
ea9635c7 5848 tree name;
52c11ef6 5849 int flags;
2c169bab 5850 tree *spacesp;
ea9635c7 5851{
87e3dbc9 5852 tree b = make_node (CPLUS_BINDING);
ee8fc32b 5853 tree initial = current_decl_namespace ();
ea9635c7
ML
5854 tree scope = initial;
5855 tree siter;
e2500fed 5856 struct cp_binding_level *level;
ea9635c7
ML
5857 tree val = NULL_TREE;
5858
2c169bab
JM
5859 if (spacesp)
5860 *spacesp = NULL_TREE;
5861
5862 for (; !val; scope = CP_DECL_CONTEXT (scope))
ea9635c7 5863 {
2c169bab 5864 if (spacesp)
e1b3e07d 5865 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
ea9635c7
ML
5866 val = binding_for_name (name, scope);
5867
d52e4867
RS
5868 /* Ignore anticipated built-in functions. */
5869 if (val && BINDING_VALUE (val)
5870 && DECL_P (BINDING_VALUE (val))
5871 && DECL_LANG_SPECIFIC (BINDING_VALUE (val))
5872 && DECL_ANTICIPATED (BINDING_VALUE (val)))
5873 {
5874 BINDING_VALUE (b) = NULL_TREE;
5875 BINDING_TYPE (b) = NULL_TREE;
5876 }
5877 else
5878 {
a1c65f9f 5879 /* Initialize binding for this context. */
d52e4867
RS
5880 BINDING_VALUE (b) = BINDING_VALUE (val);
5881 BINDING_TYPE (b) = BINDING_TYPE (val);
5882 }
ea9635c7 5883
a1c65f9f 5884 /* Add all _DECLs seen through local using-directives. */
68642fb6 5885 for (level = current_binding_level;
ea9635c7
ML
5886 !level->namespace_p;
5887 level = level->level_chain)
52c11ef6 5888 if (!lookup_using_namespace (name, b, level->using_directives,
2c169bab 5889 scope, flags, spacesp))
a1c65f9f 5890 /* Give up because of error. */
5b163de4 5891 return error_mark_node;
ea9635c7 5892
a1c65f9f
KH
5893 /* Add all _DECLs seen through global using-directives. */
5894 /* XXX local and global using lists should work equally. */
ea9635c7
ML
5895 siter = initial;
5896 while (1)
5897 {
68642fb6 5898 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
2c169bab 5899 scope, flags, spacesp))
a1c65f9f 5900 /* Give up because of error. */
5b163de4 5901 return error_mark_node;
ea9635c7
ML
5902 if (siter == scope) break;
5903 siter = CP_DECL_CONTEXT (siter);
5904 }
5905
52c11ef6 5906 val = select_decl (b, flags);
ea9635c7
ML
5907 if (scope == global_namespace)
5908 break;
ea9635c7
ML
5909 }
5910 return val;
5911}
5912
52c11ef6
JM
5913/* Combine prefer_type and namespaces_only into flags. */
5914
5915static int
5916lookup_flags (prefer_type, namespaces_only)
5917 int prefer_type, namespaces_only;
5918{
5919 if (namespaces_only)
5920 return LOOKUP_PREFER_NAMESPACES;
5921 if (prefer_type > 1)
5922 return LOOKUP_PREFER_TYPES;
5923 if (prefer_type > 0)
5924 return LOOKUP_PREFER_BOTH;
5925 return 0;
5926}
5927
5928/* Given a lookup that returned VAL, use FLAGS to decide if we want to
5929 ignore it or not. Subroutine of lookup_name_real. */
5930
5931static tree
5932qualify_lookup (val, flags)
5933 tree val;
5934 int flags;
5935{
5936 if (val == NULL_TREE)
5937 return val;
6b945830
JM
5938 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5939 return val;
eea9800f 5940 if ((flags & LOOKUP_PREFER_TYPES) && TREE_CODE (val) == TYPE_DECL)
6b945830
JM
5941 return val;
5942 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
52c11ef6
JM
5943 return NULL_TREE;
5944 return val;
5945}
5946
235f734d
MM
5947/* Any other BINDING overrides an implicit TYPENAME. Warn about
5948 that. */
5949
5950static void
5951warn_about_implicit_typename_lookup (typename, binding)
5952 tree typename;
5953 tree binding;
5954{
5955 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5956 tree name = DECL_NAME (typename);
5957
5958 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5959 && CLASSTYPE_TEMPLATE_INFO (subtype)
5960 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5961 && ! (TREE_CODE (binding) == TYPE_DECL
5962 && same_type_p (TREE_TYPE (binding), subtype)))
5963 {
33bd39a2 5964 warning ("lookup of `%D' finds `%#D'",
235f734d 5965 name, binding);
33bd39a2 5966 warning (" instead of `%D' from dependent base class",
235f734d 5967 typename);
33bd39a2 5968 warning (" (use `typename %T::%D' if that's what you meant)",
235f734d
MM
5969 constructor_name (current_class_type), name);
5970 }
5971}
5972
a723baf1
MM
5973/* Look up NAME (an IDENTIFIER_NODE) in SCOPE (either a NAMESPACE_DECL
5974 or a class TYPE). If IS_TYPE_P is TRUE, then ignore non-type
5975 bindings.
5976
5977 Returns a DECL (or OVERLOAD, or BASELINK) representing the
5978 declaration found. */
5979
5980tree
5981lookup_qualified_name (tree scope, tree name, bool is_type_p, int flags)
5982{
5983 if (TREE_CODE (scope) == NAMESPACE_DECL)
5984 {
5985 tree val;
5986
5987 val = make_node (CPLUS_BINDING);
5988 flags |= LOOKUP_COMPLAIN;
5989 if (is_type_p)
5990 flags |= LOOKUP_PREFER_TYPES;
5991 if (!qualified_lookup_using_namespace (name, scope, val, flags))
5992 return NULL_TREE;
5993 return select_decl (val, flags);
5994 }
5995 else
5996 return lookup_member (scope, name, 0, is_type_p);
5997}
5998
5f261ba9
MM
5999/* Check to see whether or not DECL is a variable that would have been
6000 in scope under the ARM, but is not in scope under the ANSI/ISO
6001 standard. If so, issue an error message. If name lookup would
6002 work in both cases, but return a different result, this function
6003 returns the result of ANSI/ISO lookup. Otherwise, it returns
6004 DECL. */
6005
6006tree
6007check_for_out_of_scope_variable (tree decl)
6008{
6009 tree shadowed;
6010
6011 /* We only care about out of scope variables. */
6012 if (!(TREE_CODE (decl) == VAR_DECL && DECL_DEAD_FOR_LOCAL (decl)))
6013 return decl;
6014
6015 shadowed = DECL_SHADOWED_FOR_VAR (decl);
6016 while (shadowed != NULL_TREE && TREE_CODE (shadowed) == VAR_DECL
6017 && DECL_DEAD_FOR_LOCAL (shadowed))
6018 shadowed = DECL_SHADOWED_FOR_VAR (shadowed);
6019 if (!shadowed)
6020 shadowed = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (decl));
6021 if (shadowed)
6022 {
6023 if (!DECL_ERROR_REPORTED (decl))
6024 {
6025 warning ("name lookup of `%D' changed",
6026 DECL_NAME (decl));
6027 cp_warning_at (" matches this `%D' under ISO standard rules",
6028 shadowed);
6029 cp_warning_at (" matches this `%D' under old rules", decl);
6030 DECL_ERROR_REPORTED (decl) = 1;
6031 }
6032 return shadowed;
6033 }
6034
6035 /* If we have already complained about this declaration, there's no
6036 need to do it again. */
6037 if (DECL_ERROR_REPORTED (decl))
6038 return decl;
6039
6040 DECL_ERROR_REPORTED (decl) = 1;
6041 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6042 {
6043 error ("name lookup of `%D' changed for new ISO `for' scoping",
6044 DECL_NAME (decl));
6045 cp_error_at (" cannot use obsolete binding at `%D' because it has a destructor", decl);
6046 return error_mark_node;
6047 }
6048 else
6049 {
6050 pedwarn ("name lookup of `%D' changed for new ISO `for' scoping",
6051 DECL_NAME (decl));
6052 cp_pedwarn_at (" using obsolete binding at `%D'", decl);
6053 }
6054
6055 return decl;
6056}
6057
8d08fdba
MS
6058/* Look up NAME in the current binding level and its superiors in the
6059 namespace of variables, functions and typedefs. Return a ..._DECL
6060 node of some kind representing its definition if there is only one
6061 such declaration, or return a TREE_LIST with all the overloaded
6062 definitions if there are many, or return 0 if it is undefined.
6063
2c73f9f5
ML
6064 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
6065 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
68642fb6 6066 Otherwise we prefer non-TYPE_DECLs.
f84b4be9 6067
838dfd8a 6068 If NONCLASS is nonzero, we don't look for the NAME in class scope,
f84b4be9 6069 using IDENTIFIER_CLASS_VALUE. */
8d08fdba 6070
a723baf1
MM
6071tree
6072lookup_name_real (tree name,
6073 int prefer_type,
6074 int nonclass,
6075 int namespaces_only,
6076 int flags)
8d08fdba 6077{
235f734d
MM
6078 tree t;
6079 tree val = NULL_TREE;
235f734d 6080 int val_is_implicit_typename = 0;
8d08fdba 6081
a723baf1
MM
6082 /* Conversion operators are handled specially because ordinary
6083 unqualified name lookup will not find template conversion
6084 operators. */
6085 if (IDENTIFIER_TYPENAME_P (name))
a28e3c7f 6086 {
a723baf1 6087 struct cp_binding_level *level;
68642fb6 6088
a723baf1
MM
6089 for (level = current_binding_level;
6090 level && !level->namespace_p;
6091 level = level->level_chain)
a28e3c7f 6092 {
a723baf1
MM
6093 tree class_type;
6094 tree operators;
6095
6096 /* A conversion operator can only be declared in a class
6097 scope. */
6098 if (level->parm_flag != 2)
6099 continue;
6100
6101 /* Lookup the conversion operator in the class. */
6102 class_type = level->this_class;
6103 operators = lookup_fnfields (class_type, name, /*protect=*/0);
6104 if (operators)
6105 return operators;
a28e3c7f 6106 }
e1cd6e56 6107
a723baf1 6108 return NULL_TREE;
5b163de4 6109 }
e76a2646 6110
a723baf1
MM
6111 flags |= lookup_flags (prefer_type, namespaces_only);
6112
d8f8dca1 6113 /* First, look in non-namespace scopes. */
6f1b4c42
JM
6114
6115 if (current_class_type == NULL_TREE)
6116 nonclass = 1;
6117
235f734d 6118 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
d8f8dca1 6119 {
235f734d
MM
6120 tree binding;
6121
6122 if (!LOCAL_BINDING_P (t) && nonclass)
d8f8dca1
MM
6123 /* We're not looking for class-scoped bindings, so keep going. */
6124 continue;
68642fb6 6125
d8f8dca1 6126 /* If this is the kind of thing we're looking for, we're done. */
235f734d
MM
6127 if (qualify_lookup (BINDING_VALUE (t), flags))
6128 binding = BINDING_VALUE (t);
68642fb6 6129 else if ((flags & LOOKUP_PREFER_TYPES)
235f734d
MM
6130 && qualify_lookup (BINDING_TYPE (t), flags))
6131 binding = BINDING_TYPE (t);
6132 else
6133 binding = NULL_TREE;
6134
6135 if (binding
83233dca 6136 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
d8f8dca1 6137 {
afd9b9dd 6138 if (val_is_implicit_typename)
235f734d
MM
6139 warn_about_implicit_typename_lookup (val, binding);
6140 val = binding;
68642fb6 6141 val_is_implicit_typename
83233dca 6142 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
235f734d
MM
6143 if (!val_is_implicit_typename)
6144 break;
d8f8dca1
MM
6145 }
6146 }
f181d4ae 6147
235f734d
MM
6148 /* Now lookup in namespace scopes. */
6149 if (!val || val_is_implicit_typename)
e76a2646 6150 {
2c169bab 6151 t = unqualified_namespace_lookup (name, flags, 0);
235f734d 6152 if (t)
c1def683 6153 {
afd9b9dd 6154 if (val_is_implicit_typename)
235f734d
MM
6155 warn_about_implicit_typename_lookup (val, t);
6156 val = t;
c1def683
JM
6157 }
6158 }
6159
8d08fdba
MS
6160 if (val)
6161 {
0c64a9ca
JM
6162 /* If we have a single function from a using decl, pull it out. */
6163 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
6164 val = OVL_FUNCTION (val);
8d08fdba 6165 }
0ca7178c 6166
8d08fdba
MS
6167 return val;
6168}
6169
700f8a87
MS
6170tree
6171lookup_name_nonclass (name)
6172 tree name;
6173{
a723baf1 6174 return lookup_name_real (name, 0, 1, 0, LOOKUP_COMPLAIN);
700f8a87
MS
6175}
6176
2c73f9f5
ML
6177tree
6178lookup_function_nonclass (name, args)
6179 tree name;
6180 tree args;
6181{
6182 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
6183}
6184
700f8a87
MS
6185tree
6186lookup_name (name, prefer_type)
6187 tree name;
6188 int prefer_type;
6189{
a723baf1 6190 return lookup_name_real (name, prefer_type, 0, 0, LOOKUP_COMPLAIN);
700f8a87
MS
6191}
6192
a7d2d407
MM
6193/* Similar to `lookup_name' but look only in the innermost non-class
6194 binding level. */
8d08fdba
MS
6195
6196tree
6197lookup_name_current_level (name)
6198 tree name;
6199{
e2500fed 6200 struct cp_binding_level *b;
a7d2d407 6201 tree t = NULL_TREE;
8d08fdba 6202
a7d2d407
MM
6203 b = current_binding_level;
6204 while (b->parm_flag == 2)
6205 b = b->level_chain;
6206
6207 if (b->namespace_p)
8d08fdba 6208 {
5fdaba89 6209 t = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
6210
6211 /* extern "C" function() */
6212 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
6213 t = TREE_VALUE (t);
6214 }
68642fb6 6215 else if (IDENTIFIER_BINDING (name)
f181d4ae 6216 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
8d08fdba 6217 {
a4443a08
MS
6218 while (1)
6219 {
f181d4ae
MM
6220 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6221 return IDENTIFIER_VALUE (name);
68642fb6 6222
9ed182dc
JM
6223 if (b->keep == 2)
6224 b = b->level_chain;
6225 else
6226 break;
6227 }
6228 }
6229
6230 return t;
6231}
6232
6233/* Like lookup_name_current_level, but for types. */
6234
6235tree
6236lookup_type_current_level (name)
6237 tree name;
6238{
6239 register tree t = NULL_TREE;
6240
6241 my_friendly_assert (! current_binding_level->namespace_p, 980716);
6242
6243 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6244 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6245 {
e2500fed 6246 struct cp_binding_level *b = current_binding_level;
9ed182dc
JM
6247 while (1)
6248 {
6249 if (purpose_member (name, b->type_shadowed))
6250 return REAL_IDENTIFIER_TYPE_VALUE (name);
a4443a08
MS
6251 if (b->keep == 2)
6252 b = b->level_chain;
6253 else
6254 break;
6255 }
8d08fdba
MS
6256 }
6257
6258 return t;
6259}
3e3f722c 6260
8d08fdba 6261\f
8d08fdba 6262/* Push the declarations of builtin types into the namespace.
0e5921e8 6263 RID_INDEX is the index of the builtin type
8d08fdba
MS
6264 in the array RID_POINTERS. NAME is the name used when looking
6265 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6266
eaa7c03f 6267void
8d08fdba
MS
6268record_builtin_type (rid_index, name, type)
6269 enum rid rid_index;
d8e178a0 6270 const char *name;
8d08fdba
MS
6271 tree type;
6272{
6273 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 6274 tree tdecl = NULL_TREE;
8d08fdba 6275
0e5921e8 6276 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
6277 rname = ridpointers[(int) rid_index];
6278 if (name)
6279 tname = get_identifier (name);
6280
6281 TYPE_BUILT_IN (type) = 1;
68642fb6 6282
8d08fdba
MS
6283 if (tname)
6284 {
8d08fdba 6285 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
8d08fdba 6286 set_identifier_type_value (tname, NULL_TREE);
0e5921e8 6287 if ((int) rid_index < (int) RID_MAX)
a1c65f9f 6288 /* Built-in types live in the global namespace. */
2c73f9f5 6289 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba
MS
6290 }
6291 if (rname != NULL_TREE)
6292 {
6293 if (tname != NULL_TREE)
6294 {
6295 set_identifier_type_value (rname, NULL_TREE);
2c73f9f5 6296 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba
MS
6297 }
6298 else
6299 {
8d08fdba 6300 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
8d08fdba
MS
6301 set_identifier_type_value (rname, NULL_TREE);
6302 }
6303 }
8d08fdba
MS
6304}
6305
eff71ab0 6306/* Record one of the standard Java types.
4d8a1dd6
MM
6307 * Declare it as having the given NAME.
6308 * If SIZE > 0, it is the size of one of the integral types;
6309 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
6310
6311static tree
6312record_builtin_java_type (name, size)
d8e178a0 6313 const char *name;
eff71ab0
PB
6314 int size;
6315{
6316 tree type, decl;
6317 if (size > 0)
6318 type = make_signed_type (size);
6319 else if (size > -32)
a1c65f9f 6320 { /* "__java_char" or ""__java_boolean". */
eff71ab0
PB
6321 type = make_unsigned_type (-size);
6322 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6323 }
6324 else
a1c65f9f 6325 { /* "__java_float" or ""__java_double". */
eff71ab0
PB
6326 type = make_node (REAL_TYPE);
6327 TYPE_PRECISION (type) = - size;
6328 layout_type (type);
6329 }
0e5921e8 6330 record_builtin_type (RID_MAX, name, type);
eff71ab0 6331 decl = TYPE_NAME (type);
e229f2cd
PB
6332
6333 /* Suppress generate debug symbol entries for these types,
6334 since for normal C++ they are just clutter.
a1c65f9f 6335 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 6336 DECL_IGNORED_P (decl) = 1;
e229f2cd 6337
eff71ab0
PB
6338 TYPE_FOR_JAVA (type) = 1;
6339 return type;
6340}
6341
a1c65f9f 6342/* Push a type into the namespace so that the back-ends ignore it. */
036407f7
ML
6343
6344static void
6345record_unknown_type (type, name)
6346 tree type;
d8e178a0 6347 const char *name;
036407f7
ML
6348{
6349 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6350 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6351 DECL_IGNORED_P (decl) = 1;
6352 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6353 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6354 TYPE_ALIGN (type) = 1;
11cf4d18 6355 TYPE_USER_ALIGN (type) = 0;
036407f7 6356 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 6357}
036407f7 6358
d43829f9
MM
6359/* An string for which we should create an IDENTIFIER_NODE at
6360 startup. */
6361
6362typedef struct predefined_identifier
6363{
6364 /* The name of the identifier. */
8b60264b 6365 const char *const name;
d43829f9 6366 /* The place where the IDENTIFIER_NODE should be stored. */
8b60264b 6367 tree *const node;
838dfd8a 6368 /* Nonzero if this is the name of a constructor or destructor. */
8b60264b 6369 const int ctor_or_dtor_p;
d43829f9
MM
6370} predefined_identifier;
6371
6372/* Create all the predefined identifiers. */
6373
6374static void
5362b086 6375initialize_predefined_identifiers ()
d43829f9 6376{
8b60264b 6377 const predefined_identifier *pid;
d43829f9
MM
6378
6379 /* A table of identifiers to create at startup. */
8b60264b 6380 static const predefined_identifier predefined_identifiers[] = {
298d6f60
MM
6381 { "C++", &lang_name_cplusplus, 0 },
6382 { "C", &lang_name_c, 0 },
6383 { "Java", &lang_name_java, 0 },
6384 { CTOR_NAME, &ctor_identifier, 1 },
6385 { "__base_ctor", &base_ctor_identifier, 1 },
6386 { "__comp_ctor", &complete_ctor_identifier, 1 },
6387 { DTOR_NAME, &dtor_identifier, 1 },
6388 { "__comp_dtor", &complete_dtor_identifier, 1 },
6389 { "__base_dtor", &base_dtor_identifier, 1 },
6390 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
298d6f60 6391 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
298d6f60
MM
6392 { "nelts", &nelts_identifier, 0 },
6393 { THIS_NAME, &this_identifier, 0 },
c4372ef4 6394 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
298d6f60 6395 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
298d6f60 6396 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 6397 { "__vtt_parm", &vtt_parm_identifier, 0 },
1f6e1acc 6398 { "std", &std_identifier, 0 },
298d6f60 6399 { NULL, NULL, 0 }
d43829f9
MM
6400 };
6401
6402 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
6403 {
6404 *pid->node = get_identifier (pid->name);
6405 if (pid->ctor_or_dtor_p)
6406 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6407 }
d43829f9
MM
6408}
6409
8d08fdba
MS
6410/* Create the predefined scalar types of C,
6411 and some nodes representing standard constants (0, 1, (void *)0).
6412 Initialize the global binding level.
6413 Make definitions for built-in primitive functions. */
6414
6415void
f5e99456 6416cxx_init_decl_processing ()
8d08fdba 6417{
10841285
MM
6418 tree void_ftype;
6419 tree void_ftype_ptr;
8d08fdba 6420
d43829f9
MM
6421 /* Create all the identifiers we need. */
6422 initialize_predefined_identifiers ();
8d08fdba 6423
8f17b5c5 6424 /* Fill in back-end hooks. */
d363e7bf 6425 lang_missing_noreturn_ok_p = &cp_missing_noreturn_ok_p;
99dccabc 6426
9cd64686
MM
6427 /* Create the global variables. */
6428 push_to_top_level ();
8012c983 6429
a1c65f9f 6430 /* Enter the global namespace. */
30394414 6431 my_friendly_assert (global_namespace == NULL_TREE, 375);
30394414
JM
6432 push_namespace (get_identifier ("::"));
6433 global_namespace = current_namespace;
6434 current_lang_name = NULL_TREE;
6435
bccd95ae 6436 /* Adjust various flags based on command-line settings. */
2642b9bf
JM
6437 if (! flag_permissive && ! pedantic)
6438 flag_pedantic_errors = 1;
bccd95ae 6439 if (!flag_no_inline)
b850de4f
MM
6440 {
6441 flag_inline_trees = 1;
6442 flag_no_inline = 1;
6443 }
acc72c37
MM
6444 if (flag_inline_functions)
6445 {
6446 flag_inline_trees = 2;
6447 flag_inline_functions = 0;
6448 }
830fcda8 6449
f963b5d9
RS
6450 /* Force minimum function alignment if using the least significant
6451 bit of function pointers to store the virtual bit. */
6452 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6453 && force_align_functions_log < 1)
6454 force_align_functions_log = 1;
6455
8d08fdba
MS
6456 /* Initially, C. */
6457 current_lang_name = lang_name_c;
6458
6459 current_function_decl = NULL_TREE;
8d08fdba
MS
6460 current_binding_level = NULL_BINDING_LEVEL;
6461 free_binding_level = NULL_BINDING_LEVEL;
6462
81b3411c
BS
6463 build_common_tree_nodes (flag_signed_char);
6464
8d08fdba
MS
6465 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6466 TREE_TYPE (error_mark_list) = error_mark_node;
6467
a28e3c7f
MS
6468 /* Make the binding_level structure for global names. */
6469 pushlevel (0);
8d08fdba 6470 global_binding_level = current_binding_level;
2c73f9f5
ML
6471 /* The global level is the namespace level of ::. */
6472 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6473 declare_namespace_level ();
8d08fdba 6474
6bcedb4e 6475 /* Create the `std' namespace. */
1dbb6023
NS
6476 push_namespace (std_identifier);
6477 std_node = current_namespace;
6478 pop_namespace ();
5362b086 6479
eaa7c03f 6480 c_common_nodes_and_builtins ();
37c46b43 6481
4d8a1dd6
MM
6482 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6483 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6484 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6485 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6486 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6487 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6488 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6489 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 6490
8d08fdba
MS
6491 integer_two_node = build_int_2 (2, 0);
6492 TREE_TYPE (integer_two_node) = integer_type_node;
6493 integer_three_node = build_int_2 (3, 0);
6494 TREE_TYPE (integer_three_node) = integer_type_node;
8d08fdba 6495
255512c1
JM
6496 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6497 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
c1ea6a0b
BK
6498 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6499 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6500 TYPE_PRECISION (boolean_type_node) = 1;
255512c1
JM
6501 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6502 boolean_false_node = build_int_2 (0, 0);
6503 TREE_TYPE (boolean_false_node) = boolean_type_node;
6504 boolean_true_node = build_int_2 (1, 0);
6505 TREE_TYPE (boolean_true_node) = boolean_type_node;
2986ae00 6506
4cc1d462 6507 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
6508
6509#if 0
3e411c3f 6510 record_builtin_type (RID_MAX, NULL, string_type_node);
5fd8e536
JM
6511#endif
6512
1f84ec23
MM
6513 delta_type_node = ptrdiff_type_node;
6514 vtable_index_type = ptrdiff_type_node;
c7e266a6 6515
3ec6bad3 6516 vtt_parm_type = build_pointer_type (const_ptr_type_node);
10841285
MM
6517 void_ftype = build_function_type (void_type_node, void_list_node);
6518 void_ftype_ptr = build_function_type (void_type_node,
6519 tree_cons (NULL_TREE,
6520 ptr_type_node,
6521 void_list_node));
824b9a4c 6522 void_ftype_ptr
4cc1d462 6523 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 6524
8d08fdba
MS
6525 /* C++ extensions */
6526
6527 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
6528 record_unknown_type (unknown_type_node, "unknown type");
6529
8d08fdba
MS
6530 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6531 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 6532
a6967cc0
JM
6533 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6534 result. */
8d08fdba
MS
6535 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6536 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6537
c4372ef4
NS
6538 {
6539 /* Make sure we get a unique function type, so we can give
6540 its pointer type a name. (This wins for gdb.) */
6541 tree vfunc_type = make_node (FUNCTION_TYPE);
6542 TREE_TYPE (vfunc_type) = integer_type_node;
6543 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6544 layout_type (vfunc_type);
6545
6546 vtable_entry_type = build_pointer_type (vfunc_type);
6547 }
0e5921e8 6548 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 6549
8d08fdba 6550 vtbl_type_node
52bf7d5d 6551 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 6552 layout_type (vtbl_type_node);
91063b51 6553 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3e411c3f 6554 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
849da744
MM
6555 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6556 layout_type (vtbl_ptr_type_node);
3e411c3f 6557 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
8d08fdba 6558
1f84ec23
MM
6559 push_namespace (get_identifier ("__cxxabiv1"));
6560 abi_node = current_namespace;
6561 pop_namespace ();
6633d636 6562
2c73f9f5 6563 global_type_node = make_node (LANG_TYPE);
036407f7 6564 record_unknown_type (global_type_node, "global type");
2c73f9f5 6565
db5ae43f
MS
6566 /* Now, C++. */
6567 current_lang_name = lang_name_cplusplus;
8d08fdba 6568
ced78d8b 6569 {
2c73f9f5 6570 tree bad_alloc_type_node, newtype, deltype;
10841285
MM
6571 tree ptr_ftype_sizetype;
6572
1dbb6023 6573 push_namespace (std_identifier);
88e5899c
MM
6574 bad_alloc_type_node
6575 = xref_tag (class_type, get_identifier ("bad_alloc"),
6576 /*attributes=*/NULL_TREE, 1);
1dbb6023 6577 pop_namespace ();
10841285
MM
6578 ptr_ftype_sizetype
6579 = build_function_type (ptr_type_node,
6580 tree_cons (NULL_TREE,
c9f8536c 6581 size_type_node,
10841285 6582 void_list_node));
2c73f9f5 6583 newtype = build_exception_variant
0ba8a114
NS
6584 (ptr_ftype_sizetype, add_exception_specifier
6585 (NULL_TREE, bad_alloc_type_node, -1));
4cc1d462 6586 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
6587 push_cp_library_fn (NEW_EXPR, newtype);
6588 push_cp_library_fn (VEC_NEW_EXPR, newtype);
6589 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
6590 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 6591 }
8d08fdba
MS
6592
6593 abort_fndecl
1f84ec23 6594 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 6595
8d08fdba
MS
6596 /* Perform other language dependent initializations. */
6597 init_class_processing ();
8d08fdba 6598 init_search_processing ();
db48b831 6599 init_rtti_processing ();
8d08fdba 6600
6467930b 6601 if (flag_exceptions)
8d2733ca 6602 init_exception_processing ();
9e9ff709 6603
7fcdf4c2 6604 if (! supports_one_only ())
72b7eeff 6605 flag_weak = 0;
8d08fdba 6606
2ce07e2d 6607 make_fname_decl = cp_make_fname_decl;
0ba8a114 6608 start_fname_decls ();
8d08fdba 6609
e9a25f70
JL
6610 /* Show we use EH for cleanups. */
6611 using_eh_for_cleanups ();
62c154ed 6612
d9cf7c82
JM
6613 /* Maintain consistency. Perhaps we should just complain if they
6614 say -fwritable-strings? */
6615 if (flag_writable_strings)
6616 flag_const_strings = 0;
62c154ed
JM
6617}
6618
0ba8a114
NS
6619/* Generate an initializer for a function naming variable from
6620 NAME. NAME may be NULL, in which case we generate a special
a1c65f9f 6621 ERROR_MARK node which should be replaced later. */
0ba8a114
NS
6622
6623tree
6624cp_fname_init (name)
6625 const char *name;
6626{
6627 tree domain = NULL_TREE;
6628 tree type;
6629 tree init = NULL_TREE;
6630 size_t length = 0;
6631
6632 if (name)
6633 {
6634 length = strlen (name);
6635 domain = build_index_type (size_int (length));
6636 init = build_string (length + 1, name);
6637 }
6638
6639 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
6640 type = build_cplus_array_type (type, domain);
6641
6642 if (init)
6643 TREE_TYPE (init) = type;
6644 else
6645 /* We don't know the value until instantiation time. Make
a1c65f9f 6646 something which will be digested now, but replaced later. */
0ba8a114
NS
6647 init = build (ERROR_MARK, type);
6648
6649 return init;
6650}
6651
2ce07e2d
NS
6652/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6653 decl, NAME is the initialization string and TYPE_DEP indicates whether
6654 NAME depended on the type of the function. We make use of that to detect
0ba8a114
NS
6655 __PRETTY_FUNCTION__ inside a template fn. This is being done
6656 lazily at the point of first use, so we musn't push the decl now. */
2ce07e2d
NS
6657
6658static tree
0ba8a114 6659cp_make_fname_decl (id, type_dep)
2ce07e2d 6660 tree id;
2ce07e2d
NS
6661 int type_dep;
6662{
83182544 6663 const char *const name = (type_dep && processing_template_decl
0ba8a114
NS
6664 ? NULL : fname_as_string (type_dep));
6665 tree init = cp_fname_init (name);
6666 tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init));
2ce07e2d 6667
6cce57b0 6668 /* As we're using pushdecl_with_scope, we must set the context. */
0ba8a114
NS
6669 DECL_CONTEXT (decl) = current_function_decl;
6670 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
6671
2ce07e2d
NS
6672 TREE_STATIC (decl) = 1;
6673 TREE_READONLY (decl) = 1;
2ce07e2d 6674 DECL_ARTIFICIAL (decl) = 1;
2ce07e2d 6675 DECL_INITIAL (decl) = init;
0ba8a114
NS
6676
6677 TREE_USED (decl) = 1;
5362b086 6678
6cce57b0
JM
6679 if (current_function_decl)
6680 {
6681 struct cp_binding_level *b = current_binding_level;
6682 while (b->level_chain->parm_flag == 0)
6683 b = b->level_chain;
6684 pushdecl_with_scope (decl, b);
6685 }
6686
0ba8a114
NS
6687 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6688
2ce07e2d
NS
6689 return decl;
6690}
6691
d52e4867
RS
6692/* Make a definition for a builtin function named NAME in the current
6693 namespace, whose data type is TYPE and whose context is CONTEXT.
6694 TYPE should be a function type with argument types.
8d08fdba 6695
0c11ada6
JM
6696 CLASS and CODE tell later passes how to compile calls to this function.
6697 See tree.h for possible values.
6698
6699 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6a2dd09a
RS
6700 the name to be called if we can't opencode the function.
6701 If ATTRS is nonzero, use that for the function's attribute
6702 list. */
8d08fdba 6703
d52e4867 6704static tree
6a2dd09a 6705builtin_function_1 (name, type, context, code, class, libname, attrs)
d8e178a0 6706 const char *name;
8d08fdba 6707 tree type;
d52e4867 6708 tree context;
0c11ada6
JM
6709 int code;
6710 enum built_in_class class;
6711 const char *libname;
6a2dd09a 6712 tree attrs;
8d08fdba 6713{
596ea4e5 6714 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6715 DECL_BUILT_IN_CLASS (decl) = class;
6716 DECL_FUNCTION_CODE (decl) = code;
d52e4867 6717 DECL_CONTEXT (decl) = context;
12a22e76 6718
6bcedb4e 6719 pushdecl (decl);
6bcedb4e 6720
8d08fdba
MS
6721 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6722 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6723 function in the namespace. */
0c11ada6 6724 if (libname)
92643fea
MM
6725 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
6726 make_decl_rtl (decl, NULL);
935d1834
ZW
6727
6728 /* Warn if a function in the namespace for users
6729 is used without an occasion to consider it declared. */
6730 if (name[0] != '_' || name[1] != '_')
6731 DECL_ANTICIPATED (decl) = 1;
6732
6431177a 6733 /* Possibly apply some default attributes to this built-in function. */
6a2dd09a
RS
6734 if (attrs)
6735 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
6736 else
6737 decl_attributes (&decl, NULL_TREE, 0);
6431177a 6738
8d08fdba
MS
6739 return decl;
6740}
7f4edbcb 6741
d52e4867
RS
6742/* Entry point for the benefit of c_common_nodes_and_builtins.
6743
6744 Make a defintion for a builtin function named NAME and whose data type
6745 is TYPE. TYPE should be a function type with argument types. This
6746 function places the anticipated declaration in the global namespace
6747 and additionally in the std namespace if appropriate.
6748
6749 CLASS and CODE tell later passes how to compile calls to this function.
6750 See tree.h for possible values.
6751
6752 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6a2dd09a
RS
6753 the name to be called if we can't opencode the function.
6754
6755 If ATTRS is nonzero, use that for the function's attribute
6756 list. */
d52e4867
RS
6757
6758tree
6a2dd09a 6759builtin_function (name, type, code, class, libname, attrs)
d52e4867
RS
6760 const char *name;
6761 tree type;
6762 int code;
6763 enum built_in_class class;
6764 const char *libname;
6a2dd09a 6765 tree attrs;
d52e4867
RS
6766{
6767 /* All builtins that don't begin with an '_' should additionally
6768 go in the 'std' namespace. */
6769 if (name[0] != '_')
6770 {
6771 push_namespace (std_identifier);
6a2dd09a 6772 builtin_function_1 (name, type, std_node, code, class, libname, attrs);
d52e4867
RS
6773 pop_namespace ();
6774 }
6775
6a2dd09a
RS
6776 return builtin_function_1 (name, type, NULL_TREE, code,
6777 class, libname, attrs);
d52e4867
RS
6778}
6779
0c11ada6
JM
6780/* Generate a FUNCTION_DECL with the typical flags for a runtime library
6781 function. Not called directly. */
6782
6783static tree
596ea4e5 6784build_library_fn_1 (name, operator_code, type)
0c11ada6 6785 tree name;
596ea4e5 6786 enum tree_code operator_code;
0c11ada6
JM
6787 tree type;
6788{
6789 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6790 DECL_EXTERNAL (fn) = 1;
6791 TREE_PUBLIC (fn) = 1;
6792 DECL_ARTIFICIAL (fn) = 1;
6793 TREE_NOTHROW (fn) = 1;
596ea4e5 6794 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 6795 SET_DECL_LANGUAGE (fn, lang_c);
0c11ada6
JM
6796 return fn;
6797}
c2a37c55 6798
0c11ada6
JM
6799/* Returns the _DECL for a library function with C linkage.
6800 We assume that such functions never throw; if this is incorrect,
6801 callers should unset TREE_NOTHROW. */
c2a37c55 6802
7f4edbcb 6803tree
0c11ada6
JM
6804build_library_fn (name, type)
6805 tree name;
6806 tree type;
6807{
19e7881c 6808 return build_library_fn_1 (name, ERROR_MARK, type);
0c11ada6
JM
6809}
6810
6811/* Returns the _DECL for a library function with C++ linkage. */
6812
596ea4e5
AS
6813static tree
6814build_cp_library_fn (name, operator_code, type)
0c11ada6 6815 tree name;
596ea4e5 6816 enum tree_code operator_code;
0c11ada6
JM
6817 tree type;
6818{
596ea4e5 6819 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 6820 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 6821 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 6822 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6 6823 set_mangled_name_for_decl (fn);
0c11ada6
JM
6824 return fn;
6825}
6826
6827/* Like build_library_fn, but takes a C string instead of an
6828 IDENTIFIER_NODE. */
6829
6830tree
6831build_library_fn_ptr (name, type)
7f4edbcb
BS
6832 const char *name;
6833 tree type;
7f4edbcb 6834{
0c11ada6
JM
6835 return build_library_fn (get_identifier (name), type);
6836}
6837
6838/* Like build_cp_library_fn, but takes a C string instead of an
6839 IDENTIFIER_NODE. */
6840
6841tree
6842build_cp_library_fn_ptr (name, type)
6843 const char *name;
6844 tree type;
6845{
596ea4e5 6846 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6847}
6848
6849/* Like build_library_fn, but also pushes the function so that we will
6850 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
6851
6852tree
6853push_library_fn (name, type)
6854 tree name, type;
6855{
6856 tree fn = build_library_fn (name, type);
6857 pushdecl_top_level (fn);
6858 return fn;
6859}
6860
6861/* Like build_cp_library_fn, but also pushes the function so that it
6862 will be found by normal lookup. */
6863
596ea4e5
AS
6864static tree
6865push_cp_library_fn (operator_code, type)
6866 enum tree_code operator_code;
0c11ada6
JM
6867 tree type;
6868{
5362b086 6869 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
6870 operator_code,
6871 type);
0c11ada6
JM
6872 pushdecl (fn);
6873 return fn;
6874}
6875
6876/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6877 a FUNCTION_TYPE. */
6878
6879tree
6880push_void_library_fn (name, parmtypes)
6881 tree name, parmtypes;
6882{
6883 tree type = build_function_type (void_type_node, parmtypes);
6884 return push_library_fn (name, type);
6885}
6886
cf74fb86 6887/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
6888 and does not return. Used for __throw_foo and the like. */
6889
6890tree
cf74fb86
JM
6891push_throw_library_fn (name, type)
6892 tree name, type;
0c11ada6 6893{
cf74fb86 6894 tree fn = push_library_fn (name, type);
0c11ada6
JM
6895 TREE_THIS_VOLATILE (fn) = 1;
6896 TREE_NOTHROW (fn) = 0;
6897 return fn;
7f4edbcb 6898}
6431177a
JM
6899
6900/* Apply default attributes to a function, if a system function with default
6901 attributes. */
6902
6903void
7ffb4fd2 6904cxx_insert_default_attributes (decl)
6431177a
JM
6905 tree decl;
6906{
6907 if (!DECL_EXTERN_C_FUNCTION_P (decl))
6908 return;
6909 if (!TREE_PUBLIC (decl))
6910 return;
6911 c_common_insert_default_attributes (decl);
6912}
8d08fdba 6913\f
61a127b3
MM
6914/* When we call finish_struct for an anonymous union, we create
6915 default copy constructors and such. But, an anonymous union
6916 shouldn't have such things; this function undoes the damage to the
6917 anonymous union type T.
6918
6919 (The reason that we create the synthesized methods is that we don't
6920 distinguish `union { int i; }' from `typedef union { int i; } U'.
6921 The first is an anonymous union; the second is just an ordinary
6922 union type.) */
6923
6924void
6bdb8141 6925fixup_anonymous_aggr (t)
61a127b3
MM
6926 tree t;
6927{
6928 tree *q;
6929
6930 /* Wipe out memory of synthesized methods */
6931 TYPE_HAS_CONSTRUCTOR (t) = 0;
6932 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6933 TYPE_HAS_INIT_REF (t) = 0;
6934 TYPE_HAS_CONST_INIT_REF (t) = 0;
6935 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
6936 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6937
6938 /* Splice the implicitly generated functions out of the TYPE_METHODS
6939 list. */
6940 q = &TYPE_METHODS (t);
6941 while (*q)
6942 {
6943 if (DECL_ARTIFICIAL (*q))
6944 *q = TREE_CHAIN (*q);
6945 else
6946 q = &TREE_CHAIN (*q);
6947 }
6948
cab1f180 6949 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 6950 if (TYPE_METHODS (t))
1f0d71c5 6951 cp_error_at ("an anonymous union cannot have function members", t);
a1c2b86d
JJ
6952
6953 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
6954 assignment operators (because they cannot have these methods themselves).
6955 For anonymous unions this is already checked because they are not allowed
6956 in any union, otherwise we have to check it. */
6957 if (TREE_CODE (t) != UNION_TYPE)
6958 {
6959 tree field, type;
6960
6961 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
6962 if (TREE_CODE (field) == FIELD_DECL)
6963 {
6964 type = TREE_TYPE (field);
6965 if (CLASS_TYPE_P (type))
6966 {
6967 if (TYPE_NEEDS_CONSTRUCTING (type))
6968 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
6969 field);
6970 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6971 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
6972 field);
6973 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
6974 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
6975 field);
6976 }
6977 }
6978 }
61a127b3
MM
6979}
6980
72a93143 6981/* Make sure that a declaration with no declarator is well-formed, i.e.
a723baf1 6982 just declares a tagged type or anonymous union.
8d08fdba 6983
a723baf1 6984 Returns the type declared; or NULL_TREE if none. */
8d08fdba 6985
72a93143
JM
6986tree
6987check_tag_decl (declspecs)
8d08fdba
MS
6988 tree declspecs;
6989{
72a93143 6990 int found_type = 0;
2bdb0643 6991 int saw_friend = 0;
e8186ecf 6992 int saw_typedef = 0;
2986ae00 6993 tree ob_modifier = NULL_TREE;
8d08fdba 6994 register tree link;
a723baf1
MM
6995 /* If a class, struct, or enum type is declared by the DECLSPECS
6996 (i.e, if a class-specifier, enum-specifier, or non-typename
6997 elaborated-type-specifier appears in the DECLSPECS),
6998 DECLARED_TYPE is set to the corresponding type. */
6999 tree declared_type = NULL_TREE;
7000 bool error_p = false;
8d08fdba
MS
7001
7002 for (link = declspecs; link; link = TREE_CHAIN (link))
7003 {
a723baf1 7004 tree value = TREE_VALUE (link);
8d08fdba 7005
2bdb0643 7006 if (TYPE_P (value)
bd0d5d4a 7007 || TREE_CODE (value) == TYPE_DECL
2bdb0643
JM
7008 || (TREE_CODE (value) == IDENTIFIER_NODE
7009 && IDENTIFIER_GLOBAL_VALUE (value)
bd0d5d4a 7010 && TREE_CODE (IDENTIFIER_GLOBAL_VALUE (value)) == TYPE_DECL))
8d08fdba 7011 {
72a93143 7012 ++found_type;
5566b478 7013
bd0d5d4a
JM
7014 if (found_type == 2 && TREE_CODE (value) == IDENTIFIER_NODE)
7015 {
7016 if (! in_system_header)
33bd39a2 7017 pedwarn ("redeclaration of C++ built-in type `%T'", value);
bd0d5d4a
JM
7018 return NULL_TREE;
7019 }
7020
7021 if (TYPE_P (value)
7022 && ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
7023 || TREE_CODE (value) == ENUMERAL_TYPE))
72a93143
JM
7024 {
7025 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
a723baf1 7026 declared_type = value;
72a93143 7027 }
8d08fdba 7028 }
e8186ecf
GDR
7029 else if (value == ridpointers[(int) RID_TYPEDEF])
7030 saw_typedef = 1;
83f660b7
JM
7031 else if (value == ridpointers[(int) RID_FRIEND])
7032 {
83f660b7
JM
7033 if (current_class_type == NULL_TREE
7034 || current_scope () != current_class_type)
7035 ob_modifier = value;
2bdb0643
JM
7036 else
7037 saw_friend = 1;
83f660b7 7038 }
8d08fdba 7039 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
7040 || value == ridpointers[(int) RID_EXTERN]
7041 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
7042 || value == ridpointers[(int) RID_REGISTER]
7043 || value == ridpointers[(int) RID_INLINE]
7044 || value == ridpointers[(int) RID_VIRTUAL]
72a93143
JM
7045 || value == ridpointers[(int) RID_CONST]
7046 || value == ridpointers[(int) RID_VOLATILE]
7a1f3f5f
RH
7047 || value == ridpointers[(int) RID_EXPLICIT]
7048 || value == ridpointers[(int) RID_THREAD])
2986ae00 7049 ob_modifier = value;
a723baf1
MM
7050 else if (value == error_mark_node)
7051 error_p = true;
8d08fdba
MS
7052 }
7053
72a93143
JM
7054 if (found_type > 1)
7055 error ("multiple types in one declaration");
7e2067ca 7056
a723baf1 7057 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
7e2067ca 7058 pedwarn ("declaration does not declare anything");
1951a1b6 7059 /* Check for an anonymous union. */
a723baf1
MM
7060 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
7061 && TYPE_ANONYMOUS_P (declared_type))
0dd3962d 7062 {
e8186ecf
GDR
7063 /* 7/3 In a simple-declaration, the optional init-declarator-list
7064 can be omitted only when declaring a class (clause 9) or
7065 enumeration (7.2), that is, when the decl-specifier-seq contains
7066 either a class-specifier, an elaborated-type-specifier with
7067 a class-key (9.1), or an enum-specifier. In these cases and
7068 whenever a class-specifier or enum-specifier is present in the
7069 decl-specifier-seq, the identifiers in these specifiers are among
7070 the names being declared by the declaration (as class-name,
7071 enum-names, or enumerators, depending on the syntax). In such
7072 cases, and except for the declaration of an unnamed bit-field (9.6),
7073 the decl-specifier-seq shall introduce one or more names into the
7074 program, or shall redeclare a name introduced by a previous
7075 declaration. [Example:
7076 enum { }; // ill-formed
7077 typedef class { }; // ill-formed
7078 --end example] */
7079 if (saw_typedef)
7080 {
357351e5 7081 error ("missing type-name in typedef-declaration");
e8186ecf
GDR
7082 return NULL_TREE;
7083 }
0dd3962d 7084 /* Anonymous unions are objects, so they can have specifiers. */;
a723baf1 7085 SET_ANON_AGGR_TYPE_P (declared_type);
6bdb8141 7086
a723baf1
MM
7087 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
7088 && !in_system_header)
6bdb8141 7089 pedwarn ("ISO C++ prohibits anonymous structs");
0dd3962d
JM
7090 }
7091
83f660b7 7092 else if (ob_modifier)
8d08fdba 7093 {
83f660b7
JM
7094 if (ob_modifier == ridpointers[(int) RID_INLINE]
7095 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
33bd39a2 7096 error ("`%D' can only be specified for functions", ob_modifier);
83f660b7 7097 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
33bd39a2 7098 error ("`%D' can only be specified inside a class", ob_modifier);
83f660b7 7099 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
33bd39a2 7100 error ("`%D' can only be specified for constructors",
83f660b7
JM
7101 ob_modifier);
7102 else
33bd39a2 7103 error ("`%D' can only be specified for objects and functions",
83f660b7 7104 ob_modifier);
72a93143 7105 }
8d08fdba 7106
a723baf1 7107 return declared_type;
72a93143
JM
7108}
7109
7110/* Called when a declaration is seen that contains no names to declare.
7111 If its type is a reference to a structure, union or enum inherited
7112 from a containing scope, shadow that tag name for the current scope
7113 with a forward reference.
7114 If its type defines a new named structure or union
7115 or defines an enum, it is valid but we need not do anything here.
7116 Otherwise, it is an error.
7117
7118 C++: may have to grok the declspecs to learn about static,
a723baf1 7119 complain for anonymous unions.
72a93143 7120
a723baf1
MM
7121 Returns the TYPE declared -- or NULL_TREE if none. */
7122
7123tree
72a93143
JM
7124shadow_tag (declspecs)
7125 tree declspecs;
7126{
7127 tree t = check_tag_decl (declspecs);
7128
a723baf1
MM
7129 if (!t)
7130 return NULL_TREE;
7131
7132 maybe_process_partial_specialization (t);
72a93143
JM
7133
7134 /* This is where the variables in an anonymous union are
7135 declared. An anonymous union declaration looks like:
7136 union { ... } ;
7137 because there is no declarator after the union, the parser
7138 sends that declaration here. */
a723baf1 7139 if (ANON_AGGR_TYPE_P (t))
72a93143 7140 {
6bdb8141 7141 fixup_anonymous_aggr (t);
72a93143
JM
7142
7143 if (TYPE_FIELDS (t))
7144 {
7145 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
91d231cb 7146 NULL);
72a93143
JM
7147 finish_anon_union (decl);
7148 }
8d08fdba 7149 }
a723baf1
MM
7150
7151 return t;
8d08fdba
MS
7152}
7153\f
7154/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
7155
7156tree
7157groktypename (typename)
7158 tree typename;
7159{
98884b26
JM
7160 tree specs, attrs;
7161 tree type;
8d08fdba
MS
7162 if (TREE_CODE (typename) != TREE_LIST)
7163 return typename;
98884b26
JM
7164 split_specs_attrs (TREE_PURPOSE (typename), &specs, &attrs);
7165 type = grokdeclarator (TREE_VALUE (typename), specs,
7166 TYPENAME, 0, &attrs);
7167 if (attrs)
7168 cplus_decl_attributes (&type, attrs, 0);
7169 return type;
8d08fdba
MS
7170}
7171
7172/* Decode a declarator in an ordinary declaration or data definition.
7173 This is called as soon as the type information and variable name
7174 have been parsed, before parsing the initializer if any.
7175 Here we create the ..._DECL node, fill in its type,
7176 and put it on the list of decls for the current context.
7177 The ..._DECL node is returned as the value.
7178
7179 Exception: for arrays where the length is not specified,
82580166 7180 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
7181
7182 Function definitions do not come here; they go to start_function
7183 instead. However, external and forward declarations of functions
7184 do go through here. Structure field declarations are done by
7185 grokfield and not through here. */
7186
8d08fdba 7187tree
a1774733 7188start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
8d08fdba
MS
7189 tree declarator, declspecs;
7190 int initialized;
a1774733 7191 tree attributes, prefix_attributes;
8d08fdba 7192{
59387d2e 7193 tree decl;
8d08fdba
MS
7194 register tree type, tem;
7195 tree context;
8d08fdba 7196
5566b478
MS
7197#if 0
7198 /* See code below that used this. */
8d08fdba 7199 int init_written = initialized;
5566b478 7200#endif
8d08fdba 7201
e92cc029 7202 /* This should only be done once on the top most decl. */
594bb0e7 7203 if (have_extern_spec)
8d08fdba 7204 {
1f8f4a0b
MM
7205 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"),
7206 declspecs);
594bb0e7 7207 have_extern_spec = false;
8d08fdba
MS
7208 }
7209
e23bd218
IR
7210 /* An object declared as __attribute__((deprecated)) suppresses
7211 warnings of uses of other deprecated items. */
7212 if (lookup_attribute ("deprecated", attributes))
7213 deprecated_state = DEPRECATED_SUPPRESS;
7214
91d231cb 7215 attributes = chainon (attributes, prefix_attributes);
b17e2870 7216
c11b6f21 7217 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
91d231cb 7218 &attributes);
68642fb6 7219
e23bd218
IR
7220 deprecated_state = DEPRECATED_NORMAL;
7221
a1774733 7222 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
7223 return NULL_TREE;
7224
7225 type = TREE_TYPE (decl);
7226
44689c12
ML
7227 if (type == error_mark_node)
7228 return NULL_TREE;
7229
4f1c5b7d 7230 context = DECL_CONTEXT (decl);
8d08fdba 7231
9a68c51f
JM
7232 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7233 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7234 {
7235 /* When parsing the initializer, lookup should use the object's
a1c65f9f 7236 namespace. */
9a68c51f
JM
7237 push_decl_namespace (context);
7238 }
7239
a1c65f9f 7240 /* We are only interested in class contexts, later. */
2c73f9f5
ML
7241 if (context && TREE_CODE (context) == NAMESPACE_DECL)
7242 context = NULL_TREE;
7243
8d08fdba
MS
7244 if (initialized)
7245 /* Is it valid for this decl to have an initializer at all?
7246 If not, set INITIALIZED to zero, which will indirectly
82580166 7247 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
7248 switch (TREE_CODE (decl))
7249 {
7250 case TYPE_DECL:
4a7510cb 7251 error ("typedef `%D' is initialized (use __typeof__ instead)", decl);
95f79357 7252 initialized = 0;
8d08fdba
MS
7253 break;
7254
7255 case FUNCTION_DECL:
33bd39a2 7256 error ("function `%#D' is initialized like a variable", decl);
8d08fdba
MS
7257 initialized = 0;
7258 break;
7259
7260 default:
3e41d13b 7261 break;
8d08fdba
MS
7262 }
7263
8d08fdba
MS
7264 if (initialized)
7265 {
a9aedbc2 7266 if (! toplevel_bindings_p ()
8d08fdba 7267 && DECL_EXTERNAL (decl))
33bd39a2 7268 warning ("declaration of `%#D' has `extern' and is initialized",
8d08fdba
MS
7269 decl);
7270 DECL_EXTERNAL (decl) = 0;
5566b478 7271 if (toplevel_bindings_p ())
8d08fdba
MS
7272 TREE_STATIC (decl) = 1;
7273
7274 /* Tell `pushdecl' this is an initialized decl
7275 even though we don't yet have the initializer expression.
82580166 7276 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
7277 DECL_INITIAL (decl) = error_mark_node;
7278 }
7279
fa20888b 7280 /* Set attributes here so if duplicate decl, will have proper attributes. */
91d231cb 7281 cplus_decl_attributes (&decl, attributes, 0);
fa20888b 7282
ecb0eece
RH
7283 /* If #pragma weak was used, mark the decl weak now. */
7284 if (current_binding_level == global_binding_level)
7285 maybe_apply_pragma_weak (decl);
7286
97055d5c
AO
7287 if (TREE_CODE (decl) == FUNCTION_DECL
7288 && DECL_DECLARED_INLINE_P (decl)
7289 && DECL_UNINLINABLE (decl)
7290 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
7291 warning_with_decl (decl,
7292 "inline function `%s' given attribute noinline");
7293
d0f062fb 7294 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68 7295 {
6b400b21 7296 push_nested_class (context, 2);
e97e5263 7297
5b605f68
MS
7298 if (TREE_CODE (decl) == VAR_DECL)
7299 {
7300 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7301 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
33bd39a2 7302 error ("`%#D' is not a static member of `%#T'", decl, context);
e349ee73
MS
7303 else
7304 {
7305 if (DECL_CONTEXT (field) != context)
f2d773a2 7306 {
a723baf1
MM
7307 if (!same_type_p (DECL_CONTEXT (field), context))
7308 pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
7309 DECL_CONTEXT (field), DECL_NAME (decl),
7310 context, DECL_NAME (decl));
f2d773a2
JM
7311 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7312 }
75650646
MM
7313 /* Static data member are tricky; an in-class initialization
7314 still doesn't provide a definition, so the in-class
7315 declaration will have DECL_EXTERNAL set, but will have an
7316 initialization. Thus, duplicate_decls won't warn
7317 about this situation, and so we check here. */
7318 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
33bd39a2 7319 error ("duplicate initialization of %D", decl);
e349ee73
MS
7320 if (duplicate_decls (decl, field))
7321 decl = field;
7322 }
5b605f68 7323 }
f30432d7
MS
7324 else
7325 {
5566b478 7326 tree field = check_classfn (context, decl);
f30432d7
MS
7327 if (field && duplicate_decls (decl, field))
7328 decl = field;
7329 }
7330
7331 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 7332 DECL_IN_AGGR_P (decl) = 0;
68642fb6 7333 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
1f6e1acc 7334 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
84e6233f
JM
7335 {
7336 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7337 /* [temp.expl.spec] An explicit specialization of a static data
7338 member of a template is a definition if the declaration
7339 includes an initializer; otherwise, it is a declaration.
7340
7341 We check for processing_specialization so this only applies
7342 to the new specialization syntax. */
7343 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7344 DECL_EXTERNAL (decl) = 1;
7345 }
f30432d7 7346
b7698cf0 7347 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
33bd39a2 7348 pedwarn ("declaration of `%#D' outside of class is not definition",
f30432d7 7349 decl);
5b605f68
MS
7350 }
7351
9188c363
MM
7352 /* Enter this declaration into the symbol table. */
7353 tem = maybe_push_decl (decl);
2ee887f2 7354
5156628f 7355 if (processing_template_decl)
cd9f6678 7356 tem = push_template_decl (tem);
5566b478 7357
2ee887f2 7358#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 7359 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
7360 -fconserve-space, we want this to save .data space, at the expense of
7361 wrong semantics. If we say -fno-conserve-space, we want this to
7362 produce errors about redefs; to do this we force variables into the
7363 data segment. */
a3203465 7364 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
2ee887f2 7365#endif
68642fb6 7366
5156628f 7367 if (! processing_template_decl)
5566b478 7368 start_decl_1 (tem);
8d08fdba 7369
8d08fdba
MS
7370 return tem;
7371}
7372
5566b478
MS
7373void
7374start_decl_1 (decl)
7375 tree decl;
8d08fdba 7376{
5566b478
MS
7377 tree type = TREE_TYPE (decl);
7378 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 7379
44689c12
ML
7380 if (type == error_mark_node)
7381 return;
7382
bd0d5d4a 7383 maybe_push_cleanup_level (type);
5566b478
MS
7384
7385 if (initialized)
7386 /* Is it valid for this decl to have an initializer at all?
7387 If not, set INITIALIZED to zero, which will indirectly
7388 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba 7389 {
5566b478
MS
7390 /* Don't allow initializations for incomplete types except for
7391 arrays which might be completed by the initialization. */
d0f062fb 7392 if (COMPLETE_TYPE_P (complete_type (type)))
5566b478
MS
7393 ; /* A complete type is ok. */
7394 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 7395 {
33bd39a2 7396 error ("variable `%#D' has initializer but incomplete type",
5566b478
MS
7397 decl);
7398 initialized = 0;
25eb19ff 7399 type = TREE_TYPE (decl) = error_mark_node;
5566b478 7400 }
d0f062fb 7401 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
7402 {
7403 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
33bd39a2 7404 error ("elements of array `%#D' have incomplete type", decl);
5566b478
MS
7405 /* else we already gave an error in start_decl. */
7406 initialized = 0;
8d08fdba 7407 }
8d08fdba
MS
7408 }
7409
5566b478
MS
7410 if (!initialized
7411 && TREE_CODE (decl) != TYPE_DECL
7412 && TREE_CODE (decl) != TEMPLATE_DECL
07c88314 7413 && type != error_mark_node
5362b086 7414 && IS_AGGR_TYPE (type)
07c88314 7415 && ! DECL_EXTERNAL (decl))
8d08fdba 7416 {
5156628f 7417 if ((! processing_template_decl || ! uses_template_parms (type))
d0f062fb 7418 && !COMPLETE_TYPE_P (complete_type (type)))
5566b478 7419 {
0154eaa8 7420 error ("aggregate `%#D' has incomplete type and cannot be defined",
5566b478
MS
7421 decl);
7422 /* Change the type so that assemble_variable will give
7423 DECL an rtl we can live with: (mem (const_int 0)). */
25eb19ff 7424 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
7425 }
7426 else
7427 {
7428 /* If any base type in the hierarchy of TYPE needs a constructor,
7429 then we set initialized to 1. This way any nodes which are
7430 created for the purposes of initializing this aggregate
7431 will live as long as it does. This is necessary for global
7432 aggregates which do not have their initializers processed until
7433 the end of the file. */
7434 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7435 }
7436 }
7437
5566b478
MS
7438 if (! initialized)
7439 DECL_INITIAL (decl) = NULL_TREE;
7440}
7441
7442/* Handle initialization of references.
38e01259 7443 These three arguments are from `cp_finish_decl', and have the
e92cc029
MS
7444 same meaning here that they do there.
7445
7446 Quotes on semantics can be found in ARM 8.4.3. */
7447
8e4ce833 7448static tree
a703fb38 7449grok_reference_init (decl, type, init)
5566b478 7450 tree decl, type, init;
5566b478
MS
7451{
7452 tree tmp;
7453
7454 if (init == NULL_TREE)
7455 {
7456 if ((DECL_LANG_SPECIFIC (decl) == 0
7457 || DECL_IN_AGGR_P (decl) == 0)
7458 && ! DECL_THIS_EXTERN (decl))
33bd39a2 7459 error ("`%D' declared as reference but not initialized", decl);
8e4ce833 7460 return NULL_TREE;
5566b478
MS
7461 }
7462
ed5511d9 7463 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 7464 {
33bd39a2 7465 error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
8e4ce833 7466 return NULL_TREE;
8d08fdba
MS
7467 }
7468
7469 if (TREE_CODE (init) == TREE_LIST)
7470 init = build_compound_expr (init);
8d08fdba 7471
8ccc31eb
MS
7472 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7473 init = convert_from_reference (init);
7474
8d08fdba
MS
7475 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7476 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7477 {
a3203465 7478 /* Note: default conversion is only called in very special cases. */
8d08fdba
MS
7479 init = default_conversion (init);
7480 }
68642fb6 7481
24bef158
MM
7482 /* Convert INIT to the reference type TYPE. This may involve the
7483 creation of a temporary, whose lifetime must be the same as that
7484 of the reference. If so, a DECL_STMT for the temporary will be
7485 added just after the DECL_STMT for DECL. That's why we don't set
7486 DECL_INITIAL for local references (instead assigning to them
7487 explicitly); we need to allow the temporary to be initialized
7488 first. */
a3203465 7489 tmp = convert_to_reference
9a3b49ac 7490 (type, init, CONV_IMPLICIT,
ce7715bd
JM
7491 LOOKUP_ONLYCONVERTING|LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND,
7492 decl);
8d08fdba 7493
a3203465 7494 if (tmp == error_mark_node)
8e4ce833
JJ
7495 return NULL_TREE;
7496 else if (tmp == NULL_TREE)
8d08fdba 7497 {
33bd39a2 7498 error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
8e4ce833 7499 return NULL_TREE;
8d08fdba 7500 }
8d08fdba 7501
8e4ce833
JJ
7502 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
7503 return tmp;
7504
08ac397c 7505 DECL_INITIAL (decl) = tmp;
8e4ce833
JJ
7506
7507 return NULL_TREE;
8d08fdba
MS
7508}
7509
27778b73
MM
7510/* When parsing `int a[] = {1, 2};' we don't know the size of the
7511 array until we finish parsing the initializer. If that's the
7512 situation we're in, update DECL accordingly. */
7513
7514static void
7515maybe_deduce_size_from_array_init (decl, init)
7516 tree decl;
7517 tree init;
7518{
7519 tree type = TREE_TYPE (decl);
7520
7521 if (TREE_CODE (type) == ARRAY_TYPE
7522 && TYPE_DOMAIN (type) == NULL_TREE
7523 && TREE_CODE (decl) != TYPE_DECL)
7524 {
f2ae0c45
JM
7525 /* do_default is really a C-ism to deal with tentative definitions.
7526 But let's leave it here to ease the eventual merge. */
7527 int do_default = !DECL_EXTERNAL (decl);
27778b73
MM
7528 tree initializer = init ? init : DECL_INITIAL (decl);
7529 int failure = complete_array_type (type, initializer, do_default);
7530
7531 if (failure == 1)
33bd39a2 7532 error ("initializer fails to determine size of `%D'", decl);
27778b73
MM
7533
7534 if (failure == 2)
7535 {
7536 if (do_default)
33bd39a2 7537 error ("array size missing in `%D'", decl);
27778b73
MM
7538 /* If a `static' var's size isn't known, make it extern as
7539 well as static, so it does not get allocated. If it's not
7540 `static', then don't mark it extern; finish_incomplete_decl
7541 will give it a default size and it will get allocated. */
7542 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7543 DECL_EXTERNAL (decl) = 1;
7544 }
7545
7546 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7547 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7548 integer_zero_node))
33bd39a2 7549 error ("zero-size array `%D'", decl);
27778b73
MM
7550
7551 layout_decl (decl, 0);
7552 }
7553}
7554
7555/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 7556 any appropriate error messages regarding the layout. */
27778b73 7557
57b52417
MM
7558static void
7559layout_var_decl (decl)
27778b73 7560 tree decl;
27778b73 7561{
57b52417 7562 tree type = TREE_TYPE (decl);
c95cd22e 7563#if 0
57b52417 7564 tree ttype = target_type (type);
c95cd22e 7565#endif
57b52417
MM
7566
7567 /* If we haven't already layed out this declaration, do so now.
7568 Note that we must not call complete type for an external object
7569 because it's type might involve templates that we are not
0e339752 7570 supposed to isntantiate yet. (And it's perfectly valid to say
57b52417
MM
7571 `extern X x' for some incomplete type `X'.) */
7572 if (!DECL_EXTERNAL (decl))
7573 complete_type (type);
7de85f7e 7574 if (!DECL_SIZE (decl)
328de7c2 7575 && TREE_TYPE (decl) != error_mark_node
7de85f7e
MM
7576 && (COMPLETE_TYPE_P (type)
7577 || (TREE_CODE (type) == ARRAY_TYPE
7578 && !TYPE_DOMAIN (type)
7579 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
27778b73
MM
7580 layout_decl (decl, 0);
7581
c82dbd95 7582 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
7583 {
7584 /* An automatic variable with an incomplete type: that is an error.
7585 Don't talk about array types here, since we took care of that
7586 message in grokdeclarator. */
33bd39a2 7587 error ("storage size of `%D' isn't known", decl);
27778b73
MM
7588 TREE_TYPE (decl) = error_mark_node;
7589 }
ae673f14
JM
7590#if 0
7591 /* Keep this code around in case we later want to control debug info
7592 based on whether a type is "used". (jason 1999-11-11) */
7593
27778b73
MM
7594 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7595 /* Let debugger know it should output info for this type. */
7596 note_debug_info_needed (ttype);
7597
7598 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7599 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 7600#endif
27778b73
MM
7601
7602 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7603 && DECL_SIZE (decl) != NULL_TREE
7604 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7605 {
7606 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7607 constant_expression_warning (DECL_SIZE (decl));
7608 else
33bd39a2 7609 error ("storage size of `%D' isn't constant", decl);
27778b73 7610 }
8e4ce833
JJ
7611
7612 if (TREE_STATIC (decl)
7613 && !DECL_ARTIFICIAL (decl)
7614 && current_function_decl
7615 && DECL_CONTEXT (decl) == current_function_decl)
7616 push_local_name (decl);
27778b73
MM
7617}
7618
27778b73
MM
7619/* If a local static variable is declared in an inline function, or if
7620 we have a weak definition, we must endeavor to create only one
7621 instance of the variable at link-time. */
7622
7623static void
7624maybe_commonize_var (decl)
7625 tree decl;
7626{
7627 /* Static data in a function with comdat linkage also has comdat
7628 linkage. */
7629 if (TREE_STATIC (decl)
7630 /* Don't mess with __FUNCTION__. */
cf74fb86 7631 && ! DECL_ARTIFICIAL (decl)
27778b73
MM
7632 && current_function_decl
7633 && DECL_CONTEXT (decl) == current_function_decl
79065db2 7634 && (DECL_DECLARED_INLINE_P (current_function_decl)
27778b73
MM
7635 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7636 && TREE_PUBLIC (current_function_decl))
7637 {
27778b73
MM
7638 /* If flag_weak, we don't need to mess with this, as we can just
7639 make the function weak, and let it refer to its unique local
7640 copy. This works because we don't allow the function to be
7641 inlined. */
7642 if (! flag_weak)
7643 {
7644 if (DECL_INTERFACE_KNOWN (current_function_decl))
7645 {
7646 TREE_PUBLIC (decl) = 1;
7647 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7648 }
7649 else if (DECL_INITIAL (decl) == NULL_TREE
7650 || DECL_INITIAL (decl) == error_mark_node)
7651 {
7652 TREE_PUBLIC (decl) = 1;
7653 DECL_COMMON (decl) = 1;
7654 }
7655 /* else we lose. We can only do this if we can use common,
7656 which we can't if it has been initialized. */
7657
92643fea 7658 if (!TREE_PUBLIC (decl))
27778b73
MM
7659 {
7660 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7661 cp_warning_at (" you can work around this by removing the initializer", decl);
7662 }
7663 }
8e4ce833
JJ
7664 else
7665 comdat_linkage (decl);
27778b73
MM
7666 }
7667 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7668 /* Set it up again; we might have set DECL_INITIAL since the last
7669 time. */
7670 comdat_linkage (decl);
7671}
7672
91063b51
MM
7673/* Issue an error message if DECL is an uninitialized const variable. */
7674
7675static void
7676check_for_uninitialized_const_var (decl)
7677 tree decl;
7678{
7679 tree type = TREE_TYPE (decl);
7680
7681 /* ``Unless explicitly declared extern, a const object does not have
7682 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7683 7.1.6 */
7684 if (TREE_CODE (decl) == VAR_DECL
7685 && TREE_CODE (type) != REFERENCE_TYPE
7686 && CP_TYPE_CONST_P (type)
7687 && !TYPE_NEEDS_CONSTRUCTING (type)
7688 && !DECL_INITIAL (decl))
33bd39a2 7689 error ("uninitialized const `%D'", decl);
91063b51
MM
7690}
7691
8e3df2de
MM
7692/* FIELD is a FIELD_DECL or NULL. In the former case, the value
7693 returned is the next FIELD_DECL (possibly FIELD itself) that can be
7694 initialized. If there are no more such fields, the return value
7695 will be NULL. */
7696
7697static tree
7698next_initializable_field (tree field)
7699{
7700 while (field
7701 && (TREE_CODE (field) != FIELD_DECL
7702 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
7703 || DECL_ARTIFICIAL (field)))
7704 field = TREE_CHAIN (field);
7705
7706 return field;
7707}
7708
7709/* Undo the brace-elision allowed by [dcl.init.aggr] in a
7710 brace-enclosed aggregate initializer.
7711
7712 *INITP is one of a list of initializers describing a brace-enclosed
7713 initializer for an entity of the indicated aggregate TYPE. It may
7714 not presently match the shape of the TYPE; for example:
7715
7716 struct S { int a; int b; };
7717 struct S a[] = { 1, 2, 3, 4 };
7718
7719 Here *INITP will point to TREE_LIST of four elements, rather than a
7720 list of two elements, each itself a list of two elements. This
7721 routine transforms INIT from the former form into the latter. The
7722 revised initializer is returned. */
7723
7724static tree
7725reshape_init (tree type, tree *initp)
7726{
7727 tree inits;
7728 tree old_init;
7729 tree old_init_value;
7730 tree new_init;
7731 bool brace_enclosed_p;
7732
7733 old_init = *initp;
7734 old_init_value = (TREE_CODE (*initp) == TREE_LIST
7735 ? TREE_VALUE (*initp) : old_init);
7736
ee7ecb29
MM
7737 /* For some parse errors, OLD_INIT_VALUE may be NULL. */
7738 if (!old_init_value)
7739 {
7740 my_friendly_assert (TREE_CODE (old_init) == TREE_LIST, 20021202);
7741 TREE_VALUE (old_init) = error_mark_node;
7742 return old_init;
7743 }
7744
8e3df2de
MM
7745 /* If the initializer is brace-enclosed, pull initializers from the
7746 enclosed elements. Advance past the brace-enclosed initializer
7747 now. */
7748 if (TREE_CODE (old_init_value) == CONSTRUCTOR
7749 && TREE_HAS_CONSTRUCTOR (old_init_value))
7750 {
7751 *initp = TREE_CHAIN (old_init);
7752 TREE_CHAIN (old_init) = NULL_TREE;
7753 inits = CONSTRUCTOR_ELTS (old_init_value);
7754 initp = &inits;
7755 brace_enclosed_p = true;
7756 }
7757 else
7758 {
7759 inits = NULL_TREE;
7760 brace_enclosed_p = false;
7761 }
7762
7763 /* A non-aggregate type is always initialized with a single
7764 initializer. */
7765 if (!CP_AGGREGATE_TYPE_P (type))
7766 {
7767 *initp = TREE_CHAIN (old_init);
7768 TREE_CHAIN (old_init) = NULL_TREE;
7769 /* It is invalid to initialize a non-aggregate type with a
7770 brace-enclosed initializer. */
7771 if (brace_enclosed_p)
7772 {
7773 error ("brace-enclosed initializer used to initialize `%T'",
7774 type);
7775 if (TREE_CODE (old_init) == TREE_LIST)
7776 TREE_VALUE (old_init) = error_mark_node;
7777 else
7778 old_init = error_mark_node;
7779 }
7780
7781 return old_init;
7782 }
7783
7784 /* [dcl.init.aggr]
7785
7786 All implicit type conversions (clause _conv_) are considered when
7787 initializing the aggregate member with an initializer from an
7788 initializer-list. If the initializer can initialize a member,
7789 the member is initialized. Otherwise, if the member is itself a
7790 non-empty subaggregate, brace elision is assumed and the
7791 initializer is considered for the initialization of the first
7792 member of the subaggregate. */
7793 if (CLASS_TYPE_P (type)
7794 && !brace_enclosed_p
7795 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
7796 {
7797 *initp = TREE_CHAIN (old_init);
7798 TREE_CHAIN (old_init) = NULL_TREE;
7799 return old_init;
7800 }
7801
3fa3c4bd 7802 if (TREE_CODE (old_init_value) == STRING_CST
8e3df2de 7803 && TREE_CODE (type) == ARRAY_TYPE
42328048 7804 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
8e3df2de
MM
7805 {
7806 /* [dcl.init.string]
7807
7808 A char array (whether plain char, signed char, or unsigned char)
7809 can be initialized by a string-literal (optionally enclosed in
7810 braces); a wchar_t array can be initialized by a wide
7811 string-literal (optionally enclosed in braces). */
7812 new_init = old_init;
7813 /* Move past the initializer. */
7814 *initp = TREE_CHAIN (old_init);
7815 TREE_CHAIN (old_init) = NULL_TREE;
7816 }
7817 else
7818 {
7819 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
7820 new_init = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
7821 TREE_HAS_CONSTRUCTOR (new_init) = 1;
7822
7823 if (CLASS_TYPE_P (type))
7824 {
7825 tree field;
7826
7827 field = next_initializable_field (TYPE_FIELDS (type));
7828
7829 if (!field)
7830 {
7831 /* [dcl.init.aggr]
7832
7833 An initializer for an aggregate member that is an
7834 empty class shall have the form of an empty
7835 initializer-list {}. */
7836 if (!brace_enclosed_p)
7837 error ("initializer for `%T' must be brace-enclosed",
7838 type);
7839 }
7840 else
7841 {
7842 /* Loop through the initializable fields, gathering
7843 initializers. */
7844 while (*initp && field)
7845 {
7846 tree field_init;
7847
7848 field_init = reshape_init (TREE_TYPE (field), initp);
7849 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
7850 CONSTRUCTOR_ELTS (new_init) = field_init;
7851 /* [dcl.init.aggr]
7852
7853 When a union is initialized with a brace-enclosed
7854 initializer, the braces shall only contain an
7855 initializer for the first member of the union. */
7856 if (TREE_CODE (type) == UNION_TYPE)
7857 break;
7858 if (TREE_PURPOSE (field_init))
7859 field = TREE_PURPOSE (field_init);
7860 field = next_initializable_field (TREE_CHAIN (field));
7861 }
7862 }
7863 }
7864 else if (TREE_CODE (type) == ARRAY_TYPE)
7865 {
7866 tree index;
7867 tree max_index;
7868
7869 /* If the bound of the array is known, take no more initializers
7870 than are allowed. */
7871 max_index = (TYPE_DOMAIN (type)
7872 ? array_type_nelts (type) : NULL_TREE);
7873 /* Loop through the array elements, gathering initializers. */
7874 for (index = size_zero_node;
7875 *initp && (!max_index || !tree_int_cst_lt (max_index, index));
7876 index = size_binop (PLUS_EXPR, index, size_one_node))
7877 {
7878 tree element_init;
7879
7880 element_init = reshape_init (TREE_TYPE (type), initp);
7881 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
7882 CONSTRUCTOR_ELTS (new_init) = element_init;
7883 if (TREE_PURPOSE (element_init))
7884 index = TREE_PURPOSE (element_init);
7885 }
7886 }
7887 else
7888 abort ();
7889
7890 /* The initializers were placed in reverse order in the
7891 CONSTRUCTOR. */
7892 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
7893
7894 if (TREE_CODE (old_init) == TREE_LIST)
7895 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
7896 }
7897
7898 /* If this was a brace-enclosed initializer and all of the
7899 initializers were not used up, there is a problem. */
7900 if (brace_enclosed_p && *initp)
7901 error ("too many initializers for `%T'", type);
7902
7903 return new_init;
7904}
7905
c82dbd95 7906/* Verify INIT (the initializer for DECL), and record the
8e3df2de
MM
7907 initialization in DECL_INITIAL, if appropriate.
7908
7909 If the return value is non-NULL, it is an expression that must be
7910 evaluated dynamically to initialize DECL. */
27778b73 7911
c82dbd95 7912static tree
8e3df2de 7913check_initializer (tree decl, tree init, int flags)
27778b73 7914{
17bbb839 7915 tree type = TREE_TYPE (decl);
fc0e7bf5 7916
27778b73
MM
7917 /* If `start_decl' didn't like having an initialization, ignore it now. */
7918 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7919 init = NULL_TREE;
27778b73 7920
17bbb839
MM
7921 /* If an initializer is present, DECL_INITIAL has been
7922 error_mark_node, to indicate that an as-of-yet unevaluated
7923 initialization will occur. From now on, DECL_INITIAL reflects
7924 the static initialization -- if any -- of DECL. */
7925 DECL_INITIAL (decl) = NULL_TREE;
7926
328de7c2
MM
7927 /* Things that are going to be initialized need to have complete
7928 type. */
7929 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
c82dbd95 7930
328de7c2
MM
7931 if (type == error_mark_node)
7932 /* We will have already complained. */
7933 init = NULL_TREE;
7934 else if (init && COMPLETE_TYPE_P (type)
7935 && !TREE_CONSTANT (TYPE_SIZE (type)))
7936 {
7937 error ("variable-sized object `%D' may not be initialized", decl);
7938 init = NULL_TREE;
7939 }
7940 else if (TREE_CODE (type) == ARRAY_TYPE
7941 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
7942 {
7943 error ("elements of array `%#D' have incomplete type", decl);
7944 init = NULL_TREE;
7945 }
7946 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
7947 {
7948 error ("`%D' has incomplete type", decl);
7949 TREE_TYPE (decl) = error_mark_node;
7950 init = NULL_TREE;
27778b73
MM
7951 }
7952
7953 if (TREE_CODE (decl) == CONST_DECL)
7954 {
7955 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7956
7957 DECL_INITIAL (decl) = init;
7958
27778b73
MM
7959 my_friendly_assert (init != NULL_TREE, 149);
7960 init = NULL_TREE;
7961 }
c82dbd95 7962 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
17bbb839 7963 init = grok_reference_init (decl, type, init);
27778b73
MM
7964 else if (init)
7965 {
8e3df2de 7966 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
a16f2357
GK
7967 {
7968 /* [dcl.init] paragraph 13,
7969 If T is a scalar type, then a declaration of the form
7970 T x = { a };
7971 is equivalent to
7972 T x = a;
7973
7974 reshape_init will complain about the extra braces,
7975 and doesn't do anything useful in the case where TYPE is
7976 scalar, so just don't call it. */
7977 if (CP_AGGREGATE_TYPE_P (type))
7978 init = reshape_init (type, &init);
7979 }
8e3df2de
MM
7980
7981 /* If DECL has an array type without a specific bound, deduce the
7982 array size from the initializer. */
7983 maybe_deduce_size_from_array_init (decl, init);
7984 type = TREE_TYPE (decl);
7985 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
7986 TREE_TYPE (init) = type;
7987
27778b73
MM
7988 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7989 {
7990 if (TREE_CODE (type) == ARRAY_TYPE)
8e3df2de 7991 goto initialize_aggr;
27778b73
MM
7992 else if (TREE_CODE (init) == CONSTRUCTOR
7993 && TREE_HAS_CONSTRUCTOR (init))
7994 {
7995 if (TYPE_NON_AGGREGATE_CLASS (type))
7996 {
33bd39a2 7997 error ("`%D' must be initialized by constructor, not by `{...}'",
8e3df2de 7998 decl);
27778b73
MM
7999 init = error_mark_node;
8000 }
8001 else
8002 goto dont_use_constructor;
8003 }
8e3df2de
MM
8004 else
8005 {
8006 int saved_stmts_are_full_exprs_p;
8007
8008 initialize_aggr:
8009 saved_stmts_are_full_exprs_p = 0;
8010 if (building_stmt_tree ())
8011 {
8012 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
8013 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
8014 }
8015 init = build_aggr_init (decl, init, flags);
8016 if (building_stmt_tree ())
8017 current_stmt_tree ()->stmts_are_full_exprs_p =
8018 saved_stmts_are_full_exprs_p;
8019 return init;
8020 }
27778b73
MM
8021 }
8022 else
8023 {
8024 dont_use_constructor:
8025 if (TREE_CODE (init) != TREE_VEC)
8026 init = store_init_value (decl, init);
8027 }
27778b73
MM
8028 }
8029 else if (DECL_EXTERNAL (decl))
8030 ;
8e3df2de
MM
8031 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
8032 goto initialize_aggr;
8033 else if (IS_AGGR_TYPE (type))
27778b73
MM
8034 {
8035 tree core_type = strip_array_types (type);
8036
8e3df2de
MM
8037 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
8038 error ("structure `%D' with uninitialized const members", decl);
8039 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
8040 error ("structure `%D' with uninitialized reference members",
8041 decl);
27778b73
MM
8042
8043 check_for_uninitialized_const_var (decl);
27778b73
MM
8044 }
8045 else
8046 check_for_uninitialized_const_var (decl);
68642fb6 8047
8e3df2de
MM
8048 if (init && init != error_mark_node)
8049 init = build (INIT_EXPR, type, decl, init);
8050
c82dbd95 8051 return init;
27778b73
MM
8052}
8053
8054/* If DECL is not a local variable, give it RTL. */
8055
8056static void
8057make_rtl_for_nonlocal_decl (decl, init, asmspec)
8058 tree decl;
8059 tree init;
8060 const char *asmspec;
8061{
95ee998c
MM
8062 int toplev = toplevel_bindings_p ();
8063 int defer_p;
27778b73 8064
f39ee884
MM
8065 /* Handle non-variables up front. */
8066 if (TREE_CODE (decl) != VAR_DECL)
8067 {
8068 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8069 return;
8070 }
8071
95ee998c
MM
8072 /* If we see a class member here, it should be a static data
8073 member. */
8074 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
8075 {
8076 my_friendly_assert (TREE_STATIC (decl), 19990828);
8077 /* An in-class declaration of a static data member should be
8078 external; it is only a declaration, and not a definition. */
8079 if (init == NULL_TREE)
8080 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
8081 }
8082
f39ee884
MM
8083 /* Set the DECL_ASSEMBLER_NAME for the variable. */
8084 if (asmspec)
7ed47c04
MM
8085 {
8086 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
8087 /* The `register' keyword, when used together with an
8088 asm-specification, indicates that the variable should be
8089 placed in a particular register. */
8090 if (DECL_REGISTER (decl))
8091 DECL_C_HARD_REGISTER (decl) = 1;
8092 }
f39ee884 8093
95ee998c
MM
8094 /* We don't create any RTL for local variables. */
8095 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
8096 return;
27778b73 8097
95ee998c
MM
8098 /* We defer emission of local statics until the corresponding
8099 DECL_STMT is expanded. */
8100 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
8101
b602511f
JM
8102 /* We try to defer namespace-scope static constants so that they are
8103 not emitted into the object file unnecessarily. */
8104 if (!DECL_VIRTUAL_P (decl)
8105 && TREE_READONLY (decl)
8106 && DECL_INITIAL (decl) != NULL_TREE
8107 && DECL_INITIAL (decl) != error_mark_node
8108 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
8109 && toplev
8110 && !TREE_PUBLIC (decl))
5cc90635
JM
8111 {
8112 /* Fool with the linkage of static consts according to #pragma
8113 interface. */
8114 if (!interface_unknown && !TREE_PUBLIC (decl))
27778b73 8115 {
95ee998c
MM
8116 TREE_PUBLIC (decl) = 1;
8117 DECL_EXTERNAL (decl) = interface_only;
27778b73 8118 }
27778b73 8119
95ee998c 8120 defer_p = 1;
27778b73 8121 }
b602511f
JM
8122 /* Likewise for template instantiations. */
8123 else if (DECL_COMDAT (decl))
8124 defer_p = 1;
95ee998c 8125
92643fea
MM
8126 /* If we're deferring the variable, we only need to make RTL if
8127 there's an ASMSPEC. Otherwise, we'll lazily create it later when
8128 we need it. (There's no way to lazily create RTL for things that
8129 have assembly specs because the information about the specifier
8130 isn't stored in the tree, yet) */
8131 if (defer_p && asmspec)
6c418184 8132 make_decl_rtl (decl, asmspec);
95ee998c 8133 /* If we're not deferring, go ahead and assemble the variable. */
92643fea 8134 else if (!defer_p)
27778b73 8135 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
27778b73
MM
8136}
8137
8138/* The old ARM scoping rules injected variables declared in the
8139 initialization statement of a for-statement into the surrounding
8140 scope. We support this usage, in order to be backward-compatible.
8141 DECL is a just-declared VAR_DECL; if necessary inject its
8142 declaration into the surrounding scope. */
8143
b7b8bcd2 8144void
27778b73
MM
8145maybe_inject_for_scope_var (decl)
8146 tree decl;
8147{
c3783399
NS
8148 if (!DECL_NAME (decl))
8149 return;
6b607ffd
MM
8150
8151 /* Declarations of __FUNCTION__ and its ilk appear magically when
8152 the variable is first used. If that happens to be inside a
8153 for-loop, we don't want to do anything special. */
8154 if (DECL_PRETTY_FUNCTION_P (decl))
8155 return;
5362b086 8156
27778b73
MM
8157 if (current_binding_level->is_for_scope)
8158 {
e2500fed 8159 struct cp_binding_level *outer
27778b73
MM
8160 = current_binding_level->level_chain;
8161
8162 /* Check to see if the same name is already bound at the outer
8163 level, either because it was directly declared, or because a
8164 dead for-decl got preserved. In either case, the code would
8165 not have been valid under the ARM scope rules, so clear
8166 is_for_scope for the current_binding_level.
8167
8168 Otherwise, we need to preserve the temp slot for decl to last
8169 into the outer binding level. */
8170
68642fb6 8171 tree outer_binding
27778b73 8172 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
68642fb6 8173
27778b73 8174 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
68642fb6 8175 && (TREE_CODE (BINDING_VALUE (outer_binding))
27778b73
MM
8176 == VAR_DECL)
8177 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
8178 {
8179 BINDING_VALUE (outer_binding)
8180 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
8181 current_binding_level->is_for_scope = 0;
8182 }
27778b73
MM
8183 }
8184}
8185
ed5511d9 8186/* Generate code to initialize DECL (a local variable). */
27778b73 8187
8e3df2de
MM
8188static void
8189initialize_local_var (decl, init)
27778b73
MM
8190 tree decl;
8191 tree init;
27778b73 8192{
9ed9e79a 8193 tree type = TREE_TYPE (decl);
27778b73 8194
8e3df2de
MM
8195 my_friendly_assert (TREE_CODE (decl) == VAR_DECL
8196 || TREE_CODE (decl) == RESULT_DECL,
8197 20021010);
8198 my_friendly_assert (!TREE_STATIC (decl), 20021010);
b7b8bcd2 8199
8e3df2de 8200 if (DECL_SIZE (decl) == NULL_TREE)
b7b8bcd2
MM
8201 {
8202 /* If we used it already as memory, it must stay in memory. */
8203 DECL_INITIAL (decl) = NULL_TREE;
8204 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
8205 }
8206
27778b73
MM
8207 if (DECL_SIZE (decl) && type != error_mark_node)
8208 {
8209 int already_used;
68642fb6 8210
27778b73 8211 /* Compute and store the initial value. */
27778b73
MM
8212 already_used = TREE_USED (decl) || TREE_USED (type);
8213
8e3df2de
MM
8214 /* Perform the initialization. */
8215 if (init)
27778b73 8216 {
24bef158
MM
8217 int saved_stmts_are_full_exprs_p;
8218
3a0d3e1e 8219 my_friendly_assert (building_stmt_tree (), 20000906);
f2c5f623 8220 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
ae499cce 8221 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
8e3df2de 8222 finish_expr_stmt (init);
5362b086 8223 current_stmt_tree ()->stmts_are_full_exprs_p =
ae499cce 8224 saved_stmts_are_full_exprs_p;
27778b73
MM
8225 }
8226
8227 /* Set this to 0 so we can tell whether an aggregate which was
8228 initialized was ever used. Don't do this if it has a
8229 destructor, so we don't complain about the 'resource
b7b8bcd2
MM
8230 allocation is initialization' idiom. Now set
8231 attribute((unused)) on types so decls of that type will be
8232 marked used. (see TREE_USED, above.) */
27778b73
MM
8233 if (TYPE_NEEDS_CONSTRUCTING (type)
8234 && ! already_used
834c6dff 8235 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
27778b73
MM
8236 && DECL_NAME (decl))
8237 TREE_USED (decl) = 0;
b7b8bcd2 8238 else if (already_used)
27778b73
MM
8239 TREE_USED (decl) = 1;
8240 }
24bef158 8241
8e3df2de
MM
8242 /* Generate a cleanup, if necessary. */
8243 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8244 {
8245 tree cleanup;
27778b73 8246
8e3df2de
MM
8247 /* Compute the cleanup. */
8248 cleanup = cxx_maybe_build_cleanup (decl);
8249
8250 /* Record the cleanup required for this declaration. */
8251 if (DECL_SIZE (decl) && cleanup)
8252 finish_decl_cleanup (decl, cleanup);
8253 }
24bef158
MM
8254}
8255
8d08fdba
MS
8256/* Finish processing of a declaration;
8257 install its line number and initial value.
8258 If the length of an array type is not known before,
8259 it must be determined now, from the initial value, or it is an error.
8260
8b27e9ef 8261 INIT holds the value of an initializer that should be allowed to escape
8d08fdba
MS
8262 the normal rules.
8263
920f9474 8264 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 8265 if the (init) syntax was used. */
8d08fdba
MS
8266
8267void
cd9f6678 8268cp_finish_decl (decl, init, asmspec_tree, flags)
8d08fdba
MS
8269 tree decl, init;
8270 tree asmspec_tree;
6060a796 8271 int flags;
8d08fdba
MS
8272{
8273 register tree type;
27778b73 8274 tree ttype = NULL_TREE;
9c0758dd 8275 const char *asmspec = NULL;
8d08fdba
MS
8276 int was_readonly = 0;
8277
8d08fdba
MS
8278 if (! decl)
8279 {
8280 if (init)
8251199e 8281 error ("assignment (not initialization) in declaration");
8d08fdba
MS
8282 return;
8283 }
8284
a4443a08 8285 /* If a name was specified, get the string. */
41c64394
RH
8286 if (current_binding_level == global_binding_level)
8287 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
8d08fdba 8288 if (asmspec_tree)
5cc90635 8289 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 8290
2c73f9f5
ML
8291 if (init && TREE_CODE (init) == NAMESPACE_DECL)
8292 {
33bd39a2 8293 error ("cannot initialize `%D' to namespace `%D'",
2c73f9f5
ML
8294 decl, init);
8295 init = NULL_TREE;
8296 }
8297
6ba89f8e 8298 if (current_class_type
4f1c5b7d 8299 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
8300 && TYPE_BEING_DEFINED (current_class_type)
8301 && (DECL_INITIAL (decl) || init))
3febd123 8302 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 8303
68642fb6 8304 if (TREE_CODE (decl) == VAR_DECL
9a68c51f
JM
8305 && DECL_CONTEXT (decl)
8306 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
8307 && DECL_CONTEXT (decl) != current_namespace
8308 && init)
8309 {
a1c65f9f 8310 /* Leave the namespace of the object. */
9a68c51f
JM
8311 pop_decl_namespace ();
8312 }
8313
c82dbd95 8314 type = TREE_TYPE (decl);
8d08fdba 8315
f376e137 8316 if (type == error_mark_node)
cd9f6678 8317 return;
5362b086 8318
a7a7710d
NS
8319 if (TYPE_HAS_MUTABLE_P (type))
8320 TREE_READONLY (decl) = 0;
24bef158 8321
5156628f 8322 if (processing_template_decl)
5566b478 8323 {
08ac397c
JM
8324 /* Add this declaration to the statement-tree. */
8325 if (at_function_scope_p ()
8326 && TREE_CODE (decl) != RESULT_DECL)
8327 add_decl_stmt (decl);
8328
5566b478 8329 if (init && DECL_INITIAL (decl))
2a1e9fdd 8330 DECL_INITIAL (decl) = init;
5566b478
MS
8331 goto finish_end0;
8332 }
3e41d13b 8333
27778b73
MM
8334 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
8335 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
8336
8d08fdba
MS
8337 /* Take care of TYPE_DECLs up front. */
8338 if (TREE_CODE (decl) == TYPE_DECL)
8339 {
a0a33927
MS
8340 if (type != error_mark_node
8341 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
8342 {
8343 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
33bd39a2 8344 warning ("shadowing previous type declaration of `%#D'", decl);
8d08fdba
MS
8345 set_identifier_type_value (DECL_NAME (decl), type);
8346 CLASSTYPE_GOT_SEMICOLON (type) = 1;
8347 }
cffa8729
MS
8348
8349 /* If we have installed this as the canonical typedef for this
8350 type, and that type has not been defined yet, delay emitting
956d6950 8351 the debug information for it, as we will emit it later. */
d2e5ee5c 8352 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 8353 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
8354 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8355
3e411c3f 8356 rest_of_decl_compilation (decl, NULL,
5566b478 8357 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
8358 goto finish_end;
8359 }
3e41d13b 8360
8d08fdba 8361 if (TREE_CODE (decl) != FUNCTION_DECL)
3e41d13b 8362 ttype = target_type (type);
8d08fdba
MS
8363
8364 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
8365 && TYPE_NEEDS_CONSTRUCTING (type))
8366 {
8d08fdba
MS
8367 /* Currently, GNU C++ puts constants in text space, making them
8368 impossible to initialize. In the future, one would hope for
8369 an operating system which understood the difference between
8370 initialization and the running of a program. */
8371 was_readonly = 1;
8372 TREE_READONLY (decl) = 0;
8373 }
8374
27778b73 8375 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8d08fdba 8376 {
27778b73
MM
8377 /* This must override the asm specifier which was placed by
8378 grokclassfn. Lay this out fresh. */
19e7881c 8379 SET_DECL_RTL (TREE_TYPE (decl), NULL_RTX);
92643fea 8380 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
6c418184 8381 make_decl_rtl (decl, asmspec);
8d08fdba 8382 }
17bbb839 8383 else if (TREE_CODE (decl) == RESULT_DECL)
8e3df2de 8384 init = check_initializer (decl, init, flags);
17bbb839
MM
8385 else if (TREE_CODE (decl) == VAR_DECL)
8386 {
8387 /* Only PODs can have thread-local storage. Other types may require
8388 various kinds of non-trivial initialization. */
8389 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
8390 error ("`%D' cannot be thread-local because it has non-POD type `%T'",
8391 decl, TREE_TYPE (decl));
8392 /* Convert the initializer to the type of DECL, if we have not
8393 already initialized DECL. */
8394 if (!DECL_INITIALIZED_P (decl)
8395 /* If !DECL_EXTERNAL then DECL is being defined. In the
8e3df2de 8396 case of a static data member initialized inside the
17bbb839
MM
8397 class-specifier, there can be an initializer even if DECL
8398 is *not* defined. */
8399 && (!DECL_EXTERNAL (decl) || init))
8400 {
8e3df2de 8401 init = check_initializer (decl, init, flags);
b4c20e52
MM
8402 /* Thread-local storage cannot be dynamically initialized. */
8403 if (DECL_THREAD_LOCAL (decl) && init)
8404 {
8405 error ("`%D' is thread-local and so cannot be dynamically "
8406 "initialized", decl);
8407 init = NULL_TREE;
8408 }
17bbb839
MM
8409 /* Handle:
8410
8411 [dcl.init]
8412
8413 The memory occupied by any object of static storage
8414 duration is zero-initialized at program startup before
8415 any other initialization takes place.
8416
8417 We cannot create an appropriate initializer until after
8418 the type of DECL is finalized. If DECL_INITIAL is set,
8419 then the DECL is statically initialized, and any
8420 necessary zero-initialization has already been performed. */
8421 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
8422 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
8423 /*static_storage_p=*/true);
8424 /* Remember that the initialization for this variable has
8425 taken place. */
8426 DECL_INITIALIZED_P (decl) = 1;
8427 }
d881ff25
MM
8428 /* If the variable has an array type, lay out the type, even if
8429 there is no initializer. It is valid to index through the
8430 array, and we must get TYPE_ALIGN set correctly on the array
8431 type. */
8432 else if (TREE_CODE (type) == ARRAY_TYPE)
8433 layout_type (type);
17bbb839 8434 }
3e41d13b 8435
57cf57fb
JM
8436 /* Add this declaration to the statement-tree. This needs to happen
8437 after the call to check_initializer so that the DECL_STMT for a
8438 reference temp is added before the DECL_STMT for the reference itself. */
08ac397c
JM
8439 if (building_stmt_tree ()
8440 && at_function_scope_p ()
8441 && TREE_CODE (decl) != RESULT_DECL)
8442 add_decl_stmt (decl);
8443
8d08fdba 8444 if (TREE_CODE (decl) == VAR_DECL)
57b52417 8445 layout_var_decl (decl);
8d08fdba
MS
8446
8447 /* Output the assembler code and/or RTL code for variables and functions,
8448 unless the type is an undefined structure or union.
8449 If not, it will get done when the type is completed. */
8d08fdba
MS
8450 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8451 || TREE_CODE (decl) == RESULT_DECL)
8452 {
27778b73
MM
8453 if (TREE_CODE (decl) == VAR_DECL)
8454 maybe_commonize_var (decl);
8d08fdba 8455
27778b73 8456 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 8457
68642fb6 8458 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 8459 || TREE_CODE (type) == METHOD_TYPE)
68642fb6 8460 abstract_virtuals_error (decl,
27778b73 8461 strip_array_types (TREE_TYPE (type)));
68642fb6 8462 else
27778b73 8463 abstract_virtuals_error (decl, strip_array_types (type));
8d08fdba 8464
8e3df2de
MM
8465 if (TREE_CODE (decl) == FUNCTION_DECL
8466 || TREE_TYPE (decl) == error_mark_node)
8467 /* No initialization required. */
faae18ab 8468 ;
67d743fe
MS
8469 else if (DECL_EXTERNAL (decl)
8470 && ! (DECL_LANG_SPECIFIC (decl)
8471 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
8472 {
8473 if (init)
8474 DECL_INITIAL (decl) = init;
8475 }
8e3df2de 8476 else
8d08fdba 8477 {
8e3df2de
MM
8478 /* A variable definition. */
8479 if (DECL_FUNCTION_SCOPE_P (decl))
24bef158 8480 {
8e3df2de
MM
8481 /* This is a local declaration. */
8482 if (doing_semantic_analysis_p ())
8483 maybe_inject_for_scope_var (decl);
8484 /* Initialize the local variable. */
8485 if (processing_template_decl)
8486 {
8487 if (init || DECL_INITIAL (decl) == error_mark_node)
8488 DECL_INITIAL (decl) = init;
8489 }
8490 else if (!TREE_STATIC (decl))
8491 initialize_local_var (decl, init);
24bef158 8492 }
8e3df2de
MM
8493
8494 if (TREE_STATIC (decl))
9ed9e79a
MM
8495 expand_static_init (decl, init);
8496 }
8d08fdba
MS
8497 finish_end0:
8498
8499 /* Undo call to `pushclass' that was done in `start_decl'
8500 due to initialization of qualified member variable.
8501 I.e., Foo::x = 10; */
8502 {
4f1c5b7d 8503 tree context = CP_DECL_CONTEXT (decl);
8d08fdba 8504 if (context
2f939d94 8505 && TYPE_P (context)
8d08fdba
MS
8506 && (TREE_CODE (decl) == VAR_DECL
8507 /* We also have a pushclass done that we need to undo here
8508 if we're at top level and declare a method. */
5566b478
MS
8509 || TREE_CODE (decl) == FUNCTION_DECL)
8510 /* If size hasn't been set, we're still defining it,
8511 and therefore inside the class body; don't pop
8512 the binding level.. */
d0f062fb 8513 && COMPLETE_TYPE_P (context)
5566b478 8514 && context == current_class_type)
6b400b21 8515 pop_nested_class ();
8d08fdba
MS
8516 }
8517 }
8518
8519 finish_end:
8520
8d08fdba
MS
8521 if (was_readonly)
8522 TREE_READONLY (decl) = 1;
8d08fdba
MS
8523}
8524
82580166 8525/* This is here for a midend callback from c-common.c */
e92cc029 8526
82580166
MS
8527void
8528finish_decl (decl, init, asmspec_tree)
8529 tree decl, init;
8530 tree asmspec_tree;
8531{
cd9f6678 8532 cp_finish_decl (decl, init, asmspec_tree, 0);
82580166
MS
8533}
8534
db4283a0
MM
8535/* Returns a declaration for a VAR_DECL as if:
8536
8537 extern "C" TYPE NAME;
8538
8539 had been seen. Used to create compiler-generated global
8540 variables. */
8541
8542tree
8543declare_global_var (name, type)
8544 tree name;
8545 tree type;
8546{
8547 tree decl;
8548
8549 push_to_top_level ();
8550 decl = build_decl (VAR_DECL, name, type);
8551 TREE_PUBLIC (decl) = 1;
8552 DECL_EXTERNAL (decl) = 1;
8553 DECL_ARTIFICIAL (decl) = 1;
8554 pushdecl (decl);
8555 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8556 pop_from_top_level ();
8557
8558 return decl;
8559}
8560
8561/* Returns a pointer to the `atexit' function. Note that if
838dfd8a 8562 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
db4283a0
MM
8563 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8564
8565static tree
8566get_atexit_node ()
8567{
8568 tree atexit_fndecl;
8569 tree arg_types;
8570 tree fn_type;
8571 tree fn_ptr_type;
8572 const char *name;
8573
8574 if (atexit_node)
8575 return atexit_node;
8576
8577 if (flag_use_cxa_atexit)
8578 {
8579 /* The declaration for `__cxa_atexit' is:
8580
8581 int __cxa_atexit (void (*)(void *), void *, void *)
8582
8583 We build up the argument types and then then function type
8584 itself. */
68642fb6 8585
db4283a0
MM
8586 /* First, build the pointer-to-function type for the first
8587 argument. */
8588 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8589 fn_type = build_function_type (void_type_node, arg_types);
8590 fn_ptr_type = build_pointer_type (fn_type);
8591 /* Then, build the rest of the argument types. */
8592 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8593 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8594 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8595 /* And the final __cxa_atexit type. */
8596 fn_type = build_function_type (integer_type_node, arg_types);
8597 fn_ptr_type = build_pointer_type (fn_type);
8598 name = "__cxa_atexit";
8599 }
8600 else
8601 {
8602 /* The declaration for `atexit' is:
68642fb6 8603
db4283a0
MM
8604 int atexit (void (*)());
8605
8606 We build up the argument types and then then function type
8607 itself. */
8608 fn_type = build_function_type (void_type_node, void_list_node);
8609 fn_ptr_type = build_pointer_type (fn_type);
8610 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8611 /* Build the final atexit type. */
8612 fn_type = build_function_type (integer_type_node, arg_types);
8613 name = "atexit";
8614 }
8615
8616 /* Now, build the function declaration. */
8617 push_lang_context (lang_name_c);
0c11ada6 8618 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
8619 mark_used (atexit_fndecl);
8620 pop_lang_context ();
8621 atexit_node = default_conversion (atexit_fndecl);
8622
8623 return atexit_node;
8624}
8625
8626/* Returns the __dso_handle VAR_DECL. */
8627
8628static tree
8629get_dso_handle_node ()
8630{
8631 if (dso_handle_node)
8632 return dso_handle_node;
8633
8634 /* Declare the variable. */
8635 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8636 ptr_type_node);
8637
8638 return dso_handle_node;
8639}
8640
8641/* Begin a new function with internal linkage whose job will be simply
8642 to destroy some particular variable. */
8643
8644static tree
8645start_cleanup_fn ()
8646{
8647 static int counter = 0;
23ccd1f3 8648 int old_interface_only = interface_only;
db4283a0
MM
8649 int old_interface_unknown = interface_unknown;
8650 char name[32];
8651 tree parmtypes;
8652 tree fntype;
8653 tree fndecl;
8654
8655 push_to_top_level ();
8656
8657 /* No need to mangle this. */
8658 push_lang_context (lang_name_c);
8659
23ccd1f3 8660 interface_only = 0;
db4283a0
MM
8661 interface_unknown = 1;
8662
8663 /* Build the parameter-types. */
8664 parmtypes = void_list_node;
8665 /* Functions passed to __cxa_atexit take an additional parameter.
8666 We'll just ignore it. After we implement the new calling
8667 convention for destructors, we can eliminate the use of
8668 additional cleanup functions entirely in the -fnew-abi case. */
8669 if (flag_use_cxa_atexit)
8670 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8671 /* Build the function type itself. */
8672 fntype = build_function_type (void_type_node, parmtypes);
8673 /* Build the name of the function. */
8674 sprintf (name, "__tcf_%d", counter++);
8675 /* Build the function declaration. */
8676 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8677 /* It's a function with internal linkage, generated by the
8678 compiler. */
8679 TREE_PUBLIC (fndecl) = 0;
8680 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
8681 /* Make the function `inline' so that it is only emitted if it is
8682 actually needed. It is unlikely that it will be inlined, since
aba649ba 8683 it is only called via a function pointer, but we avoid unnecessary
5a728aca
MM
8684 emissions this way. */
8685 DECL_INLINE (fndecl) = 1;
db4283a0
MM
8686 /* Build the parameter. */
8687 if (flag_use_cxa_atexit)
8688 {
8689 tree parmdecl;
8690
8e51619a 8691 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
db4283a0 8692 DECL_CONTEXT (parmdecl) = fndecl;
db4283a0
MM
8693 TREE_USED (parmdecl) = 1;
8694 DECL_ARGUMENTS (fndecl) = parmdecl;
8695 }
8696
09ed39ad 8697 pushdecl (fndecl);
db4283a0 8698 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
db4283a0
MM
8699
8700 interface_unknown = old_interface_unknown;
23ccd1f3 8701 interface_only = old_interface_only;
db4283a0
MM
8702
8703 pop_lang_context ();
8704
8705 return current_function_decl;
8706}
8707
8708/* Finish the cleanup function begun by start_cleanup_fn. */
8709
8710static void
8711end_cleanup_fn ()
8712{
0acf7199 8713 expand_body (finish_function (0));
db4283a0
MM
8714
8715 pop_from_top_level ();
8716}
8717
bf419747
MM
8718/* Generate code to handle the destruction of DECL, an object with
8719 static storage duration. */
f0105ed3 8720
bf419747
MM
8721void
8722register_dtor_fn (decl)
f0105ed3
MM
8723 tree decl;
8724{
db4283a0 8725 tree cleanup;
f0105ed3 8726 tree compound_stmt;
db4283a0
MM
8727 tree args;
8728 tree fcall;
db4283a0 8729 int saved_flag_access_control;
f0105ed3 8730
834c6dff 8731 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
bf419747
MM
8732 return;
8733
f0105ed3
MM
8734 /* Call build_cleanup before we enter the anonymous function so that
8735 any access checks will be done relative to the current scope,
8736 rather than the scope of the anonymous function. */
8737 build_cleanup (decl);
8738
8739 /* Now start the function. */
db4283a0 8740 cleanup = start_cleanup_fn ();
f0105ed3
MM
8741
8742 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8743 to the original function, rather than the anonymous one. That
8744 will make the back-end think that nested functions are in use,
8745 which causes confusion. */
8746 saved_flag_access_control = flag_access_control;
a723baf1 8747 scope_chain->check_access = flag_access_control = 0;
f0105ed3 8748 fcall = build_cleanup (decl);
a723baf1 8749 scope_chain->check_access = flag_access_control = saved_flag_access_control;
f0105ed3
MM
8750
8751 /* Create the body of the anonymous function. */
8752 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8753 finish_expr_stmt (fcall);
8754 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
db4283a0 8755 end_cleanup_fn ();
f0105ed3
MM
8756
8757 /* Call atexit with the cleanup function. */
dffd7eb6 8758 cxx_mark_addressable (cleanup);
f0105ed3 8759 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
db4283a0
MM
8760 if (flag_use_cxa_atexit)
8761 {
0f268005
MM
8762 args = tree_cons (NULL_TREE,
8763 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
8764 NULL_TREE);
db4283a0
MM
8765 args = tree_cons (NULL_TREE, null_pointer_node, args);
8766 args = tree_cons (NULL_TREE, cleanup, args);
8767 }
8768 else
8769 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8770 finish_expr_stmt (build_function_call (get_atexit_node (), args));
f0105ed3
MM
8771}
8772
8e3df2de
MM
8773/* DECL is a VAR_DECL with static storage duration. INIT, if present,
8774 is its initializer. Generate code to handle the construction
8775 and destruction of DECL. */
8776
8777static void
8d08fdba
MS
8778expand_static_init (decl, init)
8779 tree decl;
8780 tree init;
8781{
8e3df2de
MM
8782 tree oldstatic;
8783
8784 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20021010);
8785 my_friendly_assert (TREE_STATIC (decl), 20021010);
8786
8787 /* Some variables require no initialization. */
8788 if (!init
8789 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8790 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8791 return;
8792
8793 oldstatic = value_member (decl, static_aggregates);
a4443a08 8794
8d08fdba
MS
8795 if (oldstatic)
8796 {
8797 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
33bd39a2 8798 error ("multiple initializations given for `%D'", decl);
8d08fdba 8799 }
0aafb128 8800 else if (! toplevel_bindings_p ())
8d08fdba
MS
8801 {
8802 /* Emit code to perform this initialization but once. */
b7b8bcd2 8803 tree if_stmt;
f0105ed3 8804 tree then_clause;
f1dedc31 8805 tree assignment;
c395453c
MM
8806 tree guard;
8807 tree guard_init;
8d08fdba 8808
2036a15c
MM
8809 /* Emit code to perform this initialization but once. This code
8810 looks like:
8811
c395453c
MM
8812 static int guard = 0;
8813 if (!guard) {
2036a15c 8814 // Do initialization.
c395453c 8815 guard = 1;
2036a15c
MM
8816 // Register variable for destruction at end of program.
8817 }
8818
8819 Note that the `temp' variable is only set to 1 *after* the
8820 initialization is complete. This ensures that an exception,
8821 thrown during the construction, will cause the variable to
8822 reinitialized when we pass through this code again, as per:
68642fb6 8823
2036a15c
MM
8824 [stmt.dcl]
8825
8826 If the initialization exits by throwing an exception, the
8827 initialization is not complete, so it will be tried again
8828 the next time control enters the declaration.
8829
8830 In theory, this process should be thread-safe, too; multiple
8831 threads should not be able to initialize the variable more
8832 than once. We don't yet attempt to ensure thread-safety. */
c395453c
MM
8833
8834 /* Create the guard variable. */
8835 guard = get_guard (decl);
2036a15c
MM
8836
8837 /* Begin the conditional initialization. */
b7b8bcd2 8838 if_stmt = begin_if_stmt ();
c395453c 8839 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
f0105ed3 8840 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
72b7eeff 8841
2036a15c 8842 /* Do the initialization itself. */
8e3df2de 8843 assignment = init ? init : NULL_TREE;
f1dedc31
MM
8844
8845 /* Once the assignment is complete, set TEMP to 1. Since the
8846 construction of the static object is complete at this point,
8847 we want to make sure TEMP is set to 1 even if a temporary
8848 constructed during the initialization throws an exception
8849 when it is destroyed. So, we combine the initialization and
8850 the assignment to TEMP into a single expression, ensuring
8851 that when we call finish_expr_stmt the cleanups will not be
8852 run until after TEMP is set to 1. */
c395453c 8853 guard_init = set_guard (guard);
f1dedc31
MM
8854 if (assignment)
8855 {
8856 assignment = tree_cons (NULL_TREE, assignment,
68642fb6 8857 build_tree_list (NULL_TREE,
c395453c 8858 guard_init));
f1dedc31
MM
8859 assignment = build_compound_expr (assignment);
8860 }
8861 else
c395453c 8862 assignment = guard_init;
f1dedc31 8863 finish_expr_stmt (assignment);
72b7eeff 8864
2036a15c
MM
8865 /* Use atexit to register a function for destroying this static
8866 variable. */
bf419747 8867 register_dtor_fn (decl);
72b7eeff 8868
f0105ed3 8869 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
b7b8bcd2
MM
8870 finish_then_clause (if_stmt);
8871 finish_if_stmt ();
8d08fdba
MS
8872 }
8873 else
bbd15aac 8874 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 8875}
3c5c0849
MM
8876
8877/* Finish the declaration of a catch-parameter. */
8878
b35d4555 8879tree
3c5c0849
MM
8880start_handler_parms (declspecs, declarator)
8881 tree declspecs;
8882 tree declarator;
8883{
8884 tree decl;
8885 if (declspecs)
8886 {
8887 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
91d231cb 8888 1, NULL);
3c5c0849
MM
8889 if (decl == NULL_TREE)
8890 error ("invalid catch parameter");
8891 }
8892 else
8893 decl = NULL_TREE;
b35d4555
MM
8894
8895 return decl;
3c5c0849
MM
8896}
8897
8d08fdba
MS
8898\f
8899/* Make TYPE a complete type based on INITIAL_VALUE.
8900 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6ab5c740 8901 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8d08fdba
MS
8902
8903int
8904complete_array_type (type, initial_value, do_default)
8905 tree type, initial_value;
8906 int do_default;
8907{
8908 register tree maxindex = NULL_TREE;
8909 int value = 0;
68642fb6 8910
8d08fdba
MS
8911 if (initial_value)
8912 {
7b019c19
MM
8913 /* An array of character type can be initialized from a
8914 brace-enclosed string constant. */
8915 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
8916 && TREE_CODE (initial_value) == CONSTRUCTOR
8917 && CONSTRUCTOR_ELTS (initial_value)
8918 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
8919 == STRING_CST)
8920 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
8921 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
8922
8923 /* Note MAXINDEX is really the maximum index, one less than the
8924 size. */
8d08fdba 8925 if (TREE_CODE (initial_value) == STRING_CST)
e1cd6e56
MS
8926 {
8927 int eltsize
8928 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8929 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8930 / eltsize) - 1, 0);
8931 }
8d08fdba
MS
8932 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8933 {
e1cd6e56 8934 tree elts = CONSTRUCTOR_ELTS (initial_value);
fed3cef0
RK
8935
8936 maxindex = ssize_int (-1);
e1cd6e56
MS
8937 for (; elts; elts = TREE_CHAIN (elts))
8938 {
8939 if (TREE_PURPOSE (elts))
8940 maxindex = TREE_PURPOSE (elts);
8941 else
fed3cef0 8942 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
e1cd6e56
MS
8943 }
8944 maxindex = copy_node (maxindex);
8d08fdba
MS
8945 }
8946 else
8947 {
8948 /* Make an error message unless that happened already. */
8949 if (initial_value != error_mark_node)
8950 value = 1;
0db982be
ML
8951 else
8952 initial_value = NULL_TREE;
8d08fdba
MS
8953
8954 /* Prevent further error messages. */
8955 maxindex = build_int_2 (0, 0);
8956 }
8957 }
8958
8959 if (!maxindex)
8960 {
8961 if (do_default)
8962 maxindex = build_int_2 (0, 0);
8963 value = 2;
8964 }
8965
8966 if (maxindex)
8967 {
51c184be 8968 tree itype;
6ab5c740
NS
8969 tree domain;
8970
8971 domain = build_index_type (maxindex);
8972 TYPE_DOMAIN (type) = domain;
51c184be 8973
dff6b454 8974 if (! TREE_TYPE (maxindex))
6ab5c740 8975 TREE_TYPE (maxindex) = domain;
51c184be
MS
8976 if (initial_value)
8977 itype = TREE_TYPE (initial_value);
8978 else
8979 itype = NULL;
8980 if (itype && !TYPE_DOMAIN (itype))
6ab5c740 8981 TYPE_DOMAIN (itype) = domain;
dff6b454
RK
8982 /* The type of the main variant should never be used for arrays
8983 of different sizes. It should only ever be completed with the
8984 size of the array. */
8985 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
6ab5c740 8986 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8d08fdba
MS
8987 }
8988
8989 /* Lay out the type now that we can get the real answer. */
8990
8991 layout_type (type);
8992
8993 return value;
8994}
8995\f
8996/* Return zero if something is declared to be a member of type
8997 CTYPE when in the context of CUR_TYPE. STRING is the error
8998 message to print in that case. Otherwise, quietly return 1. */
e92cc029 8999
8d08fdba 9000static int
4dacf5bd 9001member_function_or_else (ctype, cur_type, flags)
8d08fdba 9002 tree ctype, cur_type;
4dacf5bd 9003 enum overload_flags flags;
8d08fdba
MS
9004{
9005 if (ctype && ctype != cur_type)
9006 {
4dacf5bd 9007 if (flags == DTOR_FLAG)
33bd39a2 9008 error ("destructor for alien class `%T' cannot be a member",
2ae7bada 9009 ctype);
4dacf5bd 9010 else
33bd39a2 9011 error ("constructor for alien class `%T' cannot be a member",
2ae7bada 9012 ctype);
8d08fdba
MS
9013 return 0;
9014 }
9015 return 1;
9016}
9017\f
9018/* Subroutine of `grokdeclarator'. */
9019
9020/* Generate errors possibly applicable for a given set of specifiers.
9021 This is for ARM $7.1.2. */
e92cc029 9022
8d08fdba
MS
9023static void
9024bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
9025 tree object;
d8e178a0 9026 const char *type;
8d08fdba
MS
9027 int virtualp, quals, friendp, raises, inlinep;
9028{
9029 if (virtualp)
33bd39a2 9030 error ("`%D' declared as a `virtual' %s", object, type);
8d08fdba 9031 if (inlinep)
33bd39a2 9032 error ("`%D' declared as an `inline' %s", object, type);
8d08fdba 9033 if (quals)
33bd39a2 9034 error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
a28e3c7f 9035 object, type);
8d08fdba 9036 if (friendp)
f8e55f34 9037 cp_error_at ("`%D' declared as a friend", object);
e1be26f4
RS
9038 if (raises
9039 && (TREE_CODE (object) == TYPE_DECL
9040 || (!TYPE_PTRFN_P (TREE_TYPE (object))
742a37d5 9041 && !TYPE_REFFN_P (TREE_TYPE (object))
e1be26f4 9042 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
f8e55f34 9043 cp_error_at ("`%D' declared with an exception specification", object);
8d08fdba
MS
9044}
9045
9046/* CTYPE is class type, or null if non-class.
9047 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
9048 or METHOD_TYPE.
9049 DECLARATOR is the function's name.
9050 VIRTUALP is truthvalue of whether the function is virtual or not.
9051 FLAGS are to be passed through to `grokclassfn'.
9052 QUALS are qualifiers indicating whether the function is `const'
9053 or `volatile'.
9054 RAISES is a list of exceptions that this function can raise.
9055 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 9056 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 9057
20496fa2 9058 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 9059 applicable error messages. */
e92cc029 9060
8d08fdba 9061static tree
386b8a85 9062grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7a8f9fa9 9063 raises, check, friendp, publicp, inlinep, funcdef_flag,
2c73f9f5 9064 template_count, in_namespace)
8d08fdba
MS
9065 tree ctype, type;
9066 tree declarator;
386b8a85 9067 tree orig_declarator;
8d08fdba
MS
9068 int virtualp;
9069 enum overload_flags flags;
7a8f9fa9 9070 tree quals, raises;
386b8a85 9071 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
2c73f9f5 9072 tree in_namespace;
8d08fdba 9073{
1951a1b6 9074 tree decl;
8d08fdba 9075 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
856216bb 9076 int has_default_arg = 0;
42976354 9077 tree t;
8d08fdba 9078
8d08fdba 9079 if (raises)
271e6f02 9080 type = build_exception_variant (type, raises);
c11b6f21 9081
8d08fdba 9082 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
a1c65f9f 9083 /* Propagate volatile out from type to decl. */
8d08fdba 9084 if (TYPE_VOLATILE (type))
893de33c 9085 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 9086
79c4d4b7 9087 /* If this decl has namespace scope, set that up. */
2c73f9f5 9088 if (in_namespace)
b262d64c 9089 set_decl_namespace (decl, in_namespace, friendp);
adae082f 9090 else if (!ctype)
79c4d4b7 9091 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 9092
0f8766b8
JM
9093 /* `main' and builtins have implicit 'C' linkage. */
9094 if ((MAIN_NAME_P (declarator)
9095 || (IDENTIFIER_LENGTH (declarator) > 10
9096 && IDENTIFIER_POINTER (declarator)[0] == '_'
9097 && IDENTIFIER_POINTER (declarator)[1] == '_'
9098 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
9099 && current_lang_name == lang_name_cplusplus
94706a5c 9100 && ctype == NULL_TREE
79c4d4b7
JM
9101 /* NULL_TREE means global namespace. */
9102 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 9103 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 9104
8d08fdba
MS
9105 /* Should probably propagate const out from type to decl I bet (mrs). */
9106 if (staticp)
9107 {
9108 DECL_STATIC_FUNCTION_P (decl) = 1;
9109 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
9110 }
9111
e76a2646 9112 if (ctype)
4f1c5b7d 9113 DECL_CONTEXT (decl) = ctype;
e76a2646 9114
0f8766b8 9115 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 9116 {
848b92e1 9117 if (processing_template_decl)
cb9a3ff8 9118 error ("cannot declare `::main' to be a template");
faae18ab 9119 if (inlinep)
cb9a3ff8 9120 error ("cannot declare `::main' to be inline");
f22967f3 9121 if (!publicp)
cb9a3ff8 9122 error ("cannot declare `::main' to be static");
f22967f3
MM
9123 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9124 integer_type_node))
9125 error ("`main' must return `int'");
faae18ab
MS
9126 inlinep = 0;
9127 publicp = 1;
9128 }
50a6dbd7 9129
59e76fc6
JM
9130 /* Members of anonymous types and local classes have no linkage; make
9131 them internal. */
1951a1b6
JM
9132 /* FIXME what if it gets a name from typedef? */
9133 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 9134 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
9135 publicp = 0;
9136
9137 if (publicp)
9138 {
9139 /* [basic.link]: A name with no linkage (notably, the name of a class
9140 or enumeration declared in a local scope) shall not be used to
9141 declare an entity with linkage.
9142
9143 Only check this for public decls for now. */
9144 t = no_linkage_check (TREE_TYPE (decl));
9145 if (t)
9146 {
1951a1b6 9147 if (TYPE_ANONYMOUS_P (t))
7f7c930e 9148 {
eb68cb58 9149 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
9150 /* Allow this; it's pretty common in C. */;
9151 else
1951a1b6 9152 {
33bd39a2 9153 pedwarn ("non-local function `%#D' uses anonymous type",
1951a1b6
JM
9154 decl);
9155 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
9156 cp_pedwarn_at ("\
9157`%#D' does not refer to the unqualified type, so it is not used for linkage",
9158 TYPE_NAME (t));
9159 }
7f7c930e 9160 }
50a6dbd7 9161 else
33bd39a2 9162 pedwarn ("non-local function `%#D' uses local type `%T'",
cce2be43 9163 decl, t);
50a6dbd7
JM
9164 }
9165 }
9166
893de33c 9167 TREE_PUBLIC (decl) = publicp;
faae18ab 9168 if (! publicp)
893de33c
JM
9169 {
9170 DECL_INTERFACE_KNOWN (decl) = 1;
9171 DECL_NOT_REALLY_EXTERN (decl) = 1;
9172 }
faae18ab 9173
acc72c37 9174 /* If the declaration was declared inline, mark it as such. */
faae18ab 9175 if (inlinep)
acc72c37
MM
9176 DECL_DECLARED_INLINE_P (decl) = 1;
9177 /* We inline functions that are explicitly declared inline, or, when
9178 the user explicitly asks us to, all functions. */
9179 if (DECL_DECLARED_INLINE_P (decl) || flag_inline_trees == 2)
9180 DECL_INLINE (decl) = 1;
8d08fdba
MS
9181
9182 DECL_EXTERNAL (decl) = 1;
9183 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
9184 {
33bd39a2 9185 error ("%smember function `%D' cannot have `%T' method qualifier",
8d08fdba
MS
9186 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
9187 quals = NULL_TREE;
9188 }
9189
596ea4e5 9190 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
271e6f02 9191 grok_op_properties (decl, friendp);
8d08fdba 9192
4f1c5b7d 9193 if (ctype && decl_function_context (decl))
893de33c 9194 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 9195
42976354
BK
9196 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
9197 if (TREE_PURPOSE (t)
9198 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
9199 {
856216bb 9200 has_default_arg = 1;
42976354
BK
9201 break;
9202 }
9203
f9d94ea4
JM
9204 if (friendp
9205 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
9206 {
9207 if (funcdef_flag)
33bd39a2 9208 error
8251199e 9209 ("defining explicit specialization `%D' in friend declaration",
f9d94ea4
JM
9210 orig_declarator);
9211 else
9212 {
76e57b45
NS
9213 tree fns = TREE_OPERAND (orig_declarator, 0);
9214 tree args = TREE_OPERAND (orig_declarator, 1);
d363e7bf 9215
7e2421f7
MM
9216 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
9217 {
9218 /* Something like `template <class T> friend void f<T>()'. */
33bd39a2 9219 error ("invalid use of template-id `%D' in declaration of primary template",
7e2421f7 9220 orig_declarator);
20496fa2 9221 return NULL_TREE;
7e2421f7
MM
9222 }
9223
856216bb 9224
f9d94ea4
JM
9225 /* A friend declaration of the form friend void f<>(). Record
9226 the information in the TEMPLATE_ID_EXPR. */
9227 SET_DECL_IMPLICIT_INSTANTIATION (decl);
76e57b45
NS
9228
9229 if (TREE_CODE (fns) == COMPONENT_REF)
9230 {
9231 /* Due to bison parser ickiness, we will have already looked
9232 up an operator_name or PFUNCNAME within the current class
9233 (see template_id in parse.y). If the current class contains
a1c65f9f 9234 such a name, we'll get a COMPONENT_REF here. Undo that. */
d363e7bf 9235
76e57b45
NS
9236 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
9237 == current_class_type, 20001120);
9238 fns = TREE_OPERAND (fns, 1);
9239 }
9240 my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
9241 || TREE_CODE (fns) == LOOKUP_EXPR
9242 || TREE_CODE (fns) == OVERLOAD, 20001120);
9243 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
856216bb
MM
9244
9245 if (has_default_arg)
9246 {
33bd39a2 9247 error ("default arguments are not allowed in declaration of friend template specialization `%D'",
856216bb
MM
9248 decl);
9249 return NULL_TREE;
9250 }
9251
9252 if (inlinep)
9253 {
33bd39a2 9254 error ("`inline' is not allowed in declaration of friend template specialization `%D'",
856216bb
MM
9255 decl);
9256 return NULL_TREE;
9257 }
f9d94ea4 9258 }
f84b4be9 9259 }
386b8a85 9260
1eb0072d
JM
9261 if (funcdef_flag)
9262 /* Make the init_value nonzero so pushdecl knows this is not
9263 tentative. error_mark_node is replaced later with the BLOCK. */
9264 DECL_INITIAL (decl) = error_mark_node;
9265
93ca4ba7 9266 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
9267 TREE_NOTHROW (decl) = 1;
9268
75650646 9269 /* Caller will do the rest of this. */
8d08fdba
MS
9270 if (check < 0)
9271 return decl;
9272
a723baf1 9273 if (flags == NO_SPECIAL && ctype && constructor_name_p (declarator, ctype))
74b846e0
MM
9274 DECL_CONSTRUCTOR_P (decl) = 1;
9275
9276 /* Function gets the ugly name, field gets the nice one. This call
9277 may change the type of the function (because of default
9278 parameters)! */
9279 if (ctype != NULL_TREE)
9280 grokclassfn (ctype, decl, flags, quals);
9281
9282 decl = check_explicit_specialization (orig_declarator, decl,
9283 template_count,
9284 2 * (funcdef_flag != 0) +
9285 4 * (friendp != 0));
9286 if (decl == error_mark_node)
9287 return NULL_TREE;
98c1c668 9288
74b846e0
MM
9289 if (ctype != NULL_TREE
9290 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
9291 && check)
8d08fdba 9292 {
74b846e0 9293 tree old_decl;
8d08fdba 9294
74b846e0 9295 old_decl = check_classfn (ctype, decl);
8d08fdba 9296
74b846e0
MM
9297 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
9298 /* Because grokfndecl is always supposed to return a
9299 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9300 here. We depend on our callers to figure out that its
9301 really a template that's being returned. */
9302 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6c30752f 9303
74b846e0
MM
9304 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
9305 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5566b478 9306 {
74b846e0
MM
9307 /* Remove the `this' parm added by grokclassfn.
9308 XXX Isn't this done in start_function, too? */
3afb32a4 9309 revert_static_member_fn (decl);
74b846e0 9310 last_function_parms = TREE_CHAIN (last_function_parms);
5566b478 9311 }
74b846e0 9312 if (old_decl && DECL_ARTIFICIAL (old_decl))
33bd39a2 9313 error ("definition of implicitly-declared `%D'", old_decl);
8d08fdba 9314
74b846e0 9315 if (old_decl)
8d08fdba 9316 {
74b846e0
MM
9317 /* Since we've smashed OLD_DECL to its
9318 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9319 if (TREE_CODE (decl) == TEMPLATE_DECL)
9320 decl = DECL_TEMPLATE_RESULT (decl);
9321
9322 /* Attempt to merge the declarations. This can fail, in
0e339752 9323 the case of some invalid specialization declarations. */
74b846e0 9324 if (!duplicate_decls (decl, old_decl))
33bd39a2 9325 error ("no `%#D' member function declared in class `%T'",
74b846e0
MM
9326 decl, ctype);
9327 return old_decl;
8d08fdba
MS
9328 }
9329 }
74b846e0
MM
9330
9331 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9332 return NULL_TREE;
9333
9334 if (ctype == NULL_TREE || check)
9335 return decl;
9336
9337 if (virtualp)
cbb40945 9338 DECL_VIRTUAL_P (decl) = 1;
74b846e0 9339
8d08fdba
MS
9340 return decl;
9341}
9342
9e259dd1
MM
9343/* Create a VAR_DECL named NAME with the indicated TYPE.
9344
9345 If SCOPE is non-NULL, it is the class type or namespace containing
9346 the variable. If SCOPE is NULL, the variable should is created in
9347 the innermost enclosings scope. */
9348
8d08fdba 9349static tree
9e259dd1 9350grokvardecl (type, name, specbits_in, initialized, constp, scope)
8d08fdba 9351 tree type;
9e259dd1 9352 tree name;
d2e5ee5c 9353 RID_BIT_TYPE *specbits_in;
8d08fdba 9354 int initialized;
a9aedbc2 9355 int constp;
9e259dd1 9356 tree scope;
8d08fdba
MS
9357{
9358 tree decl;
f7da6097
MS
9359 RID_BIT_TYPE specbits;
9360
9e259dd1
MM
9361 my_friendly_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE,
9362 20020808);
9363
f7da6097 9364 specbits = *specbits_in;
8d08fdba 9365
9e259dd1
MM
9366 /* Compute the scope in which to place the variable. */
9367 if (!scope)
8d08fdba 9368 {
9e259dd1
MM
9369 /* An explicit "extern" specifier indicates a namespace-scope
9370 variable. */
9371 if (RIDBIT_SETP (RID_EXTERN, specbits))
9372 scope = current_namespace;
9373 else if (!at_function_scope_p ())
9374 {
9375 scope = current_scope ();
9376 if (!scope)
9377 scope = current_namespace;
9378 }
9379 }
9380
9381 if (scope
9382 && (/* If the variable is a namespace-scope variable declared in a
9383 template, we need DECL_LANG_SPECIFIC. */
9384 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9385 /* Similarly for namespace-scope variables with language linkage
9386 other than C++. */
9387 || (TREE_CODE (scope) == NAMESPACE_DECL
9388 && current_lang_name != lang_name_cplusplus)
9389 /* Similarly for static data members. */
9390 || TYPE_P (scope)))
9391 decl = build_lang_decl (VAR_DECL, name, type);
8d08fdba 9392 else
9e259dd1 9393 decl = build_decl (VAR_DECL, name, type);
79c4d4b7 9394
9e259dd1
MM
9395 if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
9396 set_decl_namespace (decl, scope, 0);
9397 else
9398 DECL_CONTEXT (decl) = scope;
6060a796 9399
9e259dd1
MM
9400 if (name && scope && current_lang_name != lang_name_c)
9401 /* We can't mangle lazily here because we don't have any
9402 way to recover whether or not a variable was `extern
9403 "C"' later. */
9404 mangle_decl (decl);
2c73f9f5 9405
8d08fdba
MS
9406 if (RIDBIT_SETP (RID_EXTERN, specbits))
9407 {
9408 DECL_THIS_EXTERN (decl) = 1;
9409 DECL_EXTERNAL (decl) = !initialized;
9410 }
9411
9412 /* In class context, static means one per class,
9413 public access, and static storage. */
2b9dc906 9414 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba
MS
9415 {
9416 TREE_PUBLIC (decl) = 1;
9417 TREE_STATIC (decl) = 1;
5b605f68 9418 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
9419 }
9420 /* At top level, either `static' or no s.c. makes a definition
9421 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 9422 else if (toplevel_bindings_p ())
8d08fdba 9423 {
a9aedbc2 9424 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 9425 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
9426 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9427 }
9428 /* Not at top level, only `static' makes a static definition. */
9429 else
9430 {
9431 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9432 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9433 }
50a6dbd7 9434
7a1f3f5f
RH
9435 if (RIDBIT_SETP (RID_THREAD, specbits))
9436 {
9437 if (targetm.have_tls)
9438 DECL_THREAD_LOCAL (decl) = 1;
9439 else
9440 /* A mere warning is sure to result in improper semantics
9441 at runtime. Don't bother to allow this to compile. */
9442 error ("thread-local storage not supported for this target");
9443 }
9444
50a6dbd7
JM
9445 if (TREE_PUBLIC (decl))
9446 {
9447 /* [basic.link]: A name with no linkage (notably, the name of a class
9448 or enumeration declared in a local scope) shall not be used to
9449 declare an entity with linkage.
9450
9451 Only check this for public decls for now. */
9452 tree t = no_linkage_check (TREE_TYPE (decl));
9453 if (t)
9454 {
1951a1b6 9455 if (TYPE_ANONYMOUS_P (t))
50a6dbd7
JM
9456 /* Ignore for now; `enum { foo } e' is pretty common. */;
9457 else
33bd39a2 9458 pedwarn ("non-local variable `%#D' uses local type `%T'",
50a6dbd7
JM
9459 decl, t);
9460 }
9461 }
9462
8d08fdba
MS
9463 return decl;
9464}
9465
d8f8dca1
MM
9466/* Create and return a canonical pointer to member function type, for
9467 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
9468
9469tree
9470build_ptrmemfunc_type (type)
9471 tree type;
9472{
4977bab6 9473 tree field, fields;
8d08fdba 9474 tree t;
46cbda4a 9475 tree unqualified_variant = NULL_TREE;
8d08fdba 9476
d48ebde1
NS
9477 if (type == error_mark_node)
9478 return type;
d363e7bf 9479
8d08fdba
MS
9480 /* If a canonical type already exists for this type, use it. We use
9481 this method instead of type_hash_canon, because it only does a
9482 simple equality check on the list of field members. */
9483
9484 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9485 return t;
9486
46cbda4a
MM
9487 /* Make sure that we always have the unqualified pointer-to-member
9488 type first. */
89d684bb 9489 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 9490 unqualified_variant
46cbda4a
MM
9491 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9492
33848bb0 9493 t = make_aggr_type (RECORD_TYPE);
2c73f9f5 9494 /* Let the front-end know this is a pointer to member function... */
db5ae43f 9495 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 9496 /* ... and not really an aggregate. */
7ddedda4 9497 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 9498
4977bab6
ZW
9499 field = build_decl (FIELD_DECL, pfn_identifier, type);
9500 fields = field;
9501
9502 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
9503 TREE_CHAIN (field) = fields;
9504 fields = field;
9505
9506 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8d08fdba 9507
8d08fdba
MS
9508 /* Zap out the name so that the back-end will give us the debugging
9509 information for this anonymous RECORD_TYPE. */
9510 TYPE_NAME (t) = NULL_TREE;
9511
46cbda4a
MM
9512 /* If this is not the unqualified form of this pointer-to-member
9513 type, set the TYPE_MAIN_VARIANT for this type to be the
9514 unqualified type. Since they are actually RECORD_TYPEs that are
9515 not variants of each other, we must do this manually. */
89d684bb 9516 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 9517 {
89d684bb 9518 t = build_qualified_type (t, cp_type_quals (type));
46cbda4a
MM
9519 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9520 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9521 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9522 }
9523
9524 /* Cache this pointer-to-member type so that we can find it again
9525 later. */
8d08fdba
MS
9526 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9527
e92cc029 9528 /* Seems to be wanted. */
8d08fdba 9529 CLASSTYPE_GOT_SEMICOLON (t) = 1;
46cbda4a 9530
8d08fdba
MS
9531 return t;
9532}
9533
9e259dd1
MM
9534/* Create and return a pointer to data member type. */
9535
9536tree
9537build_ptrmem_type (tree class_type, tree member_type)
9538{
9539 return build_pointer_type (build_offset_type (class_type, member_type));
9540}
9541
b17e2870
JM
9542/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9543 Check to see that the definition is valid. Issue appropriate error
9544 messages. Return 1 if the definition is particularly bad, or 0
9545 otherwise. */
9546
9547int
9548check_static_variable_definition (decl, type)
9549 tree decl;
9550 tree type;
9551{
9552 /* Motion 10 at San Diego: If a static const integral data member is
9553 initialized with an integral constant expression, the initializer
9554 may appear either in the declaration (within the class), or in
9555 the definition, but not both. If it appears in the class, the
9556 member is a member constant. The file-scope definition is always
9557 required. */
dcba9b0f 9558 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
b17e2870 9559 {
33bd39a2 9560 error ("invalid in-class initialization of static data member of non-integral type `%T'",
dcba9b0f 9561 type);
b17e2870
JM
9562 /* If we just return the declaration, crashes will sometimes
9563 occur. We therefore return void_type_node, as if this was a
9564 friend declaration, to cause callers to completely ignore
9565 this declaration. */
9566 return 1;
9567 }
9568 else if (!CP_TYPE_CONST_P (type))
33bd39a2 9569 error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
b17e2870
JM
9570 decl);
9571 else if (pedantic && !INTEGRAL_TYPE_P (type))
33bd39a2 9572 pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
b17e2870
JM
9573
9574 return 0;
9575}
9576
2848ad0f
MM
9577/* Given the SIZE (i.e., number of elements) in an array, compute an
9578 appropriate index type for the array. If non-NULL, NAME is the
9579 name of the thing being declared. */
9580
c95cd22e 9581tree
2848ad0f
MM
9582compute_array_index_type (name, size)
9583 tree name;
9584 tree size;
9585{
9586 tree itype;
9587
2848ad0f
MM
9588 /* If this involves a template parameter, it will be a constant at
9589 instantiation time, but we don't know what the value is yet.
9590 Even if no template parameters are involved, we may an expression
9591 that is not a constant; we don't even simplify `1 + 2' when
9592 processing a template. */
9593 if (processing_template_decl)
9594 {
9595 /* Resolve a qualified reference to an enumerator or static
9596 const data member of ours. */
9597 if (TREE_CODE (size) == SCOPE_REF
9598 && TREE_OPERAND (size, 0) == current_class_type)
9599 {
9600 tree t = lookup_field (current_class_type,
9601 TREE_OPERAND (size, 1), 0, 0);
9602 if (t)
9603 size = t;
9604 }
9605
9606 return build_index_type (build_min (MINUS_EXPR, sizetype,
9607 size, integer_one_node));
9608 }
9609
a1c65f9f 9610 /* The size might be the result of a cast. */
80f5bb34
MM
9611 STRIP_TYPE_NOPS (size);
9612
9613 /* It might be a const variable or enumeration constant. */
9614 size = decl_constant_value (size);
9615
2848ad0f
MM
9616 /* The array bound must be an integer type. */
9617 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9618 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9619 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9620 {
d67cdbc3 9621 if (name)
33bd39a2 9622 error ("size of array `%D' has non-integer type", name);
d67cdbc3 9623 else
33bd39a2 9624 error ("size of array has non-integer type");
2848ad0f
MM
9625 size = integer_one_node;
9626 }
9627
9628 /* Normally, the array-bound will be a constant. */
2bb5d995 9629 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
9630 {
9631 /* Check to see if the array bound overflowed. Make that an
9632 error, no matter how generous we're being. */
9633 int old_flag_pedantic_errors = flag_pedantic_errors;
9634 int old_pedantic = pedantic;
9635 pedantic = flag_pedantic_errors = 1;
9636 constant_expression_warning (size);
9637 pedantic = old_pedantic;
9638 flag_pedantic_errors = old_flag_pedantic_errors;
9639
9640 /* An array must have a positive number of elements. */
9641 if (INT_CST_LT (size, integer_zero_node))
9642 {
d67cdbc3 9643 if (name)
33bd39a2 9644 error ("size of array `%D' is negative", name);
d67cdbc3 9645 else
33bd39a2 9646 error ("size of array is negative");
2848ad0f
MM
9647 size = integer_one_node;
9648 }
9649 /* Except that an extension we allow zero-sized arrays. We
68642fb6 9650 always allow them in system headers because glibc uses
2848ad0f
MM
9651 them. */
9652 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
9653 {
9654 if (name)
33bd39a2 9655 pedwarn ("ISO C++ forbids zero-size array `%D'", name);
d67cdbc3 9656 else
33bd39a2 9657 pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 9658 }
2848ad0f 9659 }
2bb5d995
JM
9660 else if (TREE_CONSTANT (size))
9661 {
9662 /* `(int) &fn' is not a valid array bound. */
9663 if (name)
33bd39a2 9664 error ("size of array `%D' is not an integral constant-expression",
2bb5d995
JM
9665 name);
9666 else
33bd39a2 9667 error ("size of array is not an integral constant-expression");
2bb5d995 9668 }
2848ad0f
MM
9669
9670 /* Compute the index of the largest element in the array. It is
9671 one less than the number of elements in the array. */
9672 itype
ab76ca54
MM
9673 = fold (cp_build_binary_op (MINUS_EXPR,
9674 cp_convert (ssizetype, size),
9675 cp_convert (ssizetype,
9676 integer_one_node)));
68642fb6 9677
2848ad0f
MM
9678 /* Check for variable-sized arrays. We allow such things as an
9679 extension, even though they are not allowed in ANSI/ISO C++. */
9680 if (!TREE_CONSTANT (itype))
9681 {
9682 if (pedantic)
9683 {
9684 if (name)
33bd39a2 9685 pedwarn ("ISO C++ forbids variable-size array `%D'",
2848ad0f
MM
9686 name);
9687 else
33bd39a2 9688 pedwarn ("ISO C++ forbids variable-size array");
2848ad0f
MM
9689 }
9690
9691 /* Create a variable-sized array index type. */
9692 itype = variable_size (itype);
9693 }
9694 /* Make sure that there was no overflow when creating to a signed
9695 index type. (For example, on a 32-bit machine, an array with
9696 size 2^32 - 1 is too big.) */
9697 else if (TREE_OVERFLOW (itype))
9698 {
9699 error ("overflow in array dimension");
9700 TREE_OVERFLOW (itype) = 0;
9701 }
68642fb6 9702
2848ad0f
MM
9703 /* Create and return the appropriate index type. */
9704 return build_index_type (itype);
9705}
9706
a723baf1
MM
9707/* Returns the scope (if any) in which the entity declared by
9708 DECLARATOR will be located. If the entity was declared with an
9709 unqualified name, NULL_TREE is returned. */
9710
9711tree
9712get_scope_of_declarator (declarator)
9713 tree declarator;
9714{
9715 if (!declarator)
9716 return NULL_TREE;
9717
9718 switch (TREE_CODE (declarator))
9719 {
9720 case CALL_EXPR:
9721 case ARRAY_REF:
9722 case INDIRECT_REF:
9723 case ADDR_EXPR:
9724 /* For any of these, the main declarator is the first operand. */
9725 return get_scope_of_declarator (TREE_OPERAND
9726 (declarator, 0));
9727
9728 case SCOPE_REF:
9729 /* For a pointer-to-member, continue descending. */
9730 if (TREE_CODE (TREE_OPERAND (declarator, 1))
9731 == INDIRECT_REF)
9732 return get_scope_of_declarator (TREE_OPERAND
9733 (declarator, 1));
9734 /* Otherwise, if the declarator-id is a SCOPE_REF, the scope in
9735 which the declaration occurs is the first operand. */
9736 return TREE_OPERAND (declarator, 0);
9737
9738 case TREE_LIST:
9739 /* Attributes to be applied. The declarator is TREE_VALUE. */
9740 return get_scope_of_declarator (TREE_VALUE (declarator));
9741
9742 default:
9743 /* Otherwise, we have a declarator-id which is not a qualified
9744 name; the entity will be declared in the current scope. */
9745 return NULL_TREE;
9746 }
9747}
9748
2848ad0f
MM
9749/* Returns an ARRAY_TYPE for an array with SIZE elements of the
9750 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9751 with this type. */
9752
9753static tree
9754create_array_type_for_decl (name, type, size)
9755 tree name;
9756 tree type;
9757 tree size;
9758{
9759 tree itype = NULL_TREE;
9760 const char* error_msg;
9761
9762 /* If things have already gone awry, bail now. */
9763 if (type == error_mark_node || size == error_mark_node)
9764 return error_mark_node;
9765
9766 /* Assume that everything will go OK. */
9767 error_msg = NULL;
9768
9769 /* There are some types which cannot be array elements. */
9770 switch (TREE_CODE (type))
9771 {
9772 case VOID_TYPE:
9773 error_msg = "array of void";
9774 break;
9775
9776 case FUNCTION_TYPE:
9777 error_msg = "array of functions";
9778 break;
9779
9780 case REFERENCE_TYPE:
9781 error_msg = "array of references";
9782 break;
9783
9784 case OFFSET_TYPE:
9785 error_msg = "array of data members";
9786 break;
9787
9788 case METHOD_TYPE:
9789 error_msg = "array of function members";
9790 break;
9791
9792 default:
9793 break;
9794 }
9795
9796 /* If something went wrong, issue an error-message and return. */
9797 if (error_msg)
9798 {
9799 if (name)
33bd39a2 9800 error ("declaration of `%D' as %s", name, error_msg);
2848ad0f 9801 else
33bd39a2 9802 error ("creating %s", error_msg);
2848ad0f
MM
9803
9804 return error_mark_node;
9805 }
9806
9807 /* [dcl.array]
68642fb6 9808
2848ad0f
MM
9809 The constant expressions that specify the bounds of the arrays
9810 can be omitted only for the first member of the sequence. */
9811 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9812 {
b3faacfd 9813 if (name)
33bd39a2 9814 error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
b3faacfd
KL
9815 name);
9816 else
33bd39a2 9817 error ("multidimensional array must have bounds for all dimensions except the first");
2848ad0f
MM
9818
9819 return error_mark_node;
9820 }
9821
9822 /* Figure out the index type for the array. */
9823 if (size)
9824 itype = compute_array_index_type (name, size);
9825
9826 return build_cplus_array_type (type, itype);
9827}
9828
3dbc07b6
MM
9829/* Check that it's OK to declare a function with the indicated TYPE.
9830 SFK indicates the kind of special function (if any) that this
1f84ec23 9831 function is. OPTYPE is the type given in a conversion operator
3dbc07b6
MM
9832 declaration. Returns the actual return type of the function; that
9833 may be different than TYPE if an error occurs, or for certain
9834 special functions. */
9835
9836static tree
1f84ec23 9837check_special_function_return_type (sfk, type, optype)
3dbc07b6
MM
9838 special_function_kind sfk;
9839 tree type;
3dbc07b6
MM
9840 tree optype;
9841{
9842 switch (sfk)
9843 {
9844 case sfk_constructor:
9845 if (type)
33bd39a2 9846 error ("return type specification for constructor invalid");
5362b086 9847
1f84ec23 9848 type = void_type_node;
3dbc07b6
MM
9849 break;
9850
9851 case sfk_destructor:
9852 if (type)
33bd39a2 9853 error ("return type specification for destructor invalid");
3dbc07b6
MM
9854 type = void_type_node;
9855 break;
9856
9857 case sfk_conversion:
9858 if (type && !same_type_p (type, optype))
33bd39a2 9859 error ("operator `%T' declared to return `%T'", optype, type);
3dbc07b6 9860 else if (type)
33bd39a2 9861 pedwarn ("return type specified for `operator %T'", optype);
3dbc07b6
MM
9862 type = optype;
9863 break;
9864
9865 default:
a98facb0 9866 abort ();
3dbc07b6
MM
9867 break;
9868 }
9869
9870 return type;
9871}
9872
a723baf1
MM
9873/* Given declspecs and a declarator (abstract or otherwise), determine
9874 the name and type of the object declared and construct a DECL node
9875 for it.
8d08fdba
MS
9876
9877 DECLSPECS is a chain of tree_list nodes whose value fields
9878 are the storage classes and type specifiers.
9879
9880 DECL_CONTEXT says which syntactic context this declaration is in:
9881 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9882 FUNCDEF for a function definition. Like NORMAL but a few different
9883 error messages in each case. Return value may be zero meaning
9884 this definition is too screwy to try to parse.
9885 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9886 handle member functions (which have FIELD context).
9887 Return value may be zero meaning this definition is too screwy to
9888 try to parse.
9889 PARM for a parameter declaration (either within a function prototype
9890 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 9891 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
9892 TYPENAME if for a typename (in a cast or sizeof).
9893 Don't make a DECL node; just return the ..._TYPE node.
9894 FIELD for a struct or union field; make a FIELD_DECL.
9895 BITFIELD for a field with specified width.
9896 INITIALIZED is 1 if the decl has an initializer.
9897
91d231cb
JM
9898 ATTRLIST is a pointer to the list of attributes, which may be NULL
9899 if there are none; *ATTRLIST may be modified if attributes from inside
9900 the declarator should be applied to the declaration.
b17e2870 9901
a723baf1
MM
9902 When this function is called, scoping variables (such as
9903 CURRENT_CLASS_TYPE) should reflect the scope in which the
9904 declaration occurs, not the scope in which the new declaration will
9905 be placed. For example, on:
8d08fdba 9906
a723baf1 9907 void S::f() { ... }
8d08fdba 9908
a723baf1
MM
9909 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9910 should not be `S'. */
8d08fdba 9911
8d08fdba 9912tree
c11b6f21 9913grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8d08fdba
MS
9914 tree declspecs;
9915 tree declarator;
9916 enum decl_context decl_context;
9917 int initialized;
91d231cb 9918 tree *attrlist;
8d08fdba
MS
9919{
9920 RID_BIT_TYPE specbits;
9921 int nclasses = 0;
9922 tree spec;
9923 tree type = NULL_TREE;
9924 int longlong = 0;
91063b51 9925 int type_quals;
db5ae43f 9926 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
9927 int explicit_int = 0;
9928 int explicit_char = 0;
37c46b43 9929 int defaulted_int = 0;
270d8c65 9930 int extern_langp = 0;
d5614afb 9931 tree dependant_name = NULL_TREE;
270d8c65 9932
8d08fdba 9933 tree typedef_decl = NULL_TREE;
9c0758dd 9934 const char *name;
8d08fdba
MS
9935 tree typedef_type = NULL_TREE;
9936 int funcdef_flag = 0;
9937 enum tree_code innermost_code = ERROR_MARK;
9938 int bitfield = 0;
6125f3be
DE
9939#if 0
9940 /* See the code below that used this. */
91d231cb 9941 tree decl_attr = NULL_TREE;
6125f3be 9942#endif
8d08fdba
MS
9943 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9944 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9945 tree init = NULL_TREE;
9946
9947 /* Keep track of what sort of function is being processed
9948 so that we can warn about default return values, or explicit
9949 return values which do not match prescribed defaults. */
3dbc07b6 9950 special_function_kind sfk = sfk_none;
8d08fdba
MS
9951
9952 tree dname = NULL_TREE;
9953 tree ctype = current_class_type;
9954 tree ctor_return_type = NULL_TREE;
9955 enum overload_flags flags = NO_SPECIAL;
8d08fdba 9956 tree quals = NULL_TREE;
c11b6f21 9957 tree raises = NULL_TREE;
386b8a85 9958 int template_count = 0;
2c73f9f5 9959 tree in_namespace = NULL_TREE;
91d231cb 9960 tree returned_attrs = NULL_TREE;
a723baf1 9961 tree scope = NULL_TREE;
8d08fdba
MS
9962
9963 RIDBIT_RESET_ALL (specbits);
9964 if (decl_context == FUNCDEF)
9965 funcdef_flag = 1, decl_context = NORMAL;
9966 else if (decl_context == MEMFUNCDEF)
9967 funcdef_flag = -1, decl_context = FIELD;
9968 else if (decl_context == BITFIELD)
9969 bitfield = 1, decl_context = FIELD;
9970
8d08fdba
MS
9971 /* Look inside a declarator for the name being declared
9972 and get it as a string, for an error message. */
9973 {
be99da77
MS
9974 tree *next = &declarator;
9975 register tree decl;
8d08fdba
MS
9976 name = NULL;
9977
be99da77
MS
9978 while (next && *next)
9979 {
9980 decl = *next;
9981 switch (TREE_CODE (decl))
8d08fdba 9982 {
52fbc847
JM
9983 case TREE_LIST:
9984 /* For attributes. */
9985 next = &TREE_VALUE (decl);
9986 break;
9987
be99da77
MS
9988 case COND_EXPR:
9989 ctype = NULL_TREE;
9990 next = &TREE_OPERAND (decl, 0);
9991 break;
8d08fdba 9992
2c73f9f5 9993 case BIT_NOT_EXPR: /* For C++ destructors! */
8d08fdba 9994 {
be99da77
MS
9995 tree name = TREE_OPERAND (decl, 0);
9996 tree rename = NULL_TREE;
9997
9998 my_friendly_assert (flags == NO_SPECIAL, 152);
9999 flags = DTOR_FLAG;
3dbc07b6 10000 sfk = sfk_destructor;
a723baf1 10001 if (TYPE_P (name))
5566b478 10002 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
10003 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
10004 if (ctype == NULL_TREE)
10005 {
10006 if (current_class_type == NULL_TREE)
10007 {
8251199e 10008 error ("destructors must be member functions");
be99da77
MS
10009 flags = NO_SPECIAL;
10010 }
10011 else
10012 {
a723baf1 10013 tree t = constructor_name (current_class_type);
be99da77
MS
10014 if (t != name)
10015 rename = t;
10016 }
10017 }
8d08fdba 10018 else
be99da77
MS
10019 {
10020 tree t = constructor_name (ctype);
10021 if (t != name)
10022 rename = t;
10023 }
51c184be 10024
be99da77 10025 if (rename)
39211cd5 10026 {
33bd39a2 10027 error ("destructor `%T' must match class name `%T'",
5566b478 10028 name, rename);
be99da77 10029 TREE_OPERAND (decl, 0) = rename;
39211cd5 10030 }
be99da77 10031 next = &name;
51c184be 10032 }
be99da77 10033 break;
8d08fdba 10034
be99da77 10035 case ADDR_EXPR: /* C++ reference declaration */
a1c65f9f 10036 /* Fall through. */
be99da77
MS
10037 case ARRAY_REF:
10038 case INDIRECT_REF:
10039 ctype = NULL_TREE;
10040 innermost_code = TREE_CODE (decl);
10041 next = &TREE_OPERAND (decl, 0);
10042 break;
8d08fdba 10043
be99da77 10044 case CALL_EXPR:
43f887f9 10045 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8d08fdba 10046 {
b17e2870
JM
10047 /* This is actually a variable declaration using
10048 constructor syntax. We need to call start_decl and
10049 cp_finish_decl so we can get the variable
10050 initialized... */
10051
91d231cb 10052 tree attributes;
be99da77 10053
9e259dd1
MM
10054 if (decl_context != NORMAL)
10055 {
10056 error ("variable declaration is not allowed here");
10057 return error_mark_node;
10058 }
10059
be99da77 10060 *next = TREE_OPERAND (decl, 0);
43f887f9 10061 init = CALL_DECLARATOR_PARMS (decl);
be99da77 10062
b17e2870
JM
10063 if (attrlist)
10064 {
91d231cb 10065 attributes = *attrlist;
b17e2870
JM
10066 }
10067 else
10068 {
10069 attributes = NULL_TREE;
b17e2870
JM
10070 }
10071
10072 decl = start_decl (declarator, declspecs, 1,
91d231cb 10073 attributes, NULL_TREE);
9fc336c7 10074 decl_type_access_control (decl);
1eb0072d
JM
10075 if (decl)
10076 {
10077 /* Look for __unused__ attribute */
10078 if (TREE_USED (TREE_TYPE (decl)))
10079 TREE_USED (decl) = 1;
10080 finish_decl (decl, init, NULL_TREE);
10081 }
10082 else
33bd39a2 10083 error ("invalid declarator");
9e259dd1 10084 return NULL_TREE;
8d08fdba 10085 }
be99da77
MS
10086 innermost_code = TREE_CODE (decl);
10087 if (decl_context == FIELD && ctype == NULL_TREE)
10088 ctype = current_class_type;
45537677 10089 if (ctype
c11b6f21 10090 && TREE_OPERAND (decl, 0)
45537677 10091 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
8ba658ee
MM
10092 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 0)),
10093 ctype)))
be99da77
MS
10094 TREE_OPERAND (decl, 0) = constructor_name (ctype);
10095 next = &TREE_OPERAND (decl, 0);
10096 decl = *next;
10097 if (ctype != NULL_TREE
10098 && decl != NULL_TREE && flags != DTOR_FLAG
a723baf1 10099 && constructor_name_p (decl, ctype))
8d08fdba 10100 {
3dbc07b6 10101 sfk = sfk_constructor;
be99da77 10102 ctor_return_type = ctype;
8d08fdba 10103 }
be99da77
MS
10104 ctype = NULL_TREE;
10105 break;
68642fb6 10106
386b8a85
JM
10107 case TEMPLATE_ID_EXPR:
10108 {
10109 tree fns = TREE_OPERAND (decl, 0);
10110
10111 if (TREE_CODE (fns) == LOOKUP_EXPR)
10112 fns = TREE_OPERAND (fns, 0);
10113
8f032717
MM
10114 dname = fns;
10115 if (TREE_CODE (dname) == COMPONENT_REF)
10116 dname = TREE_OPERAND (dname, 1);
10117 if (TREE_CODE (dname) != IDENTIFIER_NODE)
10118 {
10119 my_friendly_assert (is_overloaded_fn (dname),
10120 19990331);
10121 dname = DECL_NAME (get_first_fn (dname));
10122 }
386b8a85 10123 }
a1c65f9f 10124 /* Fall through. */
be99da77
MS
10125
10126 case IDENTIFIER_NODE:
386b8a85
JM
10127 if (TREE_CODE (decl) == IDENTIFIER_NODE)
10128 dname = decl;
10129
be99da77
MS
10130 next = 0;
10131
0e5921e8 10132 if (C_IS_RESERVED_WORD (dname))
8d08fdba 10133 {
33bd39a2 10134 error ("declarator-id missing; using reserved word `%D'",
be99da77
MS
10135 dname);
10136 name = IDENTIFIER_POINTER (dname);
8d08fdba 10137 }
596ea4e5 10138 else if (!IDENTIFIER_TYPENAME_P (dname))
be99da77 10139 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
10140 else
10141 {
596ea4e5
AS
10142 my_friendly_assert (flags == NO_SPECIAL, 154);
10143 flags = TYPENAME_FLAG;
10144 ctor_return_type = TREE_TYPE (dname);
10145 sfk = sfk_conversion;
10146 if (IDENTIFIER_GLOBAL_VALUE (dname)
5362b086 10147 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (dname))
596ea4e5
AS
10148 == TYPE_DECL))
10149 name = IDENTIFIER_POINTER (dname);
10150 else
10151 name = "<invalid operator>";
8d08fdba 10152 }
be99da77 10153 break;
8d08fdba 10154
be99da77
MS
10155 /* C++ extension */
10156 case SCOPE_REF:
10157 {
10158 /* Perform error checking, and decide on a ctype. */
10159 tree cname = TREE_OPERAND (decl, 0);
10160 if (cname == NULL_TREE)
10161 ctype = NULL_TREE;
2c73f9f5
ML
10162 else if (TREE_CODE (cname) == NAMESPACE_DECL)
10163 {
10164 ctype = NULL_TREE;
10165 in_namespace = TREE_OPERAND (decl, 0);
2c73f9f5 10166 }
be99da77 10167 else if (! is_aggr_type (cname, 1))
a723baf1 10168 ctype = NULL_TREE;
be99da77
MS
10169 /* Must test TREE_OPERAND (decl, 1), in case user gives
10170 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
10171 else if (TREE_OPERAND (decl, 1)
10172 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
10173 ctype = cname;
73b0fce8 10174 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
a1281f45 10175 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
5566b478 10176 {
d5614afb
NS
10177 /* This might be declaring a member of a template
10178 parm to be a friend. */
10179 ctype = cname;
10180 dependant_name = TREE_OPERAND (decl, 1);
5566b478 10181 }
be99da77
MS
10182 else if (ctype == NULL_TREE)
10183 ctype = cname;
10184 else if (TREE_COMPLEXITY (decl) == current_class_depth)
a723baf1 10185 ;
be99da77
MS
10186 else
10187 {
10188 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
10189 {
33bd39a2 10190 error ("type `%T' is not derived from type `%T'",
be99da77 10191 cname, ctype);
a723baf1 10192 ctype = NULL_TREE;
be99da77
MS
10193 }
10194 else
10195 ctype = cname;
10196 }
10197
a723baf1
MM
10198 /* It is valid to write:
10199
10200 class C { void f(); };
10201 typedef C D;
10202 void D::f();
10203
10204 The standard is not clear about whether `typedef const C D' is
10205 legal; as of 2002-09-15 the committee is considering
10206 that question. EDG 3.0 allows that syntax.
10207 Therefore, we do as well. */
10208 if (ctype)
10209 ctype = TYPE_MAIN_VARIANT (ctype);
10210 /* Update the declarator so that when we process it
10211 again the correct type is present. */
10212 TREE_OPERAND (decl, 0) = ctype;
10213
c91a56d2 10214 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
8ba658ee
MM
10215 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 1)),
10216 ctype))
be99da77
MS
10217 TREE_OPERAND (decl, 1) = constructor_name (ctype);
10218 next = &TREE_OPERAND (decl, 1);
10219 decl = *next;
10220 if (ctype)
10221 {
10222 if (TREE_CODE (decl) == IDENTIFIER_NODE
a723baf1 10223 && constructor_name_p (decl, ctype))
be99da77 10224 {
3dbc07b6 10225 sfk = sfk_constructor;
be99da77
MS
10226 ctor_return_type = ctype;
10227 }
10228 else if (TREE_CODE (decl) == BIT_NOT_EXPR
10229 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
8ba658ee
MM
10230 && constructor_name_p (TREE_OPERAND (decl, 0),
10231 ctype))
be99da77 10232 {
3dbc07b6 10233 sfk = sfk_destructor;
be99da77
MS
10234 ctor_return_type = ctype;
10235 flags = DTOR_FLAG;
10236 TREE_OPERAND (decl, 0) = constructor_name (ctype);
10237 next = &TREE_OPERAND (decl, 0);
10238 }
10239 }
10240 }
10241 break;
10242
10243 case ERROR_MARK:
10244 next = 0;
10245 break;
10246
45537677
MS
10247 case TYPE_DECL:
10248 /* Parse error puts this typespec where
10249 a declarator should go. */
33bd39a2 10250 error ("`%T' specified as declarator-id", DECL_NAME (decl));
45537677 10251 if (TREE_TYPE (decl) == current_class_type)
33bd39a2 10252 error (" perhaps you want `%T' for a constructor",
45537677
MS
10253 current_class_name);
10254 dname = DECL_NAME (decl);
10255 name = IDENTIFIER_POINTER (dname);
10256
e92cc029 10257 /* Avoid giving two errors for this. */
45537677
MS
10258 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
10259
58010b57 10260 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
45537677
MS
10261 *next = dname;
10262 next = 0;
10263 break;
10264
50ad9642
MM
10265 case BASELINK:
10266 next = &BASELINK_FUNCTIONS (decl);
10267 break;
2ee366b5
GDR
10268
10269 case TEMPLATE_DECL:
10270 /* Sometimes, we see a template-name used as part of a
10271 decl-specifier like in
10272 std::allocator alloc;
10273 Handle that gracefully. */
10274 error ("invalid use of template-name '%E' in a declarator", decl);
10275 return error_mark_node;
10276 break;
50ad9642 10277
be99da77 10278 default:
dd29188b 10279 my_friendly_assert (0, 20020917);
8d08fdba 10280 }
be99da77 10281 }
8d08fdba
MS
10282 }
10283
10284 /* A function definition's declarator must have the form of
10285 a function declarator. */
10286
10287 if (funcdef_flag && innermost_code != CALL_EXPR)
10288 return 0;
10289
e1cd6e56
MS
10290 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
10291 && innermost_code != CALL_EXPR
10292 && ! (ctype && declspecs == NULL_TREE))
10293 {
33bd39a2 10294 error ("declaration of `%D' as non-function", dname);
e1cd6e56
MS
10295 return void_type_node;
10296 }
10297
8d08fdba
MS
10298 /* Anything declared one level down from the top level
10299 must be one of the parameters of a function
10300 (because the body is at least two levels down). */
10301
10302 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10303 by not allowing C++ class definitions to specify their parameters
10304 with xdecls (must be spec.d in the parmlist).
10305
10306 Since we now wait to push a class scope until we are sure that
10307 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
10308 explicitly (since current_class_name is not yet alive).
10309
10310 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 10311
9188c363 10312 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2 10313 {
e2500fed 10314 struct cp_binding_level *b = current_binding_level;
a9aedbc2
MS
10315 current_binding_level = b->level_chain;
10316 if (current_binding_level != 0 && toplevel_bindings_p ())
10317 decl_context = PARM;
10318 current_binding_level = b;
10319 }
8d08fdba 10320
34fc957d
NS
10321 if (name == NULL)
10322 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 10323
8d08fdba
MS
10324 /* Look through the decl specs and record which ones appear.
10325 Some typespecs are defined as built-in typenames.
10326 Others, the ones that are modifiers of other types,
10327 are represented by bits in SPECBITS: set the bits for
10328 the modifiers that appear. Storage class keywords are also in SPECBITS.
10329
10330 If there is a typedef name or a type, store the type in TYPE.
10331 This includes builtin typedefs such as `int'.
10332
10333 Set EXPLICIT_INT if the type is `int' or `char' and did not
10334 come from a user typedef.
10335
10336 Set LONGLONG if `long' is mentioned twice.
10337
10338 For C++, constructors and destructors have their own fast treatment. */
10339
10340 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
10341 {
10342 register int i;
10343 register tree id;
10344
10345 /* Certain parse errors slip through. For example,
10346 `int class;' is not caught by the parser. Try
10347 weakly to recover here. */
10348 if (TREE_CODE (spec) != TREE_LIST)
10349 return 0;
10350
10351 id = TREE_VALUE (spec);
10352
e23bd218
IR
10353 /* If the entire declaration is itself tagged as deprecated then
10354 suppress reports of deprecated items. */
10355 if (!adding_implicit_members && id && TREE_DEPRECATED (id))
10356 {
10357 if (deprecated_state != DEPRECATED_SUPPRESS)
10358 warn_deprecated_use (id);
10359 }
10360
8d08fdba
MS
10361 if (TREE_CODE (id) == IDENTIFIER_NODE)
10362 {
a3203465
MS
10363 if (id == ridpointers[(int) RID_INT]
10364 || id == ridpointers[(int) RID_CHAR]
10365 || id == ridpointers[(int) RID_BOOL]
10366 || id == ridpointers[(int) RID_WCHAR])
8d08fdba
MS
10367 {
10368 if (type)
8ccc31eb
MS
10369 {
10370 if (id == ridpointers[(int) RID_BOOL])
8251199e 10371 error ("`bool' is now a keyword");
8ccc31eb 10372 else
33bd39a2 10373 error ("extraneous `%T' ignored", id);
8ccc31eb 10374 }
8d08fdba
MS
10375 else
10376 {
a3203465
MS
10377 if (id == ridpointers[(int) RID_INT])
10378 explicit_int = 1;
10379 else if (id == ridpointers[(int) RID_CHAR])
10380 explicit_char = 1;
8d08fdba
MS
10381 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
10382 }
10383 goto found;
10384 }
e92cc029 10385 /* C++ aggregate types. */
8d08fdba
MS
10386 if (IDENTIFIER_HAS_TYPE_VALUE (id))
10387 {
10388 if (type)
33bd39a2 10389 error ("multiple declarations `%T' and `%T'", type, id);
8d08fdba
MS
10390 else
10391 type = IDENTIFIER_TYPE_VALUE (id);
10392 goto found;
10393 }
10394
f376e137 10395 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
10396 {
10397 if (ridpointers[i] == id)
10398 {
10399 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
10400 {
795add94 10401 if (pedantic && ! in_system_header && warn_long_long)
cb9a3ff8 10402 pedwarn ("ISO C++ does not support `long long'");
9a3b49ac 10403 if (longlong)
8251199e 10404 error ("`long long long' is too long for GCC");
8d08fdba
MS
10405 else
10406 longlong = 1;
10407 }
10408 else if (RIDBIT_SETP (i, specbits))
8251199e 10409 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
7a1f3f5f 10410
946d5e45
MM
10411 /* Diagnose "__thread extern" or "__thread static". */
10412 if (RIDBIT_SETP (RID_THREAD, specbits))
7a1f3f5f 10413 {
946d5e45 10414 if (i == (int)RID_EXTERN)
7a1f3f5f 10415 error ("`__thread' before `extern'");
946d5e45 10416 else if (i == (int)RID_STATIC)
7a1f3f5f
RH
10417 error ("`__thread' before `static'");
10418 }
10419
270d8c65
NS
10420 if (i == (int)RID_EXTERN
10421 && TREE_PURPOSE (spec) == error_mark_node)
10422 /* This extern was part of a language linkage. */
10423 extern_langp = 1;
7a1f3f5f 10424
8d08fdba
MS
10425 RIDBIT_SET (i, specbits);
10426 goto found;
10427 }
10428 }
10429 }
1899c3a4 10430 else if (TREE_CODE (id) == TYPE_DECL)
45537677
MS
10431 {
10432 if (type)
33bd39a2 10433 error ("multiple declarations `%T' and `%T'", type,
45537677
MS
10434 TREE_TYPE (id));
10435 else
5566b478
MS
10436 {
10437 type = TREE_TYPE (id);
10438 TREE_VALUE (spec) = type;
8d6e459d 10439 typedef_decl = id;
5566b478 10440 }
45537677
MS
10441 goto found;
10442 }
8d08fdba 10443 if (type)
8251199e 10444 error ("two or more data types in declaration of `%s'", name);
8d08fdba
MS
10445 else if (TREE_CODE (id) == IDENTIFIER_NODE)
10446 {
10447 register tree t = lookup_name (id, 1);
10448 if (!t || TREE_CODE (t) != TYPE_DECL)
8251199e 10449 error ("`%s' fails to be a typedef or built in type",
8d08fdba
MS
10450 IDENTIFIER_POINTER (id));
10451 else
10452 {
10453 type = TREE_TYPE (t);
10454 typedef_decl = t;
10455 }
10456 }
bd6dd845 10457 else if (id != error_mark_node)
8d08fdba
MS
10458 /* Can't change CLASS nodes into RECORD nodes here! */
10459 type = id;
10460
10461 found: ;
10462 }
10463
8d6e459d
NS
10464#if 0
10465 /* See the code below that used this. */
10466 if (typedef_decl)
10467 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10468#endif
8d08fdba
MS
10469 typedef_type = type;
10470
37c46b43 10471 /* No type at all: default to `int', and set DEFAULTED_INT
6eabb241 10472 because it was not a user-defined typedef. */
8d08fdba 10473
a3203465
MS
10474 if (type == NULL_TREE
10475 && (RIDBIT_SETP (RID_SIGNED, specbits)
10476 || RIDBIT_SETP (RID_UNSIGNED, specbits)
10477 || RIDBIT_SETP (RID_LONG, specbits)
10478 || RIDBIT_SETP (RID_SHORT, specbits)))
10479 {
10480 /* These imply 'int'. */
10481 type = integer_type_node;
37c46b43 10482 defaulted_int = 1;
a3203465
MS
10483 }
10484
3dbc07b6
MM
10485 if (sfk != sfk_none)
10486 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
10487 ctor_return_type);
10488 else if (type == NULL_TREE)
8d08fdba 10489 {
3dbc07b6
MM
10490 int is_main;
10491
8d08fdba 10492 explicit_int = -1;
3dbc07b6 10493
0fd0b7ee
JM
10494 /* We handle `main' specially here, because 'main () { }' is so
10495 common. With no options, it is allowed. With -Wreturn-type,
10496 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6 10497 is_main = (funcdef_flag
7437519c 10498 && dname && MAIN_NAME_P (dname)
3dbc07b6
MM
10499 && ctype == NULL_TREE
10500 && in_namespace == NULL_TREE
10501 && current_namespace == global_namespace);
10502
10503 if (in_system_header || flag_ms_extensions)
10504 /* Allow it, sigh. */;
10505 else if (pedantic || ! is_main)
33bd39a2 10506 pedwarn ("ISO C++ forbids declaration of `%s' with no type",
3dbc07b6
MM
10507 name);
10508 else if (warn_return_type)
33bd39a2 10509 warning ("ISO C++ forbids declaration of `%s' with no type",
3dbc07b6 10510 name);
41eff652 10511
3dbc07b6 10512 type = integer_type_node;
51c184be 10513 }
ad1a6d45 10514
8d6e459d 10515 if (type && IMPLICIT_TYPENAME_P (type))
ad1a6d45
NS
10516 {
10517 /* The implicit typename extension is deprecated and will be
10518 removed. Warn about its use now. */
33bd39a2 10519 warning ("`%T' is implicitly a typename", type);
ad1a6d45
NS
10520 cp_deprecated ("implicit typename");
10521
10522 /* Now remove its implicitness, so that we don't warn again.
10523 For instance this might be a typedef, and we do not want to
10524 warn on uses of the typedef itself. Simply clearing the
10525 TREE_TYPE is insufficient. */
10526 type = copy_node (type);
10527 TREE_TYPE (type) = NULL_TREE;
10528 }
8d08fdba
MS
10529
10530 ctype = NULL_TREE;
10531
10532 /* Now process the modifiers that were specified
10533 and check for invalid combinations. */
10534
10535 /* Long double is a special combination. */
10536
10537 if (RIDBIT_SETP (RID_LONG, specbits)
10538 && TYPE_MAIN_VARIANT (type) == double_type_node)
10539 {
10540 RIDBIT_RESET (RID_LONG, specbits);
68642fb6 10541 type = build_qualified_type (long_double_type_node,
89d684bb 10542 cp_type_quals (type));
8d08fdba
MS
10543 }
10544
10545 /* Check all other uses of type modifiers. */
10546
10547 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10548 || RIDBIT_SETP (RID_SIGNED, specbits)
10549 || RIDBIT_SETP (RID_LONG, specbits)
10550 || RIDBIT_SETP (RID_SHORT, specbits))
10551 {
10552 int ok = 0;
10553
10554 if (TREE_CODE (type) == REAL_TYPE)
8251199e 10555 error ("short, signed or unsigned invalid for `%s'", name);
b7484fbe 10556 else if (TREE_CODE (type) != INTEGER_TYPE)
8251199e 10557 error ("long, short, signed or unsigned invalid for `%s'", name);
8d08fdba
MS
10558 else if (RIDBIT_SETP (RID_LONG, specbits)
10559 && RIDBIT_SETP (RID_SHORT, specbits))
8251199e 10560 error ("long and short specified together for `%s'", name);
8d08fdba
MS
10561 else if ((RIDBIT_SETP (RID_LONG, specbits)
10562 || RIDBIT_SETP (RID_SHORT, specbits))
10563 && explicit_char)
8251199e 10564 error ("long or short specified with char for `%s'", name);
8d08fdba
MS
10565 else if ((RIDBIT_SETP (RID_LONG, specbits)
10566 || RIDBIT_SETP (RID_SHORT, specbits))
10567 && TREE_CODE (type) == REAL_TYPE)
8251199e 10568 error ("long or short specified with floating type for `%s'", name);
8d08fdba
MS
10569 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10570 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8251199e 10571 error ("signed and unsigned given together for `%s'", name);
8d08fdba
MS
10572 else
10573 {
10574 ok = 1;
37c46b43 10575 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 10576 {
8251199e 10577 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8d08fdba
MS
10578 name);
10579 if (flag_pedantic_errors)
10580 ok = 0;
10581 }
10582 }
10583
10584 /* Discard the type modifiers if they are invalid. */
10585 if (! ok)
10586 {
10587 RIDBIT_RESET (RID_UNSIGNED, specbits);
10588 RIDBIT_RESET (RID_SIGNED, specbits);
10589 RIDBIT_RESET (RID_LONG, specbits);
10590 RIDBIT_RESET (RID_SHORT, specbits);
10591 longlong = 0;
10592 }
10593 }
10594
37c46b43
MS
10595 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10596 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10597 {
8251199e 10598 error ("complex invalid for `%s'", name);
37c46b43
MS
10599 RIDBIT_RESET (RID_COMPLEX, specbits);
10600 }
10601
8d08fdba
MS
10602 /* Decide whether an integer type is signed or not.
10603 Optionally treat bitfields as signed by default. */
10604 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
b89c5a7b
MM
10605 /* [class.bit]
10606
10607 It is implementation-defined whether a plain (neither
10608 explicitly signed or unsigned) char, short, int, or long
10609 bit-field is signed or unsigned.
68642fb6 10610
b89c5a7b
MM
10611 Naturally, we extend this to long long as well. Note that
10612 this does not include wchar_t. */
10613 || (bitfield && !flag_signed_bitfields
10614 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10615 /* A typedef for plain `int' without `signed' can be
10616 controlled just like plain `int', but a typedef for
10617 `signed int' cannot be so controlled. */
68642fb6 10618 && !(typedef_decl
29bbeb1c 10619 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b89c5a7b
MM
10620 && (TREE_CODE (type) == INTEGER_TYPE
10621 || TREE_CODE (type) == CHAR_TYPE)
29bbeb1c 10622 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
10623 {
10624 if (longlong)
10625 type = long_long_unsigned_type_node;
10626 else if (RIDBIT_SETP (RID_LONG, specbits))
10627 type = long_unsigned_type_node;
10628 else if (RIDBIT_SETP (RID_SHORT, specbits))
10629 type = short_unsigned_type_node;
10630 else if (type == char_type_node)
10631 type = unsigned_char_type_node;
10632 else if (typedef_decl)
ceef8ce4 10633 type = c_common_unsigned_type (type);
8d08fdba
MS
10634 else
10635 type = unsigned_type_node;
10636 }
10637 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10638 && type == char_type_node)
10639 type = signed_char_type_node;
10640 else if (longlong)
10641 type = long_long_integer_type_node;
10642 else if (RIDBIT_SETP (RID_LONG, specbits))
10643 type = long_integer_type_node;
10644 else if (RIDBIT_SETP (RID_SHORT, specbits))
10645 type = short_integer_type_node;
10646
37c46b43
MS
10647 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10648 {
10649 /* If we just have "complex", it is equivalent to
10650 "complex double", but if any modifiers at all are specified it is
10651 the complex form of TYPE. E.g, "complex short" is
10652 "complex short int". */
10653
10654 if (defaulted_int && ! longlong
10655 && ! (RIDBIT_SETP (RID_LONG, specbits)
10656 || RIDBIT_SETP (RID_SHORT, specbits)
10657 || RIDBIT_SETP (RID_SIGNED, specbits)
10658 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10659 type = complex_double_type_node;
10660 else if (type == integer_type_node)
10661 type = complex_integer_type_node;
10662 else if (type == float_type_node)
10663 type = complex_float_type_node;
10664 else if (type == double_type_node)
10665 type = complex_double_type_node;
10666 else if (type == long_double_type_node)
10667 type = complex_long_double_type_node;
10668 else
10669 type = build_complex_type (type);
10670 }
10671
4f2b0fb2
NS
10672 type_quals = TYPE_UNQUALIFIED;
10673 if (RIDBIT_SETP (RID_CONST, specbits))
10674 type_quals |= TYPE_QUAL_CONST;
10675 if (RIDBIT_SETP (RID_VOLATILE, specbits))
10676 type_quals |= TYPE_QUAL_VOLATILE;
10677 if (RIDBIT_SETP (RID_RESTRICT, specbits))
10678 type_quals |= TYPE_QUAL_RESTRICT;
10679 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
33bd39a2 10680 error ("qualifiers are not allowed on declaration of `operator %T'",
3ac3d9ea
MM
10681 ctor_return_type);
10682
4f2b0fb2
NS
10683 type_quals |= cp_type_quals (type);
10684 type = cp_build_qualified_type_real
10685 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
10686 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
10687 /* We might have ignored or rejected some of the qualifiers. */
10688 type_quals = cp_type_quals (type);
10689
8d08fdba
MS
10690 staticp = 0;
10691 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8d08fdba 10692 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
10693 RIDBIT_RESET (RID_VIRTUAL, specbits);
10694 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10695 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 10696
8d08fdba
MS
10697 if (RIDBIT_SETP (RID_STATIC, specbits))
10698 staticp = 1 + (decl_context == FIELD);
10699
10700 if (virtualp && staticp == 2)
10701 {
33bd39a2 10702 error ("member `%D' cannot be declared both virtual and static",
8d08fdba
MS
10703 dname);
10704 staticp = 0;
10705 }
10706 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8d08fdba
MS
10707 RIDBIT_RESET (RID_FRIEND, specbits);
10708
d5614afb
NS
10709 if (dependant_name && !friendp)
10710 {
10711 error ("`%T::%D' is not a valid declarator", ctype, dependant_name);
10712 return void_type_node;
10713 }
10714
8d08fdba
MS
10715 /* Warn if two storage classes are given. Default to `auto'. */
10716
10717 if (RIDBIT_ANY_SET (specbits))
10718 {
10719 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
270d8c65 10720 if (RIDBIT_SETP (RID_EXTERN, specbits) && !extern_langp) nclasses++;
7a1f3f5f 10721 if (RIDBIT_SETP (RID_THREAD, specbits)) nclasses++;
8d08fdba 10722 if (decl_context == PARM && nclasses > 0)
8251199e 10723 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
10724 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10725 {
10726 if (decl_context == PARM)
8251199e 10727 error ("typedef declaration invalid in parameter declaration");
8d08fdba
MS
10728 nclasses++;
10729 }
10730 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10731 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
270d8c65
NS
10732 if (!nclasses && !friendp && extern_langp)
10733 nclasses++;
8d08fdba
MS
10734 }
10735
10736 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
10737 if (virtualp
10738 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 10739 {
8251199e 10740 error ("virtual outside class declaration");
8d08fdba
MS
10741 virtualp = 0;
10742 }
8d08fdba
MS
10743
10744 /* Static anonymous unions are dealt with here. */
10745 if (staticp && decl_context == TYPENAME
10746 && TREE_CODE (declspecs) == TREE_LIST
6bdb8141 10747 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
8d08fdba
MS
10748 decl_context = FIELD;
10749
8d08fdba
MS
10750 /* Warn about storage classes that are invalid for certain
10751 kinds of declarations (parameters, typenames, etc.). */
10752
7a1f3f5f
RH
10753 /* "static __thread" and "extern __thread" are allowed. */
10754 if (nclasses == 2
10755 && RIDBIT_SETP (RID_THREAD, specbits)
10756 && (RIDBIT_SETP (RID_EXTERN, specbits)
10757 || RIDBIT_SETP (RID_STATIC, specbits)))
10758 nclasses = 1;
10759
8d08fdba 10760 if (nclasses > 1)
8251199e 10761 error ("multiple storage classes in declaration of `%s'", name);
8d08fdba
MS
10762 else if (decl_context != NORMAL && nclasses > 0)
10763 {
db5ae43f 10764 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
10765 && (RIDBIT_SETP (RID_REGISTER, specbits)
10766 || RIDBIT_SETP (RID_AUTO, specbits)))
10767 ;
fc378698
MS
10768 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10769 ;
8d08fdba 10770 else if (decl_context == FIELD
d363e7bf
AJ
10771 /* C++ allows static class elements */
10772 && RIDBIT_SETP (RID_STATIC, specbits))
10773 /* C++ also allows inlines and signed and unsigned elements,
10774 but in those cases we don't come in here. */
8d08fdba
MS
10775 ;
10776 else
10777 {
10778 if (decl_context == FIELD)
10779 {
b7484fbe
MS
10780 tree tmp = NULL_TREE;
10781 register int op = 0;
10782
10783 if (declarator)
10784 {
68642fb6 10785 /* Avoid trying to get an operand off an identifier node. */
9e9ff709
MS
10786 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10787 tmp = declarator;
10788 else
10789 tmp = TREE_OPERAND (declarator, 0);
b7484fbe 10790 op = IDENTIFIER_OPNAME_P (tmp);
596ea4e5
AS
10791 if (IDENTIFIER_TYPENAME_P (tmp))
10792 {
10793 if (IDENTIFIER_GLOBAL_VALUE (tmp)
5362b086 10794 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (tmp))
596ea4e5
AS
10795 == TYPE_DECL))
10796 name = IDENTIFIER_POINTER (tmp);
10797 else
10798 name = "<invalid operator>";
10799 }
b7484fbe 10800 }
8251199e 10801 error ("storage class specified for %s `%s'",
6eabb241 10802 op ? "member operator" : "field",
596ea4e5 10803 name);
8d08fdba
MS
10804 }
10805 else
b9d12519
KG
10806 {
10807 if (decl_context == PARM || decl_context == CATCHPARM)
10808 error ("storage class specified for parameter `%s'", name);
10809 else
10810 error ("storage class specified for typename");
10811 }
8d08fdba
MS
10812 RIDBIT_RESET (RID_REGISTER, specbits);
10813 RIDBIT_RESET (RID_AUTO, specbits);
10814 RIDBIT_RESET (RID_EXTERN, specbits);
7a1f3f5f 10815 RIDBIT_RESET (RID_THREAD, specbits);
8d08fdba
MS
10816 }
10817 }
10818 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10819 {
a9aedbc2 10820 if (toplevel_bindings_p ())
8d08fdba 10821 {
59be0cdd 10822 /* It's common practice (and completely valid) to have a const
8d08fdba 10823 be initialized and declared extern. */
950ad3c3 10824 if (!(type_quals & TYPE_QUAL_CONST))
8251199e 10825 warning ("`%s' initialized and declared `extern'", name);
8d08fdba
MS
10826 }
10827 else
8251199e 10828 error ("`%s' has both `extern' and initializer", name);
8d08fdba
MS
10829 }
10830 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
a9aedbc2 10831 && ! toplevel_bindings_p ())
8251199e 10832 error ("nested function `%s' declared `extern'", name);
a9aedbc2 10833 else if (toplevel_bindings_p ())
8d08fdba
MS
10834 {
10835 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 10836 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba 10837 }
7a1f3f5f
RH
10838 else if (RIDBIT_SETP (RID_THREAD, specbits)
10839 && !RIDBIT_SETP (RID_EXTERN, specbits)
10840 && !RIDBIT_SETP (RID_STATIC, specbits))
10841 {
10842 error ("function-scope `%s' implicitly auto and declared `__thread'",
10843 name);
10844 RIDBIT_RESET (RID_THREAD, specbits);
10845 }
8d08fdba 10846
909e536a 10847 if (nclasses > 0 && friendp)
8251199e 10848 error ("storage class specifiers invalid in friend function declarations");
909e536a 10849
a723baf1
MM
10850 scope = get_scope_of_declarator (declarator);
10851
8d08fdba
MS
10852 /* Now figure out the structure of the declarator proper.
10853 Descend through it, creating more complex types, until we reach
9e259dd1 10854 the declared identifier (or NULL_TREE, in an abstract declarator). */
8d08fdba 10855
386b8a85
JM
10856 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10857 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
10858 {
10859 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10860 an INDIRECT_REF (for *...),
10861 a CALL_EXPR (for ...(...)),
10862 an identifier (for the name being declared)
10863 or a null pointer (for the place in an absolute declarator
10864 where the name was omitted).
10865 For the last two cases, we have just exited the loop.
10866
10867 For C++ it could also be
10868 a SCOPE_REF (for class :: ...). In this case, we have converted
10869 sensible names to types, and those are the values we use to
10870 qualify the member name.
10871 an ADDR_EXPR (for &...),
10872 a BIT_NOT_EXPR (for destructors)
8d08fdba
MS
10873
10874 At this point, TYPE is the type of elements of an array,
10875 or for a function to return, or for a pointer to point to.
10876 After this sequence of ifs, TYPE is the type of the
10877 array or function or pointer, and DECLARATOR has had its
10878 outermost layer removed. */
10879
bd6dd845 10880 if (type == error_mark_node)
8d08fdba
MS
10881 {
10882 if (TREE_CODE (declarator) == SCOPE_REF)
10883 declarator = TREE_OPERAND (declarator, 1);
10884 else
10885 declarator = TREE_OPERAND (declarator, 0);
10886 continue;
10887 }
10888 if (quals != NULL_TREE
10889 && (declarator == NULL_TREE
10890 || TREE_CODE (declarator) != SCOPE_REF))
10891 {
10892 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10893 ctype = TYPE_METHOD_BASETYPE (type);
10894 if (ctype != NULL_TREE)
10895 {
8d08fdba 10896 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
535233a8 10897 grok_method_quals (ctype, dummy, quals);
8d08fdba
MS
10898 type = TREE_TYPE (dummy);
10899 quals = NULL_TREE;
10900 }
10901 }
1eab9b56 10902
8d08fdba
MS
10903 switch (TREE_CODE (declarator))
10904 {
52fbc847
JM
10905 case TREE_LIST:
10906 {
10907 /* We encode a declarator with embedded attributes using
91d231cb
JM
10908 a TREE_LIST. */
10909 tree attrs = TREE_PURPOSE (declarator);
10910 tree inner_decl;
c9574c9f
R
10911 int attr_flags;
10912
52fbc847 10913 declarator = TREE_VALUE (declarator);
91d231cb
JM
10914 inner_decl = declarator;
10915 while (inner_decl != NULL_TREE
10916 && TREE_CODE (inner_decl) == TREE_LIST)
10917 inner_decl = TREE_VALUE (inner_decl);
c9574c9f 10918 attr_flags = 0;
91d231cb
JM
10919 if (inner_decl == NULL_TREE
10920 || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
10921 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10922 if (TREE_CODE (inner_decl) == CALL_EXPR)
10923 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10924 if (TREE_CODE (inner_decl) == ARRAY_REF)
10925 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10926 returned_attrs = decl_attributes (&type,
10927 chainon (returned_attrs, attrs),
10928 attr_flags);
52fbc847
JM
10929 }
10930 break;
10931
8d08fdba
MS
10932 case ARRAY_REF:
10933 {
2848ad0f 10934 register tree size;
8d08fdba 10935
2848ad0f 10936 size = TREE_OPERAND (declarator, 1);
8d08fdba 10937
f2e2cbd4 10938 /* VC++ spells a zero-sized array with []. */
e8ea7036
MM
10939 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10940 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
f2e2cbd4
JM
10941 size = integer_zero_node;
10942
2848ad0f 10943 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10944
2848ad0f 10945 type = create_array_type_for_decl (dname, type, size);
c1b177ec 10946
8d08fdba
MS
10947 ctype = NULL_TREE;
10948 }
10949 break;
10950
10951 case CALL_EXPR:
10952 {
10953 tree arg_types;
f376e137 10954 int funcdecl_p;
43f887f9 10955 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
f376e137 10956 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
10957
10958 /* Declaring a function type.
10959 Make sure we have a valid type for the function to return. */
8d08fdba 10960
91063b51 10961 /* We now know that the TYPE_QUALS don't apply to the
14ae7e7d 10962 decl, but to its return type. */
91063b51 10963 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
10964
10965 /* Warn about some types functions can't return. */
10966
10967 if (TREE_CODE (type) == FUNCTION_TYPE)
10968 {
8251199e 10969 error ("`%s' declared as function returning a function", name);
8d08fdba
MS
10970 type = integer_type_node;
10971 }
10972 if (TREE_CODE (type) == ARRAY_TYPE)
10973 {
8251199e 10974 error ("`%s' declared as function returning an array", name);
8d08fdba
MS
10975 type = integer_type_node;
10976 }
10977
f376e137
MS
10978 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10979 inner_decl = TREE_OPERAND (inner_decl, 1);
10980
68642fb6 10981 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
386b8a85
JM
10982 inner_decl = dname;
10983
b7484fbe 10984 /* Pick up type qualifiers which should be applied to `this'. */
43f887f9 10985 quals = CALL_DECLARATOR_QUALS (declarator);
b7484fbe 10986
c11b6f21 10987 /* Pick up the exception specifications. */
43f887f9 10988 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
c11b6f21 10989
f376e137
MS
10990 /* Say it's a definition only for the CALL_EXPR
10991 closest to the identifier. */
beb53fb8 10992 funcdecl_p
68642fb6 10993 = inner_decl
386b8a85 10994 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
68642fb6 10995 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
386b8a85 10996 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
68642fb6 10997
8d08fdba
MS
10998 if (ctype == NULL_TREE
10999 && decl_context == FIELD
f376e137 11000 && funcdecl_p
8d08fdba
MS
11001 && (friendp == 0 || dname == current_class_name))
11002 ctype = current_class_type;
11003
3dbc07b6 11004 if (ctype && sfk == sfk_conversion)
8d08fdba 11005 TYPE_HAS_CONVERSION (ctype) = 1;
a723baf1 11006 if (ctype && constructor_name_p (dname, ctype))
8d08fdba
MS
11007 {
11008 /* We are within a class's scope. If our declarator name
11009 is the same as the class name, and we are defining
11010 a function, then it is a constructor/destructor, and
11011 therefore returns a void type. */
11012
11013 if (flags == DTOR_FLAG)
11014 {
cab1f180
ML
11015 /* ISO C++ 12.4/2. A destructor may not be
11016 declared const or volatile. A destructor may
11017 not be static. */
8d08fdba 11018 if (staticp == 2)
8251199e 11019 error ("destructor cannot be static member function");
b7484fbe 11020 if (quals)
8d08fdba 11021 {
33bd39a2 11022 error ("destructors may not be `%s'",
4f70a846
MM
11023 IDENTIFIER_POINTER (TREE_VALUE (quals)));
11024 quals = NULL_TREE;
8d08fdba
MS
11025 }
11026 if (decl_context == FIELD)
11027 {
4dacf5bd
KG
11028 if (! member_function_or_else (ctype,
11029 current_class_type,
11030 flags))
8d08fdba
MS
11031 return void_type_node;
11032 }
11033 }
2c73f9f5 11034 else /* It's a constructor. */
8d08fdba 11035 {
db5ae43f
MS
11036 if (explicitp == 1)
11037 explicitp = 2;
cab1f180
ML
11038 /* ISO C++ 12.1. A constructor may not be
11039 declared const or volatile. A constructor may
11040 not be virtual. A constructor may not be
11041 static. */
8d08fdba 11042 if (staticp == 2)
8251199e 11043 error ("constructor cannot be static member function");
8d08fdba
MS
11044 if (virtualp)
11045 {
8251199e 11046 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
11047 virtualp = 0;
11048 }
b7484fbe 11049 if (quals)
8d08fdba 11050 {
33bd39a2 11051 error ("constructors may not be `%s'",
4f70a846
MM
11052 IDENTIFIER_POINTER (TREE_VALUE (quals)));
11053 quals = NULL_TREE;
d363e7bf 11054 }
8d08fdba 11055 {
51c184be 11056 RID_BIT_TYPE tmp_bits;
4e135bdd 11057 memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
51c184be
MS
11058 RIDBIT_RESET (RID_INLINE, tmp_bits);
11059 RIDBIT_RESET (RID_STATIC, tmp_bits);
11060 if (RIDBIT_ANY_SET (tmp_bits))
8251199e 11061 error ("return value type specifier for constructor ignored");
8d08fdba 11062 }
6eabb241 11063 if (decl_context == FIELD)
8d08fdba 11064 {
4dacf5bd
KG
11065 if (! member_function_or_else (ctype,
11066 current_class_type,
11067 flags))
8d08fdba
MS
11068 return void_type_node;
11069 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
3dbc07b6 11070 if (sfk != sfk_constructor)
8d08fdba
MS
11071 return NULL_TREE;
11072 }
11073 }
11074 if (decl_context == FIELD)
11075 staticp = 0;
11076 }
b7484fbe 11077 else if (friendp)
8d08fdba 11078 {
b7484fbe 11079 if (initialized)
8251199e 11080 error ("can't initialize friend function `%s'", name);
b7484fbe
MS
11081 if (virtualp)
11082 {
11083 /* Cannot be both friend and virtual. */
8251199e 11084 error ("virtual functions cannot be friends");
b7484fbe
MS
11085 RIDBIT_RESET (RID_FRIEND, specbits);
11086 friendp = 0;
11087 }
28cbf42c 11088 if (decl_context == NORMAL)
8251199e 11089 error ("friend declaration not in class definition");
28cbf42c 11090 if (current_function_decl && funcdef_flag)
33bd39a2 11091 error ("can't define friend function `%s' in a local class definition",
28cbf42c 11092 name);
8d08fdba
MS
11093 }
11094
8d08fdba
MS
11095 /* Construct the function type and go to the next
11096 inner layer of declarator. */
11097
f376e137 11098 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 11099
f376e137
MS
11100 /* FIXME: This is where default args should be fully
11101 processed. */
8d08fdba 11102
5cce22b6 11103 arg_types = grokparms (inner_parms);
8d08fdba 11104
4f70a846 11105 if (declarator && flags == DTOR_FLAG)
8d08fdba 11106 {
4f70a846
MM
11107 /* A destructor declared in the body of a class will
11108 be represented as a BIT_NOT_EXPR. But, we just
11109 want the underlying IDENTIFIER. */
8d08fdba 11110 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
4f70a846 11111 declarator = TREE_OPERAND (declarator, 0);
68642fb6 11112
8b27e9ef 11113 if (arg_types != void_list_node)
8d08fdba 11114 {
33bd39a2 11115 error ("destructors may not have parameters");
4f70a846
MM
11116 arg_types = void_list_node;
11117 last_function_parms = NULL_TREE;
8d08fdba
MS
11118 }
11119 }
11120
d22c8596 11121 /* ANSI says that `const int foo ();'
8d08fdba 11122 does not make the function foo const. */
d22c8596 11123 type = build_function_type (type, arg_types);
8d08fdba
MS
11124 }
11125 break;
11126
11127 case ADDR_EXPR:
11128 case INDIRECT_REF:
11129 /* Filter out pointers-to-references and references-to-references.
11130 We can get these if a TYPE_DECL is used. */
11131
11132 if (TREE_CODE (type) == REFERENCE_TYPE)
11133 {
dd29188b
NS
11134 error (TREE_CODE (declarator) == ADDR_EXPR
11135 ? "cannot declare reference to `%#T'"
11136 : "cannot declare pointer to `%#T'", type);
a5894242
MS
11137 type = TREE_TYPE (type);
11138 }
dd29188b
NS
11139 else if (VOID_TYPE_P (type)
11140 && (ctype || TREE_CODE (declarator) == ADDR_EXPR))
11141 error (ctype ? "cannot declare pointer to `%#T' member"
11142 : "cannot declare reference to `%#T'", type);
a5894242 11143
61a127b3
MM
11144 /* Merge any constancy or volatility into the target type
11145 for the pointer. */
11146
91063b51
MM
11147 /* We now know that the TYPE_QUALS don't apply to the decl,
11148 but to the target of the pointer. */
11149 type_quals = TYPE_UNQUALIFIED;
8d08fdba 11150
6eabb241 11151 if (TREE_CODE (declarator) == ADDR_EXPR)
8d08fdba 11152 {
dd29188b 11153 if (!VOID_TYPE_P (type))
69851283 11154 type = build_reference_type (type);
8d08fdba
MS
11155 }
11156 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 11157 type = build_ptrmemfunc_type (build_pointer_type (type));
9e259dd1
MM
11158 else if (ctype)
11159 type = build_ptrmem_type (ctype, type);
8d08fdba
MS
11160 else
11161 type = build_pointer_type (type);
11162
11163 /* Process a list of type modifier keywords (such as
11164 const or volatile) that were given inside the `*' or `&'. */
11165
11166 if (TREE_TYPE (declarator))
11167 {
11168 register tree typemodlist;
11169 int erred = 0;
4f2b0fb2
NS
11170 int constp = 0;
11171 int volatilep = 0;
11172 int restrictp = 0;
11173
8d08fdba
MS
11174 for (typemodlist = TREE_TYPE (declarator); typemodlist;
11175 typemodlist = TREE_CHAIN (typemodlist))
11176 {
91063b51
MM
11177 tree qualifier = TREE_VALUE (typemodlist);
11178
11179 if (qualifier == ridpointers[(int) RID_CONST])
4f2b0fb2
NS
11180 {
11181 constp++;
11182 type_quals |= TYPE_QUAL_CONST;
11183 }
91063b51 11184 else if (qualifier == ridpointers[(int) RID_VOLATILE])
4f2b0fb2
NS
11185 {
11186 volatilep++;
11187 type_quals |= TYPE_QUAL_VOLATILE;
11188 }
91063b51 11189 else if (qualifier == ridpointers[(int) RID_RESTRICT])
4f2b0fb2
NS
11190 {
11191 restrictp++;
11192 type_quals |= TYPE_QUAL_RESTRICT;
11193 }
8d08fdba
MS
11194 else if (!erred)
11195 {
11196 erred = 1;
91063b51 11197 error ("invalid type modifier within pointer declarator");
8d08fdba
MS
11198 }
11199 }
11200 if (constp > 1)
8251199e 11201 pedwarn ("duplicate `const'");
8d08fdba 11202 if (volatilep > 1)
8251199e 11203 pedwarn ("duplicate `volatile'");
91063b51
MM
11204 if (restrictp > 1)
11205 pedwarn ("duplicate `restrict'");
91063b51 11206 type = cp_build_qualified_type (type, type_quals);
4f2b0fb2 11207 type_quals = cp_type_quals (type);
8d08fdba
MS
11208 }
11209 declarator = TREE_OPERAND (declarator, 0);
11210 ctype = NULL_TREE;
11211 break;
11212
11213 case SCOPE_REF:
11214 {
11215 /* We have converted type names to NULL_TREE if the
11216 name was bogus, or to a _TYPE node, if not.
11217
11218 The variable CTYPE holds the type we will ultimately
11219 resolve to. The code here just needs to build
11220 up appropriate member types. */
11221 tree sname = TREE_OPERAND (declarator, 1);
386b8a85
JM
11222 tree t;
11223
8d08fdba
MS
11224 /* Destructors can have their visibilities changed as well. */
11225 if (TREE_CODE (sname) == BIT_NOT_EXPR)
11226 sname = TREE_OPERAND (sname, 0);
11227
8d08fdba
MS
11228 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
11229 {
11230 /* We had a reference to a global decl, or
11231 perhaps we were given a non-aggregate typedef,
11232 in which case we cleared this out, and should just
11233 keep going as though it wasn't there. */
11234 declarator = sname;
11235 continue;
11236 }
11237 ctype = TREE_OPERAND (declarator, 0);
11238
386b8a85 11239 t = ctype;
68642fb6 11240 while (t != NULL_TREE && CLASS_TYPE_P (t))
386b8a85 11241 {
5362b086 11242 /* You're supposed to have one `template <...>'
da8a7456
MM
11243 for every template class, but you don't need one
11244 for a full specialization. For example:
11245
11246 template <class T> struct S{};
11247 template <> struct S<int> { void f(); };
11248 void S<int>::f () {}
11249
11250 is correct; there shouldn't be a `template <>' for
11251 the definition of `S<int>::f'. */
11252 if (CLASSTYPE_TEMPLATE_INFO (t)
11253 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
92ecdfb7
NS
11254 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
11255 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
386b8a85 11256 template_count += 1;
da8a7456 11257
386b8a85 11258 t = TYPE_MAIN_DECL (t);
92ecdfb7 11259 t = DECL_CONTEXT (t);
386b8a85
JM
11260 }
11261
8d08fdba
MS
11262 if (sname == NULL_TREE)
11263 goto done_scoping;
11264
11265 if (TREE_CODE (sname) == IDENTIFIER_NODE)
11266 {
11267 /* This is the `standard' use of the scoping operator:
11268 basetype :: member . */
11269
db5ae43f 11270 if (ctype == current_class_type)
28cbf42c
MS
11271 {
11272 /* class A {
11273 void A::f ();
11274 };
11275
11276 Is this ill-formed? */
11277
11278 if (pedantic)
33bd39a2 11279 pedwarn ("extra qualification `%T::' on member `%s' ignored",
28cbf42c
MS
11280 ctype, name);
11281 }
db5ae43f 11282 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 11283 {
eeb75383 11284 if (current_class_type == NULL_TREE || friendp)
14ae7e7d
JM
11285 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11286 TYPE_ARG_TYPES (type));
8d08fdba
MS
11287 else
11288 {
33bd39a2 11289 error ("cannot declare member function `%T::%s' within `%T'",
a3203465 11290 ctype, name, current_class_type);
a723baf1 11291 return error_mark_node;
8d08fdba
MS
11292 }
11293 }
5566b478 11294 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
d0f062fb 11295 || COMPLETE_TYPE_P (complete_type (ctype)))
8d08fdba 11296 {
2c73f9f5 11297 /* Have to move this code elsewhere in this function.
db5ae43f
MS
11298 this code is used for i.e., typedef int A::M; M *pm;
11299
11300 It is? How? jason 10/2/94 */
8d08fdba 11301
8d08fdba
MS
11302 if (current_class_type)
11303 {
33bd39a2 11304 error ("cannot declare member `%T::%s' within `%T'",
db5ae43f
MS
11305 ctype, name, current_class_type);
11306 return void_type_node;
8d08fdba 11307 }
8d08fdba 11308 }
8d08fdba 11309 else
eeb75383 11310 {
7a228918 11311 cxx_incomplete_type_error (NULL_TREE, ctype);
eeb75383 11312 return error_mark_node;
d363e7bf 11313 }
8d08fdba
MS
11314
11315 declarator = sname;
11316 }
8d08fdba 11317 else if (TREE_CODE (sname) == SCOPE_REF)
a98facb0 11318 abort ();
8d08fdba
MS
11319 else
11320 {
11321 done_scoping:
11322 declarator = TREE_OPERAND (declarator, 1);
11323 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
11324 /* In this case, we will deal with it later. */
11325 ;
9e259dd1
MM
11326 else if (TREE_CODE (type) == FUNCTION_TYPE)
11327 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11328 TYPE_ARG_TYPES (type));
8d08fdba
MS
11329 }
11330 }
11331 break;
11332
11333 case BIT_NOT_EXPR:
11334 declarator = TREE_OPERAND (declarator, 0);
11335 break;
11336
50ad9642
MM
11337 case BASELINK:
11338 declarator = BASELINK_FUNCTIONS (declarator);
11339 break;
11340
8d08fdba
MS
11341 case RECORD_TYPE:
11342 case UNION_TYPE:
11343 case ENUMERAL_TYPE:
11344 declarator = NULL_TREE;
11345 break;
11346
11347 case ERROR_MARK:
11348 declarator = NULL_TREE;
11349 break;
11350
11351 default:
a98facb0 11352 abort ();
8d08fdba
MS
11353 }
11354 }
11355
91d231cb 11356 if (returned_attrs)
1eab9b56 11357 {
91d231cb
JM
11358 if (attrlist)
11359 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 11360 else
91d231cb 11361 attrlist = &returned_attrs;
1eab9b56
JM
11362 }
11363
a723baf1
MM
11364 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq that refer
11365 to ctype. They couldn't be resolved earlier because we hadn't
11366 pushed into the class yet.
11367
11368 For example, consider:
11369
11370 template <typename T>
11371 struct S {
11372 typedef T X;
11373 X f();
11374 };
11375
11376 template <typename T>
11377 typename S<T>::X f() {}
11378
11379 When parsing the decl-specifier-seq for the definition of `f',
11380 we construct a TYPENAME_TYPE for `S<T>::X'. By substituting
11381 here, we resolve it to the correct type. */
11382 if (scope && CLASS_TYPE_P (scope)
11383 && current_template_parms
11384 && uses_template_parms (scope))
11385 {
11386 tree args = current_template_args ();
11387 push_scope (scope);
11388 type = tsubst (type, args, tf_error | tf_warning,
11389 NULL_TREE);
11390 pop_scope (scope);
11391 }
11392
419c6212
JM
11393 /* Now TYPE has the actual type. */
11394
55b3d665
JM
11395 /* Did array size calculations overflow? */
11396
11397 if (TREE_CODE (type) == ARRAY_TYPE
11398 && COMPLETE_TYPE_P (type)
11399 && TREE_OVERFLOW (TYPE_SIZE (type)))
11400 {
11401 error ("size of array `%s' is too large", name);
aba649ba 11402 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
11403 crash in tree_low_cst(). */
11404 type = error_mark_node;
11405 }
11406
dac45b5c
MM
11407 if (decl_context == FIELD
11408 && !processing_template_decl
11409 && variably_modified_type_p (type))
11410 {
11411 error ("data member may not have variably modified type `%T'", type);
11412 type = error_mark_node;
11413 }
11414
34fc957d 11415 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 11416 {
34fc957d
NS
11417 /* [dcl.fct.spec] The explicit specifier shall only be used in
11418 declarations of constructors within a class definition. */
11419 error ("only declarations of constructors can be `explicit'");
db5ae43f
MS
11420 explicitp = 0;
11421 }
11422
f30432d7
MS
11423 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11424 {
34fc957d
NS
11425 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
11426 {
11427 error ("non-member `%s' cannot be declared `mutable'", name);
11428 RIDBIT_RESET (RID_MUTABLE, specbits);
11429 }
11430 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
f30432d7 11431 {
34fc957d 11432 error ("non-object member `%s' cannot be declared `mutable'", name);
f30432d7
MS
11433 RIDBIT_RESET (RID_MUTABLE, specbits);
11434 }
34fc957d
NS
11435 else if (TREE_CODE (type) == FUNCTION_TYPE
11436 || TREE_CODE (type) == METHOD_TYPE)
11437 {
11438 error ("function `%s' cannot be declared `mutable'", name);
11439 RIDBIT_RESET (RID_MUTABLE, specbits);
11440 }
f30432d7
MS
11441 else if (staticp)
11442 {
8251199e 11443 error ("static `%s' cannot be declared `mutable'", name);
f30432d7
MS
11444 RIDBIT_RESET (RID_MUTABLE, specbits);
11445 }
34fc957d
NS
11446 else if (type_quals & TYPE_QUAL_CONST)
11447 {
11448 error ("const `%s' cannot be declared `mutable'", name);
4f2b0fb2 11449 RIDBIT_RESET (RID_MUTABLE, specbits);
34fc957d 11450 }
f30432d7
MS
11451 }
11452
efe38fab
JM
11453 if (declarator == NULL_TREE
11454 || TREE_CODE (declarator) == IDENTIFIER_NODE
11455 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
11456 && (TREE_CODE (type) == FUNCTION_TYPE
11457 || TREE_CODE (type) == METHOD_TYPE)))
11458 /* OK */;
11459 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11460 {
33bd39a2 11461 error ("template-id `%D' used as a declarator", declarator);
efe38fab
JM
11462 declarator = dname;
11463 }
11464 else
419c6212 11465 /* Unexpected declarator format. */
a98facb0 11466 abort ();
efe38fab 11467
419c6212
JM
11468 /* If this is declaring a typedef name, return a TYPE_DECL. */
11469
fc378698 11470 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
11471 {
11472 tree decl;
11473
11474 /* Note that the grammar rejects storage classes
11475 in typenames, fields or parameters. */
eff71ab0
PB
11476 if (current_lang_name == lang_name_java)
11477 TYPE_FOR_JAVA (type) = 1;
8d08fdba 11478
d2e5ee5c
MS
11479 if (decl_context == FIELD)
11480 {
a723baf1 11481 if (constructor_name_p (declarator, current_class_type))
33bd39a2 11482 pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
d2e5ee5c
MS
11483 declarator);
11484 decl = build_lang_decl (TYPE_DECL, declarator, type);
d2e5ee5c
MS
11485 }
11486 else
6bda7a5e
NS
11487 {
11488 decl = build_decl (TYPE_DECL, declarator, type);
a723baf1
MM
11489 if (in_namespace || ctype)
11490 cp_error_at ("typedef name may not be a nested-name-specifier",
11491 decl);
6bda7a5e
NS
11492 if (!current_function_decl)
11493 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11494 }
11495
9188c363
MM
11496 /* If the user declares "typedef struct {...} foo" then the
11497 struct will have an anonymous name. Fill that name in now.
11498 Nothing can refer to it, so nothing needs know about the name
11499 change. */
8d08fdba 11500 if (type != error_mark_node
2bdb0643 11501 && declarator
8d08fdba
MS
11502 && TYPE_NAME (type)
11503 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 11504 && TYPE_ANONYMOUS_P (type)
ac905924
JM
11505 /* Don't do this if there are attributes. */
11506 && (!attrlist || !*attrlist)
89d684bb 11507 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 11508 {
dcd08efc
JM
11509 tree oldname = TYPE_NAME (type);
11510 tree t;
11511
2c73f9f5 11512 /* Replace the anonymous name with the real name everywhere. */
8d08fdba 11513 lookup_tag_reverse (type, declarator);
dcd08efc
JM
11514 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11515 if (TYPE_NAME (t) == oldname)
11516 TYPE_NAME (t) = decl;
8d08fdba
MS
11517
11518 if (TYPE_LANG_SPECIFIC (type))
11519 TYPE_WAS_ANONYMOUS (type) = 1;
11520
33964bf4
MM
11521 /* If this is a typedef within a template class, the nested
11522 type is a (non-primary) template. The name for the
11523 template needs updating as well. */
11524 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 11525 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
11526 = TYPE_IDENTIFIER (type);
11527
50a6dbd7
JM
11528 /* FIXME remangle member functions; member functions of a
11529 type with external linkage have external linkage. */
fc378698 11530 }
fc378698 11531
a723baf1 11532 if (quals)
8d08fdba
MS
11533 {
11534 if (ctype == NULL_TREE)
11535 {
11536 if (TREE_CODE (type) != METHOD_TYPE)
cb9a3ff8 11537 cp_error_at ("invalid type qualifier for non-member function type", decl);
8d08fdba
MS
11538 else
11539 ctype = TYPE_METHOD_BASETYPE (type);
11540 }
11541 if (ctype != NULL_TREE)
11542 grok_method_quals (ctype, decl, quals);
11543 }
11544
11545 if (RIDBIT_SETP (RID_SIGNED, specbits)
11546 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11547 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11548
c91a56d2
MS
11549 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11550 inlinep, friendp, raises != NULL_TREE);
11551
8d08fdba
MS
11552 return decl;
11553 }
11554
11555 /* Detect the case of an array type of unspecified size
11556 which came, as such, direct from a typedef name.
8d6e459d
NS
11557 We must copy the type, so that the array's domain can be
11558 individually set by the object's initializer. */
8d08fdba 11559
8d6e459d
NS
11560 if (type && typedef_type
11561 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
55b3d665 11562 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d6e459d 11563 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8d08fdba 11564
969fd501
NS
11565 /* Detect where we're using a typedef of function type to declare a
11566 function. last_function_parms will not be set, so we must create
11567 it now. */
11568
11569 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11570 {
11571 tree decls = NULL_TREE;
11572 tree args;
11573
11574 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
11575 {
8e51619a 11576 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
969fd501
NS
11577
11578 TREE_CHAIN (decl) = decls;
11579 decls = decl;
11580 }
11581
11582 last_function_parms = nreverse (decls);
11583 }
11584
8d08fdba
MS
11585 /* If this is a type name (such as, in a cast or sizeof),
11586 compute the type and return it now. */
11587
11588 if (decl_context == TYPENAME)
11589 {
11590 /* Note that the grammar rejects storage classes
11591 in typenames, fields or parameters. */
91063b51 11592 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 11593 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
11594
11595 /* Special case: "friend class foo" looks like a TYPENAME context. */
11596 if (friendp)
11597 {
91063b51 11598 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 11599 {
33bd39a2 11600 error ("type qualifiers specified for friend class declaration");
91063b51 11601 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
11602 }
11603 if (inlinep)
11604 {
33bd39a2 11605 error ("`inline' specified for friend class declaration");
b7484fbe
MS
11606 inlinep = 0;
11607 }
f2ae0c45 11608
218e0eb6 11609 if (!current_aggr)
4b054b80 11610 {
218e0eb6 11611 /* Don't allow friend declaration without a class-key. */
4b054b80 11612 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
218e0eb6 11613 pedwarn ("template parameters cannot be friends");
f2ae0c45 11614 else if (TREE_CODE (type) == TYPENAME_TYPE)
218e0eb6
KL
11615 pedwarn ("friend declaration requires class-key, "
11616 "i.e. `friend class %T::%D'",
11617 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
4b054b80 11618 else
218e0eb6
KL
11619 pedwarn ("friend declaration requires class-key, "
11620 "i.e. `friend %#T'",
11621 type);
4b054b80 11622 }
b7484fbe
MS
11623
11624 /* Only try to do this stuff if we didn't already give up. */
11625 if (type != integer_type_node)
11626 {
ab04e34b 11627 decl_type_access_control (TYPE_NAME (type));
d363e7bf 11628
b7484fbe
MS
11629 /* A friendly class? */
11630 if (current_class_type)
11631 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11632 else
33bd39a2 11633 error ("trying to make class `%T' a friend of global scope",
2ae7bada 11634 type);
d363e7bf 11635
b7484fbe
MS
11636 type = void_type_node;
11637 }
8d08fdba
MS
11638 }
11639 else if (quals)
11640 {
8d08fdba
MS
11641 if (ctype == NULL_TREE)
11642 {
41cbc04c 11643 if (TREE_CODE (type) != METHOD_TYPE)
33bd39a2 11644 error ("invalid qualifiers on non-member function type");
41cbc04c
NS
11645 else
11646 ctype = TYPE_METHOD_BASETYPE (type);
11647 }
11648 if (ctype)
11649 {
11650 tree dummy = build_decl (TYPE_DECL, declarator, type);
11651 grok_method_quals (ctype, dummy, quals);
11652 type = TREE_TYPE (dummy);
8d08fdba 11653 }
8d08fdba
MS
11654 }
11655
11656 return type;
11657 }
11658 else if (declarator == NULL_TREE && decl_context != PARM
db5ae43f 11659 && decl_context != CATCHPARM
8d08fdba
MS
11660 && TREE_CODE (type) != UNION_TYPE
11661 && ! bitfield)
11662 {
33bd39a2 11663 error ("abstract declarator `%T' used as declaration", type);
8d08fdba
MS
11664 declarator = make_anon_name ();
11665 }
11666
11667 /* `void' at top level (not within pointer)
11668 is allowed only in typedefs or type names.
11669 We don't complain about parms either, but that is because
11670 a better error message can be made later. */
11671
a1774733 11672 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
8d08fdba 11673 {
b7484fbe 11674 if (! declarator)
8251199e 11675 error ("unnamed variable or field declared void");
b7484fbe 11676 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
11677 {
11678 if (IDENTIFIER_OPNAME_P (declarator))
a98facb0 11679 abort ();
8d08fdba 11680 else
8251199e 11681 error ("variable or field `%s' declared void", name);
8d08fdba
MS
11682 }
11683 else
8251199e 11684 error ("variable or field declared void");
8d08fdba
MS
11685 type = integer_type_node;
11686 }
11687
11688 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11689 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11690
14ae7e7d
JM
11691 if (decl_context == PARM || decl_context == CATCHPARM)
11692 {
11693 if (ctype || in_namespace)
11694 error ("cannot use `::' in parameter declaration");
11695
11696 /* A parameter declared as an array of T is really a pointer to T.
11697 One declared as a function is really a pointer to a function.
11698 One declared as a member is really a pointer to member. */
11699
11700 if (TREE_CODE (type) == ARRAY_TYPE)
11701 {
11702 /* Transfer const-ness of array into that of type pointed to. */
11703 type = build_pointer_type (TREE_TYPE (type));
91063b51 11704 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
11705 }
11706 else if (TREE_CODE (type) == FUNCTION_TYPE)
11707 type = build_pointer_type (type);
11708 else if (TREE_CODE (type) == OFFSET_TYPE)
11709 type = build_pointer_type (type);
14ae7e7d 11710 }
68642fb6 11711
8d08fdba
MS
11712 {
11713 register tree decl;
11714
11715 if (decl_context == PARM)
11716 {
8e51619a 11717 decl = cp_build_parm_decl (declarator, type);
8d08fdba
MS
11718
11719 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11720 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
11721 }
11722 else if (decl_context == FIELD)
11723 {
11724 if (type == error_mark_node)
11725 {
11726 /* Happens when declaring arrays of sizes which
11727 are error_mark_node, for example. */
11728 decl = NULL_TREE;
11729 }
997a088c 11730 else if (in_namespace && !friendp)
05008fb9
MM
11731 {
11732 /* Something like struct S { int N::j; }; */
33bd39a2 11733 error ("invalid use of `::'");
05008fb9
MM
11734 decl = NULL_TREE;
11735 }
8d08fdba
MS
11736 else if (TREE_CODE (type) == FUNCTION_TYPE)
11737 {
11738 int publicp = 0;
e1467ff2 11739 tree function_context;
8d08fdba 11740
72b7eeff
MS
11741 /* We catch the others as conflicts with the builtin
11742 typedefs. */
11743 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11744 {
33bd39a2 11745 error ("function `%D' cannot be declared friend",
72b7eeff
MS
11746 declarator);
11747 friendp = 0;
11748 }
11749
8d08fdba
MS
11750 if (friendp == 0)
11751 {
11752 if (ctype == NULL_TREE)
11753 ctype = current_class_type;
11754
11755 if (ctype == NULL_TREE)
11756 {
33bd39a2 11757 error ("can't make `%D' into a method -- not in a class",
8d08fdba
MS
11758 declarator);
11759 return void_type_node;
11760 }
11761
11762 /* ``A union may [ ... ] not [ have ] virtual functions.''
11763 ARM 9.5 */
11764 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11765 {
33bd39a2 11766 error ("function `%D' declared virtual inside a union",
8d08fdba
MS
11767 declarator);
11768 return void_type_node;
11769 }
11770
596ea4e5
AS
11771 if (declarator == ansi_opname (NEW_EXPR)
11772 || declarator == ansi_opname (VEC_NEW_EXPR)
11773 || declarator == ansi_opname (DELETE_EXPR)
11774 || declarator == ansi_opname (VEC_DELETE_EXPR))
8d08fdba
MS
11775 {
11776 if (virtualp)
11777 {
33bd39a2 11778 error ("`%D' cannot be declared virtual, since it is always static",
8d08fdba
MS
11779 declarator);
11780 virtualp = 0;
11781 }
11782 }
11783 else if (staticp < 2)
14ae7e7d
JM
11784 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11785 TYPE_ARG_TYPES (type));
8d08fdba
MS
11786 }
11787
11788 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 11789 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 11790 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
11791 publicp = (! friendp || ! staticp)
11792 && function_context == NULL_TREE;
68642fb6 11793 decl = grokfndecl (ctype, type,
386b8a85
JM
11794 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11795 ? declarator : dname,
11796 declarator,
7a8f9fa9 11797 virtualp, flags, quals, raises,
386b8a85 11798 friendp ? -1 : 0, friendp, publicp, inlinep,
2c73f9f5 11799 funcdef_flag, template_count, in_namespace);
20496fa2 11800 if (decl == NULL_TREE)
3ddfb0e6 11801 return decl;
6125f3be
DE
11802#if 0
11803 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
11804 /* The decl and setting of decl_attr is also turned off. */
11805 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 11806#endif
f0e01782 11807
cc804e51
MM
11808 /* [class.conv.ctor]
11809
11810 A constructor declared without the function-specifier
11811 explicit that can be called with a single parameter
11812 specifies a conversion from the type of its first
11813 parameter to the type of its class. Such a constructor
11814 is called a converting constructor. */
db5ae43f
MS
11815 if (explicitp == 2)
11816 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
11817 else if (DECL_CONSTRUCTOR_P (decl))
11818 {
11819 /* The constructor can be called with exactly one
11820 parameter if there is at least one parameter, and
11821 any subsequent parameters have default arguments.
e0fff4b3
JM
11822 Ignore any compiler-added parms. */
11823 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51
MM
11824
11825 if (arg_types == void_list_node
68642fb6
UD
11826 || (arg_types
11827 && TREE_CHAIN (arg_types)
cc804e51
MM
11828 && TREE_CHAIN (arg_types) != void_list_node
11829 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11830 DECL_NONCONVERTING_P (decl) = 1;
11831 }
8d08fdba
MS
11832 }
11833 else if (TREE_CODE (type) == METHOD_TYPE)
11834 {
faae18ab
MS
11835 /* We only get here for friend declarations of
11836 members of other classes. */
8d08fdba
MS
11837 /* All method decls are public, so tell grokfndecl to set
11838 TREE_PUBLIC, also. */
386b8a85 11839 decl = grokfndecl (ctype, type, declarator, declarator,
7a8f9fa9 11840 virtualp, flags, quals, raises,
386b8a85 11841 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
2c73f9f5 11842 template_count, in_namespace);
f0e01782
MS
11843 if (decl == NULL_TREE)
11844 return NULL_TREE;
8d08fdba 11845 }
5566b478 11846 else if (!staticp && ! processing_template_decl
d0f062fb 11847 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
11848 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11849 {
b7484fbe 11850 if (declarator)
33bd39a2 11851 error ("field `%D' has incomplete type", declarator);
b7484fbe 11852 else
33bd39a2 11853 error ("name `%T' has incomplete type", type);
8d08fdba
MS
11854
11855 /* If we're instantiating a template, tell them which
11856 instantiation made the field's type be incomplete. */
11857 if (current_class_type
11858 && TYPE_NAME (current_class_type)
d2e5ee5c 11859 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
11860 && declspecs && TREE_VALUE (declspecs)
11861 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
33bd39a2 11862 error (" in instantiation of template `%T'",
db5ae43f
MS
11863 current_class_type);
11864
8d08fdba
MS
11865 type = error_mark_node;
11866 decl = NULL_TREE;
11867 }
11868 else
11869 {
11870 if (friendp)
11871 {
cb9a3ff8 11872 error ("`%s' is neither function nor member function; cannot be declared friend",
8d08fdba
MS
11873 IDENTIFIER_POINTER (declarator));
11874 friendp = 0;
11875 }
11876 decl = NULL_TREE;
11877 }
11878
11879 if (friendp)
11880 {
11881 /* Friends are treated specially. */
11882 if (ctype == current_class_type)
8251199e 11883 warning ("member functions are implicitly friends of their class");
ab04e34b
NS
11884 else
11885 {
11886 tree t = NULL_TREE;
11887 if (decl && DECL_NAME (decl))
11888 {
11889 if (template_class_depth (current_class_type) == 0)
11890 {
11891 decl
11892 = check_explicit_specialization
11893 (declarator, decl,
11894 template_count, 2 * (funcdef_flag != 0) + 4);
11895 if (decl == error_mark_node)
11896 return error_mark_node;
11897 }
11898
11899 t = do_friend (ctype, declarator, decl,
11900 last_function_parms, *attrlist,
11901 flags, quals, funcdef_flag);
11902 }
11903 if (t && funcdef_flag)
11904 return t;
11905
11906 return void_type_node;
11907 }
8d08fdba
MS
11908 }
11909
11910 /* Structure field. It may not be a function, except for C++ */
11911
11912 if (decl == NULL_TREE)
11913 {
8d08fdba
MS
11914 if (initialized)
11915 {
3ac3d9ea
MM
11916 if (!staticp)
11917 {
11918 /* An attempt is being made to initialize a non-static
11919 member. But, from [class.mem]:
68642fb6 11920
3ac3d9ea
MM
11921 4 A member-declarator can contain a
11922 constant-initializer only if it declares a static
11923 member (_class.static_) of integral or enumeration
68642fb6 11924 type, see _class.static.data_.
3ac3d9ea
MM
11925
11926 This used to be relatively common practice, but
11927 the rest of the compiler does not correctly
11928 handle the initialization unless the member is
11929 static so we make it static below. */
33bd39a2 11930 pedwarn ("ISO C++ forbids initialization of member `%D'",
3ac3d9ea 11931 declarator);
33bd39a2 11932 pedwarn ("making `%D' static", declarator);
3ac3d9ea
MM
11933 staticp = 1;
11934 }
11935
6ba89f8e
MM
11936 if (uses_template_parms (type))
11937 /* We'll check at instantiation time. */
11938 ;
11939 else if (check_static_variable_definition (declarator,
11940 type))
11941 /* If we just return the declaration, crashes
11942 will sometimes occur. We therefore return
72a93143
JM
11943 void_type_node, as if this was a friend
11944 declaration, to cause callers to completely
11945 ignore this declaration. */
6ba89f8e 11946 return void_type_node;
8d08fdba
MS
11947 }
11948
8ebeee52 11949 /* 9.2p13 [class.mem] */
a723baf1 11950 if (constructor_name_p (declarator, current_class_type)
e54930f9
JM
11951 /* The standard does not allow non-static data members
11952 here either, but we agreed at the 10/99 meeting
11953 to change that in TC 1 so that they are allowed in
11954 classes with no user-defined constructors. */
11955 && staticp)
33bd39a2 11956 pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
8ebeee52
JM
11957 declarator);
11958
3ac3d9ea 11959 if (staticp)
8d08fdba 11960 {
f18a14bc
MM
11961 /* C++ allows static class members. All other work
11962 for this is done by grokfield. */
4ce3d537 11963 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68
MS
11964 TREE_STATIC (decl) = 1;
11965 /* In class context, 'static' means public access. */
3ac3d9ea 11966 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8d08fdba
MS
11967 }
11968 else
11969 {
721c3b42 11970 decl = build_decl (FIELD_DECL, declarator, type);
2bf105ab 11971 DECL_NONADDRESSABLE_P (decl) = bitfield;
8d08fdba
MS
11972 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11973 {
11974 DECL_MUTABLE_P (decl) = 1;
11975 RIDBIT_RESET (RID_MUTABLE, specbits);
11976 }
11977 }
11978
11979 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11980 inlinep, friendp, raises != NULL_TREE);
11981 }
11982 }
11983 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11984 {
386b8a85 11985 tree original_name;
8d08fdba
MS
11986 int publicp = 0;
11987
11988 if (! declarator)
11989 return NULL_TREE;
11990
386b8a85
JM
11991 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11992 original_name = dname;
11993 else
11994 original_name = declarator;
11995
8926095f 11996 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 11997 error ("storage class `auto' invalid for function `%s'", name);
8926095f 11998 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 11999 error ("storage class `register' invalid for function `%s'", name);
7a1f3f5f
RH
12000 else if (RIDBIT_SETP (RID_THREAD, specbits))
12001 error ("storage class `__thread' invalid for function `%s'", name);
8d08fdba
MS
12002
12003 /* Function declaration not at top level.
12004 Storage classes other than `extern' are not allowed
12005 and `extern' makes no difference. */
a9aedbc2 12006 if (! toplevel_bindings_p ()
8926095f
MS
12007 && (RIDBIT_SETP (RID_STATIC, specbits)
12008 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 12009 && pedantic)
8926095f
MS
12010 {
12011 if (RIDBIT_SETP (RID_STATIC, specbits))
8251199e 12012 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8926095f 12013 else
8251199e 12014 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8926095f 12015 }
68642fb6 12016
8d08fdba
MS
12017 if (ctype == NULL_TREE)
12018 {
12019 if (virtualp)
12020 {
8251199e 12021 error ("virtual non-class function `%s'", name);
8d08fdba
MS
12022 virtualp = 0;
12023 }
8d08fdba
MS
12024 }
12025 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
14ae7e7d
JM
12026 type = build_cplus_method_type (ctype, TREE_TYPE (type),
12027 TYPE_ARG_TYPES (type));
8d08fdba 12028
eb66be0e 12029 /* Record presence of `static'. */
faae18ab 12030 publicp = (ctype != NULL_TREE
a9aedbc2 12031 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 12032 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 12033
386b8a85 12034 decl = grokfndecl (ctype, type, original_name, declarator,
7a8f9fa9 12035 virtualp, flags, quals, raises,
75650646 12036 1, friendp,
68642fb6 12037 publicp, inlinep, funcdef_flag,
2c73f9f5 12038 template_count, in_namespace);
f0e01782
MS
12039 if (decl == NULL_TREE)
12040 return NULL_TREE;
8d08fdba 12041
8d08fdba
MS
12042 if (staticp == 1)
12043 {
0e339752 12044 int invalid_static = 0;
8d08fdba
MS
12045
12046 /* Don't allow a static member function in a class, and forbid
12047 declaring main to be static. */
12048 if (TREE_CODE (type) == METHOD_TYPE)
12049 {
33bd39a2 12050 pedwarn ("cannot declare member function `%D' to have static linkage", decl);
0e339752 12051 invalid_static = 1;
8d08fdba 12052 }
8d08fdba
MS
12053 else if (current_function_decl)
12054 {
12055 /* FIXME need arm citation */
8251199e 12056 error ("cannot declare static function inside another function");
0e339752 12057 invalid_static = 1;
8d08fdba
MS
12058 }
12059
0e339752 12060 if (invalid_static)
8d08fdba
MS
12061 {
12062 staticp = 0;
12063 RIDBIT_RESET (RID_STATIC, specbits);
12064 }
12065 }
8d08fdba
MS
12066 }
12067 else
12068 {
12069 /* It's a variable. */
12070
12071 /* An uninitialized decl with `extern' is a reference. */
68642fb6
UD
12072 decl = grokvardecl (type, declarator, &specbits,
12073 initialized,
12074 (type_quals & TYPE_QUAL_CONST) != 0,
9e259dd1 12075 ctype ? ctype : in_namespace);
8d08fdba
MS
12076 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
12077 inlinep, friendp, raises != NULL_TREE);
12078
12079 if (ctype)
12080 {
f0e01782 12081 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
12082 if (staticp == 1)
12083 {
33bd39a2 12084 pedwarn ("`static' may not be used when defining (as opposed to declaring) a static data member");
8d08fdba
MS
12085 staticp = 0;
12086 RIDBIT_RESET (RID_STATIC, specbits);
12087 }
b7484fbe
MS
12088 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
12089 {
33bd39a2 12090 error ("static member `%D' declared `register'", decl);
b7484fbe
MS
12091 RIDBIT_RESET (RID_REGISTER, specbits);
12092 }
f30432d7 12093 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 12094 {
33bd39a2 12095 pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
f30432d7 12096 decl);
8d08fdba
MS
12097 RIDBIT_RESET (RID_EXTERN, specbits);
12098 }
12099 }
12100 }
12101
34fc957d 12102 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8d08fdba
MS
12103
12104 /* Record `register' declaration for warnings on &
12105 and in case doing stupid register allocation. */
12106
12107 if (RIDBIT_SETP (RID_REGISTER, specbits))
12108 DECL_REGISTER (decl) = 1;
12109
8926095f
MS
12110 if (RIDBIT_SETP (RID_EXTERN, specbits))
12111 DECL_THIS_EXTERN (decl) = 1;
12112
faae18ab
MS
12113 if (RIDBIT_SETP (RID_STATIC, specbits))
12114 DECL_THIS_STATIC (decl) = 1;
12115
adecb3f4
MM
12116 /* Record constancy and volatility. There's no need to do this
12117 when processing a template; we'll do this for the instantiated
12118 declaration based on the type of DECL. */
12119 if (!processing_template_decl)
12120 c_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
12121
12122 return decl;
12123 }
12124}
12125\f
12126/* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
12127 An empty exprlist is a parmlist. An exprlist which
12128 contains only identifiers at the global level
12129 is a parmlist. Otherwise, it is an exprlist. */
e92cc029 12130
8d08fdba
MS
12131int
12132parmlist_is_exprlist (exprs)
12133 tree exprs;
12134{
12135 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
12136 return 0;
12137
a9aedbc2 12138 if (toplevel_bindings_p ())
8d08fdba
MS
12139 {
12140 /* At the global level, if these are all identifiers,
12141 then it is a parmlist. */
12142 while (exprs)
12143 {
12144 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
12145 return 1;
12146 exprs = TREE_CHAIN (exprs);
12147 }
12148 return 0;
12149 }
12150 return 1;
12151}
12152
f181d4ae
MM
12153/* Subroutine of start_function. Ensure that each of the parameter
12154 types (as listed in PARMS) is complete, as is required for a
12155 function definition. */
e92cc029 12156
8d08fdba
MS
12157static void
12158require_complete_types_for_parms (parms)
12159 tree parms;
12160{
07c88314 12161 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 12162 {
5cce22b6
NS
12163 if (VOID_TYPE_P (TREE_TYPE (parms)))
12164 /* grokparms will have already issued an error */
12165 TREE_TYPE (parms) = error_mark_node;
12166 else if (complete_type_or_else (TREE_TYPE (parms), parms))
42f989ff 12167 layout_decl (parms, 0);
5cce22b6
NS
12168 else
12169 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
12170 }
12171}
12172
838dfd8a 12173/* Returns nonzero if T is a local variable. */
297e73d8 12174
46e8c075
MM
12175int
12176local_variable_p (t)
12177 tree t;
297e73d8 12178{
68642fb6 12179 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
12180 /* A VAR_DECL with a context that is a _TYPE is a static data
12181 member. */
12182 && !TYPE_P (CP_DECL_CONTEXT (t))
12183 /* Any other non-local variable must be at namespace scope. */
46e8c075 12184 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 12185 || (TREE_CODE (t) == PARM_DECL))
46e8c075 12186 return 1;
297e73d8 12187
46e8c075
MM
12188 return 0;
12189}
12190
838dfd8a 12191/* Returns nonzero if T is an automatic local variable or a label.
46e8c075
MM
12192 (These are the declarations that need to be remapped when the code
12193 containing them is duplicated.) */
12194
12195int
12196nonstatic_local_decl_p (t)
12197 tree t;
12198{
12199 return ((local_variable_p (t) && !TREE_STATIC (t))
12200 || TREE_CODE (t) == LABEL_DECL
12201 || TREE_CODE (t) == RESULT_DECL);
12202}
12203
12204/* Like local_variable_p, but suitable for use as a tree-walking
12205 function. */
12206
12207static tree
12208local_variable_p_walkfn (tp, walk_subtrees, data)
12209 tree *tp;
12210 int *walk_subtrees ATTRIBUTE_UNUSED;
12211 void *data ATTRIBUTE_UNUSED;
12212{
68642fb6 12213 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
46e8c075 12214 ? *tp : NULL_TREE);
297e73d8
MM
12215}
12216
12217/* Check that ARG, which is a default-argument expression for a
0e339752 12218 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
297e73d8
MM
12219 something goes wrong. DECL may also be a _TYPE node, rather than a
12220 DECL, if there is no DECL available. */
12221
12222tree
12223check_default_argument (decl, arg)
12224 tree decl;
12225 tree arg;
12226{
12227 tree var;
12228 tree decl_type;
12229
12230 if (TREE_CODE (arg) == DEFAULT_ARG)
12231 /* We get a DEFAULT_ARG when looking at an in-class declaration
12232 with a default argument. Ignore the argument for now; we'll
12233 deal with it after the class is complete. */
12234 return arg;
12235
12236 if (processing_template_decl || uses_template_parms (arg))
12237 /* We don't do anything checking until instantiation-time. Note
12238 that there may be uninstantiated arguments even for an
12239 instantiated function, since default arguments are not
12240 instantiated until they are needed. */
12241 return arg;
12242
12243 if (TYPE_P (decl))
12244 {
12245 decl_type = decl;
12246 decl = NULL_TREE;
12247 }
12248 else
12249 decl_type = TREE_TYPE (decl);
12250
68642fb6 12251 if (arg == error_mark_node
297e73d8
MM
12252 || decl == error_mark_node
12253 || TREE_TYPE (arg) == error_mark_node
12254 || decl_type == error_mark_node)
12255 /* Something already went wrong. There's no need to check
12256 further. */
12257 return error_mark_node;
12258
12259 /* [dcl.fct.default]
68642fb6 12260
297e73d8
MM
12261 A default argument expression is implicitly converted to the
12262 parameter type. */
12263 if (!TREE_TYPE (arg)
12264 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
12265 {
12266 if (decl)
33bd39a2 12267 error ("default argument for `%#D' has type `%T'",
297e73d8
MM
12268 decl, TREE_TYPE (arg));
12269 else
33bd39a2 12270 error ("default argument for parameter of type `%T' has type `%T'",
297e73d8
MM
12271 decl_type, TREE_TYPE (arg));
12272
12273 return error_mark_node;
12274 }
12275
12276 /* [dcl.fct.default]
12277
12278 Local variables shall not be used in default argument
68642fb6 12279 expressions.
297e73d8
MM
12280
12281 The keyword `this' shall not be used in a default argument of a
12282 member function. */
5362b086 12283 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
ee94fce6 12284 NULL);
297e73d8
MM
12285 if (var)
12286 {
33bd39a2 12287 error ("default argument `%E' uses local variable `%D'",
297e73d8
MM
12288 arg, var);
12289 return error_mark_node;
12290 }
12291
12292 /* All is well. */
12293 return arg;
12294}
12295
8d08fdba
MS
12296/* Decode the list of parameter types for a function type.
12297 Given the list of things declared inside the parens,
12298 return a list of types.
12299
5cce22b6
NS
12300 We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
12301 flag. If unset, we append void_list_node. A parmlist declared
12302 as `(void)' is accepted as the empty parmlist.
12303
12304 Also set last_function_parms to the chain of PARM_DECLs. */
8d08fdba
MS
12305
12306static tree
5cce22b6 12307grokparms (first_parm)
8d08fdba 12308 tree first_parm;
8d08fdba
MS
12309{
12310 tree result = NULL_TREE;
12311 tree decls = NULL_TREE;
5cce22b6
NS
12312 int ellipsis = !first_parm || PARMLIST_ELLIPSIS_P (first_parm);
12313 tree parm, chain;
12314 int any_error = 0;
8d08fdba 12315
5cce22b6
NS
12316 my_friendly_assert (!first_parm || TREE_PARMLIST (first_parm), 20001115);
12317
12318 for (parm = first_parm; parm != NULL_TREE; parm = chain)
8d08fdba 12319 {
0657c69c 12320 tree type = NULL_TREE;
98884b26 12321 tree decl = TREE_VALUE (parm);
5cce22b6 12322 tree init = TREE_PURPOSE (parm);
98884b26 12323 tree specs, attrs;
8d08fdba 12324
5cce22b6
NS
12325 chain = TREE_CHAIN (parm);
12326 /* @@ weak defense against parse errors. */
12327 if (TREE_CODE (decl) != VOID_TYPE
12328 && TREE_CODE (decl) != TREE_LIST)
8d08fdba 12329 {
5cce22b6
NS
12330 /* Give various messages as the need arises. */
12331 if (TREE_CODE (decl) == STRING_CST)
33bd39a2 12332 error ("invalid string constant `%E'", decl);
5cce22b6
NS
12333 else if (TREE_CODE (decl) == INTEGER_CST)
12334 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
12335 continue;
12336 }
8d08fdba 12337
5cce22b6
NS
12338 if (parm == void_list_node)
12339 break;
8d08fdba 12340
98884b26
JM
12341 split_specs_attrs (TREE_PURPOSE (decl), &specs, &attrs);
12342 decl = grokdeclarator (TREE_VALUE (decl), specs,
12343 PARM, init != NULL_TREE, &attrs);
5cce22b6
NS
12344 if (! decl || TREE_TYPE (decl) == error_mark_node)
12345 continue;
d363e7bf 12346
98884b26
JM
12347 if (attrs)
12348 cplus_decl_attributes (&decl, attrs, 0);
12349
5cce22b6
NS
12350 type = TREE_TYPE (decl);
12351 if (VOID_TYPE_P (type))
12352 {
12353 if (same_type_p (type, void_type_node)
12354 && !DECL_NAME (decl) && !result && !chain && !ellipsis)
12355 /* this is a parmlist of `(void)', which is ok. */
12356 break;
7a228918 12357 cxx_incomplete_type_error (decl, type);
0657c69c
MM
12358 /* It's not a good idea to actually create parameters of
12359 type `void'; other parts of the compiler assume that a
12360 void type terminates the parameter list. */
04f3dc2b 12361 type = error_mark_node;
0657c69c 12362 TREE_TYPE (decl) = error_mark_node;
5cce22b6 12363 }
8d08fdba 12364
d363e7bf 12365 if (type != error_mark_node)
04f3dc2b
MM
12366 {
12367 /* Top-level qualifiers on the parameters are
12368 ignored for function types. */
12369 type = TYPE_MAIN_VARIANT (type);
12370 if (TREE_CODE (type) == METHOD_TYPE)
12371 {
33bd39a2 12372 error ("parameter `%D' invalidly declared method type", decl);
04f3dc2b
MM
12373 type = build_pointer_type (type);
12374 TREE_TYPE (decl) = type;
12375 }
12376 else if (TREE_CODE (type) == OFFSET_TYPE)
12377 {
33bd39a2 12378 error ("parameter `%D' invalidly declared offset type", decl);
04f3dc2b
MM
12379 type = build_pointer_type (type);
12380 TREE_TYPE (decl) = type;
12381 }
12382 else if (abstract_virtuals_error (decl, type))
a1c65f9f 12383 any_error = 1; /* Seems like a good idea. */
04f3dc2b
MM
12384 else if (POINTER_TYPE_P (type))
12385 {
12386 /* [dcl.fct]/6, parameter types cannot contain pointers
12387 (references) to arrays of unknown bound. */
98979fe0
NS
12388 tree t = TREE_TYPE (type);
12389 int ptr = TYPE_PTR_P (type);
12390
12391 while (1)
12392 {
12393 if (TYPE_PTR_P (t))
12394 ptr = 1;
12395 else if (TREE_CODE (t) != ARRAY_TYPE)
12396 break;
12397 else if (!TYPE_DOMAIN (t))
12398 break;
12399 t = TREE_TYPE (t);
12400 }
04f3dc2b 12401 if (TREE_CODE (t) == ARRAY_TYPE)
33bd39a2 12402 error ("parameter `%D' includes %s to array of unknown bound `%T'",
98979fe0 12403 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
12404 }
12405
04f3dc2b
MM
12406 if (!any_error && init)
12407 init = check_default_argument (decl, init);
12408 else
12409 init = NULL_TREE;
12410 }
8d08fdba 12411
5cce22b6
NS
12412 TREE_CHAIN (decl) = decls;
12413 decls = decl;
0657c69c 12414 result = tree_cons (init, type, result);
8d08fdba 12415 }
5cce22b6
NS
12416 decls = nreverse (decls);
12417 result = nreverse (result);
12418 if (!ellipsis)
12419 result = chainon (result, void_list_node);
8d08fdba
MS
12420 last_function_parms = decls;
12421
8d08fdba
MS
12422 return result;
12423}
42976354 12424
8d08fdba 12425\f
271e6f02
NS
12426/* D is a constructor or overloaded `operator='.
12427
12428 Let T be the class in which D is declared. Then, this function
12429 returns:
12430
12431 -1 if D's is an ill-formed constructor or copy assignment operator
12432 whose first parameter is of type `T'.
12433 0 if D is not a copy constructor or copy assignment
12434 operator.
12435 1 if D is a copy constructor or copy assignment operator whose
12436 first parameter is a reference to const qualified T.
12437 2 if D is a copy constructor or copy assignment operator whose
12438 first parameter is a reference to non-const qualified T.
12439
12440 This function can be used as a predicate. Positive values indicate
838dfd8a 12441 a copy constructor and nonzero values indicate a copy assignment
4f1c5b7d
MM
12442 operator. */
12443
c11b6f21 12444int
271e6f02 12445copy_fn_p (d)
c11b6f21
MS
12446 tree d;
12447{
271e6f02
NS
12448 tree args;
12449 tree arg_type;
12450 int result = 1;
12451
12452 my_friendly_assert (DECL_FUNCTION_MEMBER_P (d), 20011208);
4f1c5b7d 12453
271e6f02
NS
12454 if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
12455 /* Instantiations of template member functions are never copy
12456 functions. Note that member functions of templated classes are
12457 represented as template functions internally, and we must
12458 accept those as copy functions. */
12459 return 0;
12460
12461 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12462 if (!args)
4f1c5b7d
MM
12463 return 0;
12464
271e6f02
NS
12465 arg_type = TREE_VALUE (args);
12466
12467 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12468 {
12469 /* Pass by value copy assignment operator. */
12470 result = -1;
12471 }
12472 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12473 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12474 {
12475 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12476 result = 2;
12477 }
12478 else
12479 return 0;
12480
12481 args = TREE_CHAIN (args);
12482
12483 if (args && args != void_list_node && !TREE_PURPOSE (args))
12484 /* There are more non-optional args. */
12485 return 0;
12486
12487 return result;
12488}
12489
12490/* Remember any special properties of member function DECL. */
12491
12492void grok_special_member_properties (decl)
12493 tree decl;
12494{
12495 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
12496 ; /* Not special. */
12497 else if (DECL_CONSTRUCTOR_P (decl))
12498 {
12499 int ctor = copy_fn_p (decl);
12500
12501 if (ctor > 0)
12502 {
12503 /* [class.copy]
12504
12505 A non-template constructor for class X is a copy
12506 constructor if its first parameter is of type X&, const
12507 X&, volatile X& or const volatile X&, and either there
12508 are no other parameters or else all other parameters have
12509 default arguments. */
12510 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
12511 if (ctor > 1)
12512 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
12513 }
12514 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12515 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
12516 }
12517 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
12518 {
12519 /* [class.copy]
12520
12521 A non-template assignment operator for class X is a copy
12522 assignment operator if its parameter is of type X, X&, const
12523 X&, volatile X& or const volatile X&. */
12524
12525 int assop = copy_fn_p (decl);
12526
12527 if (assop)
12528 {
12529 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
12530 if (assop != 1)
12531 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
12532 if (DECL_PURE_VIRTUAL_P (decl))
12533 TYPE_HAS_ABSTRACT_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
12534 }
12535 }
c11b6f21
MS
12536}
12537
271e6f02
NS
12538/* Check a constructor DECL has the correct form. Complains
12539 if the class has a constructor of the form X(X). */
e92cc029 12540
a0a33927 12541int
8d08fdba
MS
12542grok_ctor_properties (ctype, decl)
12543 tree ctype, decl;
12544{
271e6f02
NS
12545 int ctor_parm = copy_fn_p (decl);
12546
12547 if (ctor_parm < 0)
12548 {
12549 /* [class.copy]
12550
12551 A declaration of a constructor for a class X is ill-formed if
12552 its first parameter is of type (optionally cv-qualified) X
12553 and either there are no other parameters or else all other
12554 parameters have default arguments.
12555
12556 We *don't* complain about member template instantiations that
12557 have this form, though; they can occur as we try to decide
12558 what constructor to use during overload resolution. Since
12559 overload resolution will never prefer such a constructor to
12560 the non-template copy constructor (which is either explicitly
12561 or implicitly defined), there's no need to worry about their
12562 existence. Theoretically, they should never even be
12563 instantiated, but that's hard to forestall. */
33bd39a2 12564 error ("invalid constructor; you probably meant `%T (const %T&)'",
0b41abe6
JM
12565 ctype, ctype);
12566 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12567 return 0;
8d08fdba 12568 }
271e6f02 12569
a0a33927 12570 return 1;
8d08fdba
MS
12571}
12572
596ea4e5 12573/* An operator with this code is unary, but can also be binary. */
e92cc029 12574
a28e3c7f 12575static int
596ea4e5
AS
12576ambi_op_p (code)
12577 enum tree_code code;
8d08fdba 12578{
596ea4e5
AS
12579 return (code == INDIRECT_REF
12580 || code == ADDR_EXPR
12581 || code == CONVERT_EXPR
12582 || code == NEGATE_EXPR
12583 || code == PREINCREMENT_EXPR
12584 || code == PREDECREMENT_EXPR);
8d08fdba
MS
12585}
12586
12587/* An operator with this name can only be unary. */
e92cc029 12588
a28e3c7f 12589static int
596ea4e5
AS
12590unary_op_p (code)
12591 enum tree_code code;
8d08fdba 12592{
596ea4e5
AS
12593 return (code == TRUTH_NOT_EXPR
12594 || code == BIT_NOT_EXPR
12595 || code == COMPONENT_REF
12596 || code == TYPE_EXPR);
8d08fdba
MS
12597}
12598
12599/* Do a little sanity-checking on how they declared their operator. */
e92cc029 12600
5566b478 12601void
271e6f02 12602grok_op_properties (decl, friendp)
8d08fdba 12603 tree decl;
271e6f02 12604 int friendp;
8d08fdba
MS
12605{
12606 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 12607 tree argtype;
8d08fdba
MS
12608 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12609 tree name = DECL_NAME (decl);
596ea4e5
AS
12610 enum tree_code operator_code;
12611 int arity;
12612
12613 /* Count the number of arguments. */
12614 for (argtype = argtypes, arity = 0;
12615 argtype && argtype != void_list_node;
12616 argtype = TREE_CHAIN (argtype))
12617 ++arity;
8d08fdba 12618
a28e3c7f
MS
12619 if (current_class_type == NULL_TREE)
12620 friendp = 1;
8d08fdba 12621
596ea4e5
AS
12622 if (DECL_CONV_FN_P (decl))
12623 operator_code = TYPE_EXPR;
12624 else
12625 do
12626 {
0c918ce5
MM
12627#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
12628 if (ansi_opname (CODE) == name) \
12629 { \
75ac8dec 12630 operator_code = (CODE); \
0c918ce5
MM
12631 break; \
12632 } \
12633 else if (ansi_assopname (CODE) == name) \
12634 { \
75ac8dec 12635 operator_code = (CODE); \
0c918ce5
MM
12636 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
12637 break; \
596ea4e5
AS
12638 }
12639
12640#include "operators.def"
12641#undef DEF_OPERATOR
12642
a98facb0 12643 abort ();
596ea4e5
AS
12644 }
12645 while (0);
12646 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
12647 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12648
a28e3c7f
MS
12649 if (! friendp)
12650 {
596ea4e5
AS
12651 switch (operator_code)
12652 {
12653 case CALL_EXPR:
12654 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12655 break;
5362b086 12656
596ea4e5
AS
12657 case ARRAY_REF:
12658 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12659 break;
f181d4ae 12660
596ea4e5
AS
12661 case COMPONENT_REF:
12662 case MEMBER_REF:
12663 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12664 break;
5362b086 12665
596ea4e5
AS
12666 case NEW_EXPR:
12667 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12668 break;
5362b086 12669
596ea4e5
AS
12670 case DELETE_EXPR:
12671 TYPE_GETS_DELETE (current_class_type) |= 1;
12672 break;
5362b086 12673
596ea4e5
AS
12674 case VEC_NEW_EXPR:
12675 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12676 break;
5362b086 12677
596ea4e5
AS
12678 case VEC_DELETE_EXPR:
12679 TYPE_GETS_DELETE (current_class_type) |= 2;
12680 break;
12681
12682 default:
12683 break;
12684 }
12685 }
12686
12687 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8d08fdba 12688 {
8d08fdba
MS
12689 /* When the compiler encounters the definition of A::operator new, it
12690 doesn't look at the class declaration to find out if it's static. */
a28e3c7f 12691 if (methodp)
3afb32a4 12692 revert_static_member_fn (decl);
68642fb6 12693
36791f1e 12694 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 12695 }
596ea4e5 12696 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8d08fdba 12697 {
a28e3c7f 12698 if (methodp)
3afb32a4 12699 revert_static_member_fn (decl);
68642fb6 12700
36791f1e 12701 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba 12702 }
8d08fdba
MS
12703 else
12704 {
12705 /* An operator function must either be a non-static member function
12706 or have at least one parameter of a class, a reference to a class,
12707 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 12708 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 12709 {
596ea4e5
AS
12710 if (operator_code == TYPE_EXPR
12711 || operator_code == CALL_EXPR
12712 || operator_code == COMPONENT_REF
12713 || operator_code == ARRAY_REF
12714 || operator_code == NOP_EXPR)
33bd39a2 12715 error ("`%D' must be a nonstatic member function", decl);
8d08fdba
MS
12716 else
12717 {
12718 tree p = argtypes;
12719
700f8a87 12720 if (DECL_STATIC_FUNCTION_P (decl))
33bd39a2 12721 error ("`%D' must be either a non-static member function or a non-member function", decl);
700f8a87 12722
8d08fdba 12723 if (p)
a1774733 12724 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
8d08fdba
MS
12725 {
12726 tree arg = TREE_VALUE (p);
12727 if (TREE_CODE (arg) == REFERENCE_TYPE)
12728 arg = TREE_TYPE (arg);
12729
12730 /* This lets bad template code slip through. */
12731 if (IS_AGGR_TYPE (arg)
12732 || TREE_CODE (arg) == ENUMERAL_TYPE
73b0fce8 12733 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
a1281f45 12734 || TREE_CODE (arg) == BOUND_TEMPLATE_TEMPLATE_PARM)
8d08fdba
MS
12735 goto foundaggr;
12736 }
33bd39a2 12737 error
8251199e 12738 ("`%D' must have an argument of class or enumerated type",
8d08fdba
MS
12739 decl);
12740 foundaggr:
12741 ;
12742 }
12743 }
68642fb6 12744
596ea4e5 12745 if (operator_code == CALL_EXPR)
a1c65f9f 12746 return; /* No restrictions on args. */
8d08fdba 12747
9a3b49ac 12748 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
12749 {
12750 tree t = TREE_TYPE (name);
17708e90 12751 if (! friendp)
a0a33927
MS
12752 {
12753 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
d8e178a0 12754 const char *what = 0;
5362b086 12755
a0a33927
MS
12756 if (ref)
12757 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12758
17708e90
NS
12759 if (TREE_CODE (t) == VOID_TYPE)
12760 what = "void";
12761 else if (t == current_class_type)
a0a33927 12762 what = "the same type";
9a3b49ac 12763 /* Don't force t to be complete here. */
a0a33927 12764 else if (IS_AGGR_TYPE (t)
d0f062fb 12765 && COMPLETE_TYPE_P (t)
a0a33927
MS
12766 && DERIVED_FROM_P (t, current_class_type))
12767 what = "a base class";
12768
12769 if (what)
8251199e 12770 warning ("conversion to %s%s will never use a type conversion operator",
a0a33927
MS
12771 ref ? "a reference to " : "", what);
12772 }
12773 }
271e6f02 12774 if (operator_code == COND_EXPR)
8d08fdba
MS
12775 {
12776 /* 13.4.0.3 */
33bd39a2 12777 error ("ISO C++ prohibits overloading operator ?:");
68642fb6 12778 }
596ea4e5 12779 else if (ambi_op_p (operator_code))
8d08fdba 12780 {
596ea4e5
AS
12781 if (arity == 1)
12782 /* We pick the one-argument operator codes by default, so
12783 we don't have to change anything. */
12784 ;
12785 else if (arity == 2)
8d08fdba 12786 {
596ea4e5
AS
12787 /* If we thought this was a unary operator, we now know
12788 it to be a binary operator. */
12789 switch (operator_code)
12790 {
12791 case INDIRECT_REF:
12792 operator_code = MULT_EXPR;
12793 break;
12794
12795 case ADDR_EXPR:
12796 operator_code = BIT_AND_EXPR;
12797 break;
12798
12799 case CONVERT_EXPR:
12800 operator_code = PLUS_EXPR;
12801 break;
12802
12803 case NEGATE_EXPR:
12804 operator_code = MINUS_EXPR;
12805 break;
12806
12807 case PREINCREMENT_EXPR:
12808 operator_code = POSTINCREMENT_EXPR;
12809 break;
12810
12811 case PREDECREMENT_EXPR:
655dc6ee 12812 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
12813 break;
12814
12815 default:
a98facb0 12816 abort ();
596ea4e5
AS
12817 }
12818
12819 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12820
12821 if ((operator_code == POSTINCREMENT_EXPR
12822 || operator_code == POSTDECREMENT_EXPR)
5156628f 12823 && ! processing_template_decl
007e5fea 12824 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
12825 {
12826 if (methodp)
33bd39a2 12827 error ("postfix `%D' must take `int' as its argument",
8d08fdba
MS
12828 decl);
12829 else
33bd39a2 12830 error
8251199e
JM
12831 ("postfix `%D' must take `int' as its second argument",
12832 decl);
8d08fdba
MS
12833 }
12834 }
12835 else
12836 {
12837 if (methodp)
33bd39a2 12838 error ("`%D' must take either zero or one argument", decl);
8d08fdba 12839 else
33bd39a2 12840 error ("`%D' must take either one or two arguments", decl);
8d08fdba 12841 }
824b9a4c
MS
12842
12843 /* More Effective C++ rule 6. */
eb448459 12844 if (warn_ecpp
596ea4e5
AS
12845 && (operator_code == POSTINCREMENT_EXPR
12846 || operator_code == POSTDECREMENT_EXPR
12847 || operator_code == PREINCREMENT_EXPR
12848 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
12849 {
12850 tree arg = TREE_VALUE (argtypes);
12851 tree ret = TREE_TYPE (TREE_TYPE (decl));
12852 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12853 arg = TREE_TYPE (arg);
12854 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
12855 if (operator_code == PREINCREMENT_EXPR
12856 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
12857 {
12858 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
12859 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12860 arg))
33bd39a2 12861 warning ("prefix `%D' should return `%T'", decl,
824b9a4c
MS
12862 build_reference_type (arg));
12863 }
12864 else
12865 {
3bfdc719 12866 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
33bd39a2 12867 warning ("postfix `%D' should return `%T'", decl, arg);
824b9a4c
MS
12868 }
12869 }
8d08fdba 12870 }
596ea4e5 12871 else if (unary_op_p (operator_code))
8d08fdba 12872 {
596ea4e5 12873 if (arity != 1)
8d08fdba
MS
12874 {
12875 if (methodp)
33bd39a2 12876 error ("`%D' must take `void'", decl);
8d08fdba 12877 else
33bd39a2 12878 error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12879 }
12880 }
596ea4e5 12881 else /* if (binary_op_p (operator_code)) */
8d08fdba 12882 {
596ea4e5 12883 if (arity != 2)
8d08fdba
MS
12884 {
12885 if (methodp)
33bd39a2 12886 error ("`%D' must take exactly one argument", decl);
8d08fdba 12887 else
33bd39a2 12888 error ("`%D' must take exactly two arguments", decl);
8d08fdba 12889 }
824b9a4c
MS
12890
12891 /* More Effective C++ rule 7. */
eb448459 12892 if (warn_ecpp
596ea4e5
AS
12893 && (operator_code == TRUTH_ANDIF_EXPR
12894 || operator_code == TRUTH_ORIF_EXPR
12895 || operator_code == COMPOUND_EXPR))
33bd39a2 12896 warning ("user-defined `%D' always evaluates both arguments",
824b9a4c
MS
12897 decl);
12898 }
12899
12900 /* Effective C++ rule 23. */
eb448459 12901 if (warn_ecpp
596ea4e5 12902 && arity == 2
4bd7c270 12903 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5
AS
12904 && (operator_code == PLUS_EXPR
12905 || operator_code == MINUS_EXPR
12906 || operator_code == TRUNC_DIV_EXPR
4bd7c270
NS
12907 || operator_code == MULT_EXPR
12908 || operator_code == TRUNC_MOD_EXPR)
824b9a4c 12909 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
33bd39a2 12910 warning ("`%D' should return by value", decl);
8d08fdba 12911
271e6f02 12912 /* [over.oper]/8 */
34332678
CT
12913 for (; argtypes && argtypes != void_list_node;
12914 argtypes = TREE_CHAIN (argtypes))
12915 if (TREE_PURPOSE (argtypes))
12916 {
12917 TREE_PURPOSE (argtypes) = NULL_TREE;
596ea4e5
AS
12918 if (operator_code == POSTINCREMENT_EXPR
12919 || operator_code == POSTDECREMENT_EXPR)
34332678
CT
12920 {
12921 if (pedantic)
33bd39a2 12922 pedwarn ("`%D' cannot have default arguments", decl);
34332678
CT
12923 }
12924 else
33bd39a2 12925 error ("`%D' cannot have default arguments", decl);
34332678
CT
12926 }
12927
8d08fdba
MS
12928 }
12929}
12930\f
d8e178a0 12931static const char *
094fe153
JM
12932tag_name (code)
12933 enum tag_types code;
12934{
12935 switch (code)
12936 {
12937 case record_type:
12938 return "struct";
12939 case class_type:
12940 return "class";
12941 case union_type:
12942 return "union ";
12943 case enum_type:
12944 return "enum";
094fe153 12945 default:
a98facb0 12946 abort ();
094fe153
JM
12947 }
12948}
12949
8d08fdba
MS
12950/* Get the struct, enum or union (CODE says which) with tag NAME.
12951 Define the tag as a forward-reference if it is not defined.
12952
12953 C++: If a class derivation is given, process it here, and report
12954 an error if multiple derivation declarations are not identical.
12955
12956 If this is a definition, come in through xref_tag and only look in
12957 the current frame for the name (since C++ allows new names in any
12958 scope.) */
12959
8d08fdba 12960tree
88e5899c
MM
12961xref_tag (enum tag_types tag_code, tree name, tree attributes,
12962 bool globalize)
8d08fdba 12963{
8d08fdba 12964 enum tree_code code;
8d08fdba 12965 register tree ref, t;
e2500fed 12966 struct cp_binding_level *b = current_binding_level;
25aab5d0 12967 tree context = NULL_TREE;
dc8263bc 12968
8d08fdba
MS
12969 switch (tag_code)
12970 {
12971 case record_type:
12972 case class_type:
8d08fdba 12973 code = RECORD_TYPE;
8d08fdba
MS
12974 break;
12975 case union_type:
12976 code = UNION_TYPE;
8d08fdba
MS
12977 break;
12978 case enum_type:
12979 code = ENUMERAL_TYPE;
12980 break;
12981 default:
a98facb0 12982 abort ();
8d08fdba
MS
12983 }
12984
12985 /* If a cross reference is requested, look up the type
12986 already defined for this tag and return it. */
2f939d94 12987 if (TYPE_P (name))
be99da77
MS
12988 {
12989 t = name;
a80e4195 12990 name = TYPE_IDENTIFIER (t);
be99da77
MS
12991 }
12992 else
12993 t = IDENTIFIER_TYPE_VALUE (name);
61a127b3 12994
f2ae0c45
JM
12995 /* Warn about 'friend struct Inherited;' doing the wrong thing. */
12996 if (t && globalize && TREE_CODE (t) == TYPENAME_TYPE)
12997 {
12998 static int explained;
2b0cbc5d
NS
12999 tree shadowed;
13000
33bd39a2 13001 warning ("`%s %T' declares a new type at namespace scope",
2b0cbc5d
NS
13002 tag_name (tag_code), name);
13003 if (!explained++)
33bd39a2 13004 warning (" names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'",
2b0cbc5d
NS
13005 tag_name (tag_code),
13006 constructor_name (current_class_type),
13007 TYPE_IDENTIFIER (t));
13008
13009 /* We need to remove the class scope binding for the
a1c65f9f 13010 TYPENAME_TYPE as otherwise poplevel_class gets confused. */
2b0cbc5d
NS
13011 for (shadowed = b->class_shadowed;
13012 shadowed;
13013 shadowed = TREE_CHAIN (shadowed))
13014 if (TREE_TYPE (shadowed) == TYPE_NAME (t))
13015 {
13016 TREE_PURPOSE (shadowed) = NULL_TREE;
13017 break;
13018 }
f2ae0c45
JM
13019 }
13020
73b0fce8 13021 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
a1281f45 13022 && TREE_CODE (t) != BOUND_TEMPLATE_TEMPLATE_PARM)
a0a33927
MS
13023 t = NULL_TREE;
13024
8ccc31eb 13025 if (! globalize)
8d08fdba 13026 {
f3400fe2
JM
13027 /* If we know we are defining this tag, only look it up in
13028 this scope and don't try to find it as a type. */
13029 ref = lookup_tag (code, name, b, 1);
8d08fdba
MS
13030 }
13031 else
13032 {
25aab5d0 13033 if (t)
36a117a5 13034 {
4782bd5b
RS
13035 ref = follow_tag_typedef (t);
13036
25aab5d0
MM
13037 /* [dcl.type.elab] If the identifier resolves to a
13038 typedef-name or a template type-parameter, the
13039 elaborated-type-specifier is ill-formed. */
4782bd5b
RS
13040 if (!ref)
13041 {
13042 pedwarn ("using typedef-name `%D' after `%s'",
13043 TYPE_NAME (t), tag_name (tag_code));
13044 ref = t;
13045 }
25aab5d0 13046 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
33bd39a2 13047 error ("using template type parameter `%T' after `%s'",
4782bd5b 13048 t, tag_name (tag_code));
25aab5d0
MM
13049 }
13050 else
13051 ref = lookup_tag (code, name, b, 0);
68642fb6 13052
25aab5d0
MM
13053 if (! ref)
13054 {
13055 /* Try finding it as a type declaration. If that wins,
68642fb6 13056 use it. */
25aab5d0
MM
13057 ref = lookup_name (name, 1);
13058
13059 if (ref != NULL_TREE
13060 && processing_template_decl
13061 && DECL_CLASS_TEMPLATE_P (ref)
13062 && template_class_depth (current_class_type) == 0)
13063 /* Since GLOBALIZE is true, we're declaring a global
6757edfe 13064 template, so we want this type. */
17aec3eb 13065 ref = DECL_TEMPLATE_RESULT (ref);
6757edfe 13066
25aab5d0
MM
13067 if (ref && TREE_CODE (ref) == TYPE_DECL
13068 && TREE_CODE (TREE_TYPE (ref)) == code)
13069 ref = TREE_TYPE (ref);
13070 else
13071 ref = NULL_TREE;
13072 }
13073
68642fb6
UD
13074 if (ref && current_class_type
13075 && template_class_depth (current_class_type)
13076 && PROCESSING_REAL_TEMPLATE_DECL_P ())
25aab5d0 13077 {
838dfd8a 13078 /* Since GLOBALIZE is nonzero, we are not looking at a
25aab5d0
MM
13079 definition of this tag. Since, in addition, we are currently
13080 processing a (member) template declaration of a template
13081 class, we must be very careful; consider:
13082
13083 template <class X>
13084 struct S1
13085
13086 template <class U>
13087 struct S2
13088 { template <class V>
13089 friend struct S1; };
13090
13091 Here, the S2::S1 declaration should not be confused with the
13092 outer declaration. In particular, the inner version should
13093 have a template parameter of level 2, not level 1. This
13094 would be particularly important if the member declaration
13095 were instead:
13096
13097 template <class V = U> friend struct S1;
13098
13099 say, when we should tsubst into `U' when instantiating
13100 S2. On the other hand, when presented with:
13101
13102 template <class T>
13103 struct S1 {
13104 template <class U>
13105 struct S2 {};
13106 template <class U>
13107 friend struct S2;
13108 };
13109
13110 we must find the inner binding eventually. We
13111 accomplish this by making sure that the new type we
13112 create to represent this declaration has the right
13113 TYPE_CONTEXT. */
13114 context = TYPE_CONTEXT (ref);
13115 ref = NULL_TREE;
8d08fdba
MS
13116 }
13117 }
13118
8d08fdba
MS
13119 if (! ref)
13120 {
13121 /* If no such tag is yet defined, create a forward-reference node
13122 and record it as the "definition".
13123 When a real declaration of this type is found,
13124 the forward-reference will be altered into a real type. */
8d08fdba
MS
13125 if (code == ENUMERAL_TYPE)
13126 {
33bd39a2 13127 error ("use of enum `%#D' without previous declaration", name);
fc378698 13128
8d08fdba
MS
13129 ref = make_node (ENUMERAL_TYPE);
13130
13131 /* Give the type a default layout like unsigned int
13132 to avoid crashing if it does not get defined. */
13133 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
13134 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
11cf4d18 13135 TYPE_USER_ALIGN (ref) = 0;
8d08fdba
MS
13136 TREE_UNSIGNED (ref) = 1;
13137 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
13138 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
13139 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
13140
13141 /* Enable us to recognize when a type is created in class context.
13142 To do nested classes correctly, this should probably be cleared
13143 out when we leave this classes scope. Currently this in only
13144 done in `start_enum'. */
13145
13146 pushtag (name, ref, globalize);
8d08fdba 13147 }
8d08fdba
MS
13148 else
13149 {
e2500fed 13150 struct cp_binding_level *old_b = class_binding_level;
8d08fdba 13151
33848bb0 13152 ref = make_aggr_type (code);
25aab5d0 13153 TYPE_CONTEXT (ref) = context;
8d08fdba 13154
8d08fdba
MS
13155#ifdef NONNESTED_CLASSES
13156 /* Class types don't nest the way enums do. */
e2500fed 13157 class_binding_level = (struct cp_binding_level *)0;
8d08fdba
MS
13158#endif
13159 pushtag (name, ref, globalize);
13160 class_binding_level = old_b;
8d08fdba
MS
13161 }
13162 }
13163 else
13164 {
7fe6899f 13165 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
6757edfe 13166 redeclare_class_template (ref, current_template_parms);
8d08fdba
MS
13167 }
13168
a588fe25 13169 TYPE_ATTRIBUTES (ref) = attributes;
dc8263bc 13170
8d08fdba
MS
13171 return ref;
13172}
8ccc31eb 13173
fc378698
MS
13174tree
13175xref_tag_from_type (old, id, globalize)
13176 tree old, id;
13177 int globalize;
13178{
88e5899c 13179 enum tag_types tag_kind;
fc378698
MS
13180
13181 if (TREE_CODE (old) == RECORD_TYPE)
88e5899c 13182 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
fc378698 13183 else
88e5899c 13184 tag_kind = union_type;
fc378698
MS
13185
13186 if (id == NULL_TREE)
13187 id = TYPE_IDENTIFIER (old);
13188
88e5899c 13189 return xref_tag (tag_kind, id, /*attributes=*/NULL_TREE, globalize);
fc378698
MS
13190}
13191
3fd71a52
MM
13192/* REF is a type (named NAME), for which we have just seen some
13193 baseclasses. BINFO is a list of those baseclasses; the
13194 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
13195 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
13196 struct, or union. */
13197
8ccc31eb 13198void
da15dae6 13199xref_basetypes (ref, binfo)
9780c24f 13200 tree ref;
8ccc31eb
MS
13201 tree binfo;
13202{
13203 /* In the declaration `A : X, Y, ... Z' we mark all the types
13204 (A, X, Y, ..., Z) so we can check for duplicates. */
13205 tree binfos;
d6479fe7
MM
13206 tree base;
13207
8ccc31eb 13208 int i, len;
591382c4 13209 enum tag_types tag_code;
a5d7c4a3 13210
da15dae6 13211 if (TREE_CODE (ref) == UNION_TYPE)
8ccc31eb 13212 {
33bd39a2 13213 error ("derived union `%T' invalid", ref);
8ccc31eb
MS
13214 return;
13215 }
13216
da15dae6
MM
13217 tag_code = (CLASSTYPE_DECLARED_CLASS (ref) ? class_type : record_type);
13218
8ccc31eb 13219 len = list_length (binfo);
8ccc31eb 13220
d6479fe7
MM
13221 /* First, make sure that any templates in base-classes are
13222 instantiated. This ensures that if we call ourselves recursively
13223 we do not get confused about which classes are marked and which
13224 are not. */
13225 for (base = binfo; base; base = TREE_CHAIN (base))
13226 complete_type (TREE_VALUE (base));
13227
8ccc31eb
MS
13228 SET_CLASSTYPE_MARKED (ref);
13229 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
13230
13231 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
13232 {
13233 /* The base of a derived struct is public by default. */
13234 int via_public
be99da77
MS
13235 = (TREE_PURPOSE (binfo) == access_public_node
13236 || TREE_PURPOSE (binfo) == access_public_virtual_node
8ccc31eb 13237 || (tag_code != class_type
be99da77
MS
13238 && (TREE_PURPOSE (binfo) == access_default_node
13239 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
d8b55a76
JM
13240 int via_protected
13241 = (TREE_PURPOSE (binfo) == access_protected_node
13242 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
8ccc31eb 13243 int via_virtual
be99da77 13244 = (TREE_PURPOSE (binfo) == access_private_virtual_node
d8b55a76 13245 || TREE_PURPOSE (binfo) == access_protected_virtual_node
be99da77
MS
13246 || TREE_PURPOSE (binfo) == access_public_virtual_node
13247 || TREE_PURPOSE (binfo) == access_default_virtual_node);
13248 tree basetype = TREE_VALUE (binfo);
8ccc31eb
MS
13249 tree base_binfo;
13250
8ccc31eb
MS
13251 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
13252 basetype = TREE_TYPE (basetype);
5566b478
MS
13253 if (!basetype
13254 || (TREE_CODE (basetype) != RECORD_TYPE
a80e4195 13255 && TREE_CODE (basetype) != TYPENAME_TYPE
73b0fce8 13256 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
a1281f45 13257 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
8ccc31eb 13258 {
33bd39a2 13259 error ("base type `%T' fails to be a struct or class type",
8ccc31eb
MS
13260 TREE_VALUE (binfo));
13261 continue;
13262 }
2b9dc906 13263
8adf5b5e
JM
13264 /* This code replaces similar code in layout_basetypes.
13265 We put the complete_type first for implicit `typename'. */
d0f062fb 13266 if (!COMPLETE_TYPE_P (basetype)
2b9dc906 13267 && ! (current_template_parms && uses_template_parms (basetype)))
8ccc31eb 13268 {
33bd39a2 13269 error ("base class `%T' has incomplete type", basetype);
8ccc31eb
MS
13270 continue;
13271 }
8ccc31eb
MS
13272 else
13273 {
13274 if (CLASSTYPE_MARKED (basetype))
13275 {
13276 if (basetype == ref)
33bd39a2 13277 error ("recursive type `%T' undefined", basetype);
8ccc31eb 13278 else
33bd39a2 13279 error ("duplicate base type `%T' invalid", basetype);
8ccc31eb
MS
13280 continue;
13281 }
13282
eff71ab0 13283 if (TYPE_FOR_JAVA (basetype)
46ccf50a 13284 && (current_lang_depth () == 0))
eff71ab0
PB
13285 TYPE_FOR_JAVA (ref) = 1;
13286
8ccc31eb
MS
13287 /* Note that the BINFO records which describe individual
13288 inheritances are *not* shared in the lattice! They
13289 cannot be shared because a given baseclass may be
13290 inherited with different `accessibility' by different
13291 derived classes. (Each BINFO record describing an
13292 individual inheritance contains flags which say what
13293 the `accessibility' of that particular inheritance is.) */
68642fb6
UD
13294
13295 base_binfo
fed3cef0 13296 = make_binfo (size_zero_node, basetype,
7ddedda4
MM
13297 CLASS_TYPE_P (basetype)
13298 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
13299 CLASS_TYPE_P (basetype)
13300 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
68642fb6 13301
8ccc31eb
MS
13302 TREE_VEC_ELT (binfos, i) = base_binfo;
13303 TREE_VIA_PUBLIC (base_binfo) = via_public;
13304 TREE_VIA_PROTECTED (base_binfo) = via_protected;
13305 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
13306 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
13307
dfbcd65a
JM
13308 /* We need to unshare the binfos now so that lookups during class
13309 definition work. */
13310 unshare_base_binfos (base_binfo);
13311
8ccc31eb 13312 SET_CLASSTYPE_MARKED (basetype);
9e9ff709 13313
8ccc31eb
MS
13314 /* We are free to modify these bits because they are meaningless
13315 at top level, and BASETYPE is a top-level type. */
13316 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
13317 {
13318 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
4c6b7393
MM
13319 /* Converting to a virtual base class requires looking
13320 up the offset of the virtual base. */
13321 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
8ccc31eb
MS
13322 }
13323
7ddedda4
MM
13324 if (CLASS_TYPE_P (basetype))
13325 {
5362b086 13326 TYPE_HAS_NEW_OPERATOR (ref)
834c6dff 13327 |= TYPE_HAS_NEW_OPERATOR (basetype);
5362b086 13328 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
834c6dff 13329 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
7ddedda4 13330 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
4c6b7393 13331 /* If the base-class uses multiple inheritance, so do we. */
68642fb6 13332 TYPE_USES_MULTIPLE_INHERITANCE (ref)
4c6b7393
MM
13333 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
13334 /* Likewise, if converting to a base of the base may require
13335 code, then we may need to generate code to convert to a
13336 base as well. */
68642fb6 13337 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
4c6b7393 13338 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
7ddedda4
MM
13339 }
13340
8ccc31eb
MS
13341 i += 1;
13342 }
13343 }
13344 if (i)
13345 TREE_VEC_LENGTH (binfos) = i;
13346 else
13347 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
13348
13349 if (i > 1)
7ddedda4 13350 {
4c6b7393
MM
13351 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
13352 /* If there is more than one non-empty they cannot be at the same
13353 address. */
13354 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
7ddedda4
MM
13355 }
13356
8ccc31eb
MS
13357 /* Unmark all the types. */
13358 while (--i >= 0)
13359 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
13360 CLEAR_CLASSTYPE_MARKED (ref);
13361
70c532b5
MM
13362 /* Now that we know all the base-classes, set up the list of virtual
13363 bases. */
23381155 13364 get_vbase_types (ref);
8ccc31eb 13365}
68642fb6 13366
8d08fdba 13367\f
8d08fdba
MS
13368/* Begin compiling the definition of an enumeration type.
13369 NAME is its name (or null if anonymous).
13370 Returns the type object, as yet incomplete.
13371 Also records info about it so that build_enumerator
13372 may be used to declare the individual values as they are read. */
13373
13374tree
13375start_enum (name)
13376 tree name;
13377{
13378 register tree enumtype = NULL_TREE;
e2500fed 13379 struct cp_binding_level *b = current_binding_level;
8d08fdba
MS
13380
13381 /* If this is the real definition for a previous forward reference,
13382 fill in the contents in the same object that used to be the
13383 forward reference. */
13384
13385 if (name != NULL_TREE)
13386 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
13387
13388 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 13389 {
33bd39a2 13390 error ("multiple definition of `%#T'", enumtype);
30ff8252 13391 cp_error_at ("previous definition here", enumtype);
58595203
MM
13392 /* Clear out TYPE_VALUES, and start again. */
13393 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 13394 }
8d08fdba
MS
13395 else
13396 {
13397 enumtype = make_node (ENUMERAL_TYPE);
13398 pushtag (name, enumtype, 0);
13399 }
13400
8d08fdba
MS
13401 return enumtype;
13402}
13403
13404/* After processing and defining all the values of an enumeration type,
13405 install their decls in the enumeration type and finish it off.
968b956a 13406 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 13407
968b956a 13408void
219670f1 13409finish_enum (enumtype)
dbfe2124 13410 tree enumtype;
8d08fdba 13411{
968b956a
MM
13412 tree pair;
13413 tree minnode;
13414 tree maxnode;
13415 tree t;
13416 bool unsignedp;
13417 int lowprec;
13418 int highprec;
13419 int precision;
13420
13421 /* We built up the VALUES in reverse order. */
13422 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
13423
13424 /* [dcl.enum]
13425
13426 Following the closing brace of an enum-specifier, each
13427 enumerator has the type of its enumeration. Prior to the
13428 closing brace, the type of each enumerator is the type of
13429 its initializing value. */
13430 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
13431 TREE_TYPE (TREE_VALUE (pair)) = enumtype;
13432
27631dae 13433 /* For an enum defined in a template, all further processing is
968b956a
MM
13434 postponed until the template is instantiated. */
13435 if (processing_template_decl)
13436 {
5f261ba9 13437 if (at_function_scope_p ())
968b956a 13438 add_stmt (build_min (TAG_DEFN, enumtype));
968b956a
MM
13439 return;
13440 }
13441
13442 /* Figure out what the minimum and maximum values of the enumerators
13443 are. */
13444 if (TYPE_VALUES (enumtype))
8d08fdba 13445 {
968b956a 13446 minnode = maxnode = NULL_TREE;
5566b478 13447
968b956a
MM
13448 for (pair = TYPE_VALUES (enumtype);
13449 pair;
13450 pair = TREE_CHAIN (pair))
8d08fdba 13451 {
ed44da02
MM
13452 tree value;
13453
968b956a 13454 value = DECL_INITIAL (TREE_VALUE (pair));
ed44da02 13455
968b956a
MM
13456 if (!minnode)
13457 minnode = maxnode = value;
13458 else if (tree_int_cst_lt (maxnode, value))
13459 maxnode = value;
13460 else if (tree_int_cst_lt (value, minnode))
13461 minnode = value;
8d08fdba
MS
13462 }
13463 }
f376e137 13464 else
968b956a
MM
13465 minnode = maxnode = integer_zero_node;
13466
13467 /* Compute the number of bits require to represent all values of the
13468 enumeration. We must do this before the type of MINNODE and
13469 MAXNODE are transformed, since min_precision relies on the
13470 TREE_TYPE of the value it is passed. */
13471 unsignedp = tree_int_cst_sgn (minnode) >= 0;
13472 lowprec = min_precision (minnode, unsignedp);
13473 highprec = min_precision (maxnode, unsignedp);
13474 precision = MAX (lowprec, highprec);
13475
13476 /* Set the TREE_TYPE for the values as well. That's so that when we
13477 call decl_constant_value we get an entity of the right type (but
13478 with the constant value). In addition, transform the TYPE_VALUES
13479 list to contain the values, rather than the CONST_DECLs for them. */
13480 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
13481 {
13482 tree value = DECL_INITIAL (TREE_VALUE (pair));
13483
13484 TREE_TYPE (value) = enumtype;
13485 TREE_VALUE (pair) = value;
13486 }
13487
13488 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
13489 TYPE_SIZE (enumtype) = NULL_TREE;
13490 TYPE_PRECISION (enumtype) = precision;
13491 if (unsignedp)
13492 fixup_unsigned_type (enumtype);
cbf882af 13493 else
968b956a 13494 fixup_signed_type (enumtype);
8d08fdba 13495
219670f1
BE
13496 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13497 /* Use the width of the narrowest normal C type which is wide
13498 enough. */
b0c48229 13499 TYPE_PRECISION (enumtype) = TYPE_PRECISION (c_common_type_for_size
219670f1 13500 (precision, 1));
968b956a
MM
13501 else
13502 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
68642fb6 13503
968b956a
MM
13504 TYPE_SIZE (enumtype) = NULL_TREE;
13505 layout_type (enumtype);
8d08fdba 13506
968b956a
MM
13507 /* Fix up all variant types of this enum type. */
13508 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13509 {
13510 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13511 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
13512 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
13513 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
13514 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
13515 TYPE_MODE (t) = TYPE_MODE (enumtype);
13516 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
13517 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
13518 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
13519 TREE_UNSIGNED (t) = TREE_UNSIGNED (enumtype);
cbf882af
MM
13520 }
13521
968b956a
MM
13522 /* Finish debugging output for this type. */
13523 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
13524}
13525
079e1098 13526/* Build and install a CONST_DECL for an enumeration constant of the
58595203 13527 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
13528 Assignment of sequential values by default is handled here. */
13529
58595203
MM
13530void
13531build_enumerator (name, value, enumtype)
079e1098
MM
13532 tree name;
13533 tree value;
58595203 13534 tree enumtype;
8d08fdba 13535{
58595203 13536 tree decl;
e8bd800e 13537 tree context;
58595203
MM
13538 tree type;
13539 tree values;
8d08fdba
MS
13540
13541 /* Remove no-op casts from the value. */
13542 if (value)
13543 STRIP_TYPE_NOPS (value);
13544
58595203
MM
13545 if (! processing_template_decl)
13546 {
13547 /* Validate and default VALUE. */
13548 if (value != NULL_TREE)
13549 {
fc611ce0 13550 value = decl_constant_value (value);
58595203
MM
13551
13552 if (TREE_CODE (value) == INTEGER_CST)
13553 {
13554 value = default_conversion (value);
13555 constant_expression_warning (value);
13556 }
13557 else
13558 {
33bd39a2 13559 error ("enumerator value for `%D' not integer constant", name);
58595203
MM
13560 value = NULL_TREE;
13561 }
13562 }
13563
13564 /* Default based on previous value. */
13565 if (value == NULL_TREE && ! processing_template_decl)
13566 {
13567 tree prev_value;
13568
13569 if (TYPE_VALUES (enumtype))
13570 {
a1c65f9f 13571 /* The next value is the previous value ... */
58595203
MM
13572 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13573 /* ... plus one. */
ab76ca54
MM
13574 value = cp_build_binary_op (PLUS_EXPR,
13575 prev_value,
13576 integer_one_node);
68642fb6 13577
58595203 13578 if (tree_int_cst_lt (value, prev_value))
33bd39a2 13579 error ("overflow in enumeration values at `%D'", name);
58595203
MM
13580 }
13581 else
13582 value = integer_zero_node;
13583 }
13584
13585 /* Remove no-op casts from the value. */
13586 if (value)
13587 STRIP_TYPE_NOPS (value);
013bc8af 13588#if 0
58595203
MM
13589 /* To fix MAX_VAL enum consts. (bkoz) */
13590 TREE_TYPE (value) = integer_type_node;
013bc8af 13591#endif
58595203 13592 }
8d08fdba 13593
58595203
MM
13594 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13595 Even in other cases, we will later (in finish_enum) be setting
13596 the type of VALUE. But, we don't need to make a copy if this
13597 VALUE is one of the enumeration constants for this same
13598 enumeration type. */
13599 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13600 if (TREE_VALUE (values) == value)
13601 break;
13602 /* If we didn't break out of the loop, then we do need a copy. */
13603 if (!values && value)
13604 value = copy_node (value);
ed44da02 13605
8d08fdba 13606 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
13607 context = current_scope ();
13608
13609 /* Build the actual enumeration constant. Note that the enumeration
13610 constants have the type of their initializers until the
13611 enumeration is complete:
13612
13613 [ dcl.enum ]
13614
13615 Following the closing brace of an enum-specifier, each enumer-
13616 ator has the type of its enumeration. Prior to the closing
13617 brace, the type of each enumerator is the type of its
13618 initializing value.
13619
13620 In finish_enum we will reset the type. Of course, if we're
a1c65f9f 13621 processing a template, there may be no value. */
58595203
MM
13622 type = value ? TREE_TYPE (value) : NULL_TREE;
13623
13624 if (context && context == current_class_type)
13625 /* This enum declaration is local to the class. We need the full
8f17b5c5 13626 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
13627 decl = build_lang_decl (CONST_DECL, name, type);
13628 else
13629 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 13630 a function could mean local to a class method. */
58595203 13631 decl = build_decl (CONST_DECL, name, type);
e8bd800e 13632
58595203
MM
13633 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13634 DECL_INITIAL (decl) = value;
13635 TREE_READONLY (decl) = 1;
e8bd800e 13636
58595203
MM
13637 if (context && context == current_class_type)
13638 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
8f032717
MM
13639 on the TYPE_FIELDS list for `S'. (That's so that you can say
13640 things like `S::i' later.) */
58595203
MM
13641 finish_member_declaration (decl);
13642 else
9780c24f 13643 pushdecl (decl);
58595203
MM
13644
13645 /* Add this enumeration constant to the list for this type. */
13646 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
13647}
13648
8d08fdba 13649\f
a8f73d4b
MM
13650/* We're defining DECL. Make sure that it's type is OK. */
13651
13652static void
f444e36b 13653check_function_type (decl, current_function_parms)
a8f73d4b 13654 tree decl;
f444e36b 13655 tree current_function_parms;
a8f73d4b
MM
13656{
13657 tree fntype = TREE_TYPE (decl);
d0f062fb 13658 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
13659
13660 /* In a function definition, arg types must be complete. */
13661 require_complete_types_for_parms (current_function_parms);
13662
d0f062fb 13663 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b 13664 {
33bd39a2 13665 error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
a8f73d4b
MM
13666
13667 /* Make it return void instead, but don't change the
13668 type of the DECL_RESULT, in case we have a named return value. */
13669 if (TREE_CODE (fntype) == METHOD_TYPE)
13670 {
13671 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13672 TREE_TYPE (decl)
13673 = build_cplus_method_type (ctype,
13674 void_type_node,
13675 FUNCTION_ARG_CHAIN (decl));
13676 }
13677 else
13678 TREE_TYPE (decl)
13679 = build_function_type (void_type_node,
13680 TYPE_ARG_TYPES (TREE_TYPE (decl)));
68642fb6 13681 TREE_TYPE (decl)
a8f73d4b
MM
13682 = build_exception_variant (fntype,
13683 TYPE_RAISES_EXCEPTIONS (fntype));
13684 }
13685 else
13686 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13687}
13688
8d08fdba
MS
13689/* Create the FUNCTION_DECL for a function definition.
13690 DECLSPECS and DECLARATOR are the parts of the declaration;
13691 they describe the function's name and the type it returns,
13692 but twisted together in a fashion that parallels the syntax of C.
13693
a8f73d4b
MM
13694 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13695 DECLARATOR is really the DECL for the function we are about to
13696 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 13697 indicating that the function is an inline defined in-class.
68642fb6 13698
8d08fdba
MS
13699 This function creates a binding context for the function body
13700 as well as setting up the FUNCTION_DECL in current_function_decl.
13701
13702 Returns 1 on success. If the DECLARATOR is not suitable for a function
13703 (it defines a datum instead), we return 0, which tells
13704 yyparse to report a parse error.
13705
13706 For C++, we must first check whether that datum makes any sense.
13707 For example, "class A local_a(1,2);" means that variable local_a
13708 is an aggregate of type A, which should have a constructor
87e3dbc9 13709 applied to it with the argument list [1, 2]. */
8d08fdba
MS
13710
13711int
a8f73d4b 13712start_function (declspecs, declarator, attrs, flags)
c11b6f21 13713 tree declspecs, declarator, attrs;
a8f73d4b 13714 int flags;
8d08fdba 13715{
5566b478 13716 tree decl1;
8d08fdba
MS
13717 tree ctype = NULL_TREE;
13718 tree fntype;
13719 tree restype;
8d08fdba 13720 int doing_friend = 0;
e2500fed 13721 struct cp_binding_level *bl;
f444e36b 13722 tree current_function_parms;
8d08fdba 13723
8d08fdba 13724 /* Sanity check. */
a1774733 13725 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
8d08fdba
MS
13726 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13727
e92cc029 13728 /* This should only be done once on the top most decl. */
594bb0e7 13729 if (have_extern_spec)
8d08fdba 13730 {
1f8f4a0b 13731 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
594bb0e7 13732 have_extern_spec = false;
8d08fdba
MS
13733 }
13734
a8f73d4b 13735 if (flags & SF_PRE_PARSED)
8d08fdba
MS
13736 {
13737 decl1 = declarator;
13738
8d08fdba
MS
13739 fntype = TREE_TYPE (decl1);
13740 if (TREE_CODE (fntype) == METHOD_TYPE)
13741 ctype = TYPE_METHOD_BASETYPE (fntype);
13742
cab1f180
ML
13743 /* ISO C++ 11.4/5. A friend function defined in a class is in
13744 the (lexical) scope of the class in which it is defined. */
8d08fdba
MS
13745 if (!ctype && DECL_FRIEND_P (decl1))
13746 {
4f1c5b7d 13747 ctype = DECL_FRIEND_CONTEXT (decl1);
8d08fdba
MS
13748
13749 /* CTYPE could be null here if we're dealing with a template;
13750 for example, `inline friend float foo()' inside a template
13751 will have no CTYPE set. */
13752 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13753 ctype = NULL_TREE;
13754 else
13755 doing_friend = 1;
13756 }
13757
5566b478 13758 last_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba
MS
13759 }
13760 else
13761 {
91d231cb 13762 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL);
8d08fdba
MS
13763 /* If the declarator is not suitable for a function definition,
13764 cause a syntax error. */
e89a6075
JM
13765 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13766 return 0;
13767
13768 cplus_decl_attributes (&decl1, attrs, 0);
8d08fdba 13769
ecb0eece
RH
13770 /* If #pragma weak was used, mark the decl weak now. */
13771 if (current_binding_level == global_binding_level)
13772 maybe_apply_pragma_weak (decl1);
13773
8d08fdba
MS
13774 fntype = TREE_TYPE (decl1);
13775
13776 restype = TREE_TYPE (fntype);
7ddedda4 13777 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
8d08fdba 13778 {
33bd39a2 13779 error ("semicolon missing after declaration of `%#T'", restype);
051e6fd7 13780 shadow_tag (build_tree_list (NULL_TREE, restype));
8d08fdba
MS
13781 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13782 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13783 fntype = build_function_type (integer_type_node,
13784 TYPE_ARG_TYPES (fntype));
13785 else
13786 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13787 integer_type_node,
13788 TYPE_ARG_TYPES (fntype));
13789 TREE_TYPE (decl1) = fntype;
13790 }
13791
13792 if (TREE_CODE (fntype) == METHOD_TYPE)
13793 ctype = TYPE_METHOD_BASETYPE (fntype);
35680744 13794 else if (DECL_MAIN_P (decl1))
8d08fdba
MS
13795 {
13796 /* If this doesn't return integer_type, complain. */
13797 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13798 {
a28e3c7f 13799 if (pedantic || warn_return_type)
8251199e 13800 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
13801 TREE_TYPE (decl1) = fntype = default_function_type;
13802 }
8d08fdba
MS
13803 }
13804 }
68642fb6 13805
97055d5c
AO
13806 if (DECL_DECLARED_INLINE_P (decl1)
13807 && lookup_attribute ("noinline", attrs))
13808 warning_with_decl (decl1,
13809 "inline function `%s' given attribute noinline");
13810
5f6eeeb3
NS
13811 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13812 /* This is a constructor, we must ensure that any default args
13813 introduced by this definition are propagated to the clones
13814 now. The clones are used directly in overload resolution. */
13815 adjust_clone_args (decl1);
13816
b35d4555
MM
13817 /* Sometimes we don't notice that a function is a static member, and
13818 build a METHOD_TYPE for it. Fix that up now. */
13819 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13820 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13821 {
3afb32a4 13822 revert_static_member_fn (decl1);
b35d4555
MM
13823 last_function_parms = TREE_CHAIN (last_function_parms);
13824 ctype = NULL_TREE;
13825 }
8d08fdba
MS
13826
13827 /* Warn if function was previously implicitly declared
13828 (but not if we warned then). */
13829 if (! warn_implicit
13830 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
8251199e 13831 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
8d08fdba 13832
f181d4ae
MM
13833 /* Set up current_class_type, and enter the scope of the class, if
13834 appropriate. */
13835 if (ctype)
13836 push_nested_class (ctype, 1);
13837 else if (DECL_STATIC_FUNCTION_P (decl1))
13838 push_nested_class (DECL_CONTEXT (decl1), 2);
13839
13840 /* Now that we have entered the scope of the class, we must restore
13841 the bindings for any template parameters surrounding DECL1, if it
13842 is an inline member template. (Order is important; consider the
13843 case where a template parameter has the same name as a field of
13844 the class.) It is not until after this point that
13845 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 13846 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
13847 maybe_begin_member_template_processing (decl1);
13848
56cb9733 13849 /* Effective C++ rule 15. */
9188c363 13850 if (warn_ecpp
596ea4e5 13851 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 13852 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
33bd39a2 13853 warning ("`operator=' should return a reference to `*this'");
9188c363
MM
13854
13855 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13856 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
13857 if (!DECL_INITIAL (decl1))
13858 DECL_INITIAL (decl1) = error_mark_node;
9188c363 13859
9188c363
MM
13860 /* This function exists in static storage.
13861 (This does not mean `static' in the C sense!) */
13862 TREE_STATIC (decl1) = 1;
13863
13864 /* We must call push_template_decl after current_class_type is set
13865 up. (If we are processing inline definitions after exiting a
13866 class scope, current_class_type will be NULL_TREE until set above
13867 by push_nested_class.) */
13868 if (processing_template_decl)
13869 decl1 = push_template_decl (decl1);
13870
f181d4ae 13871 /* We are now in the scope of the function being defined. */
8d08fdba 13872 current_function_decl = decl1;
f181d4ae 13873
5566b478
MS
13874 /* Save the parm names or decls from this function's declarator
13875 where store_parm_decls will find them. */
13876 current_function_parms = last_function_parms;
8d08fdba 13877
a8f73d4b
MM
13878 /* Make sure the parameter and return types are reasonable. When
13879 you declare a function, these types can be incomplete, but they
13880 must be complete when you define the function. */
5156628f 13881 if (! processing_template_decl)
f444e36b 13882 check_function_type (decl1, current_function_parms);
f181d4ae 13883
a8f73d4b
MM
13884 /* Build the return declaration for the function. */
13885 restype = TREE_TYPE (fntype);
e89a6075
JM
13886 /* Promote the value to int before returning it. */
13887 if (c_promoting_integer_type_p (restype))
13888 restype = type_promotes_to (restype);
13889 if (DECL_RESULT (decl1) == NULL_TREE)
a8f73d4b 13890 {
e89a6075
JM
13891 DECL_RESULT (decl1)
13892 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13893 c_apply_type_quals_to_decl (cp_type_quals (restype),
13894 DECL_RESULT (decl1));
5566b478 13895 }
a8f73d4b
MM
13896
13897 /* Initialize RTL machinery. We cannot do this until
13898 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13899 even when processing a template; this is how we get
c00996a3
JM
13900 CFUN set up, and our per-function variables initialized.
13901 FIXME factor out the non-RTL stuff. */
a8f73d4b
MM
13902 bl = current_binding_level;
13903 init_function_start (decl1, input_filename, lineno);
13904 current_binding_level = bl;
a8f73d4b
MM
13905
13906 /* Even though we're inside a function body, we still don't want to
13907 call expand_expr to calculate the size of a variable-sized array.
13908 We haven't necessarily assigned RTL to all variables yet, so it's
13909 not safe to try to expand expressions involving them. */
13910 immediate_size_expand = 0;
01d939e8 13911 cfun->x_dont_save_pending_sizes_p = 1;
a8f73d4b 13912
f444e36b
MM
13913 /* Start the statement-tree, start the tree now. */
13914 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
6f80451c 13915
a8f73d4b 13916 /* Let the user know we're compiling this function. */
ea11ca7e 13917 announce_function (decl1);
b7484fbe 13918
878cd289
MS
13919 /* Record the decl so that the function name is defined.
13920 If we already have a decl for this name, and it is a FUNCTION_DECL,
13921 use the old decl. */
a8f73d4b 13922 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 13923 {
75650646 13924 /* A specialization is not used to guide overload resolution. */
2228d450 13925 if (!DECL_TEMPLATE_SPECIALIZATION (decl1)
959d8796 13926 && ! DECL_FUNCTION_MEMBER_P (decl1))
75650646 13927 decl1 = pushdecl (decl1);
2c73f9f5 13928 else
b7698cf0 13929 {
a1c65f9f 13930 /* We need to set the DECL_CONTEXT. */
b7698cf0
JM
13931 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13932 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13933 /* And make sure we have enough default args. */
13934 check_default_args (decl1);
13935 }
878cd289
MS
13936 fntype = TREE_TYPE (decl1);
13937 }
5566b478 13938
a8f73d4b 13939 /* Reset these in case the call to pushdecl changed them. */
5566b478 13940 current_function_decl = decl1;
01d939e8 13941 cfun->decl = decl1;
878cd289 13942
78c120b5
MM
13943 /* If we are (erroneously) defining a function that we have already
13944 defined before, wipe out what we knew before. */
e2500fed
GK
13945 if (!DECL_PENDING_INLINE_P (decl1))
13946 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
b35d4555 13947
f444e36b 13948 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
13949 {
13950 /* We know that this was set up by `grokclassfn'. We do not
13951 wait until `store_parm_decls', since evil parse errors may
13952 never get us to that point. Here we keep the consistency
13953 between `current_class_type' and `current_class_ptr'. */
13954 tree t = DECL_ARGUMENTS (decl1);
68642fb6
UD
13955
13956 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
b35d4555
MM
13957 162);
13958 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13959 19990811);
68642fb6
UD
13960
13961 cp_function_chain->x_current_class_ref
3e411c3f 13962 = build_indirect_ref (t, NULL);
b35d4555
MM
13963 cp_function_chain->x_current_class_ptr = t;
13964
018fc244
MM
13965 /* Constructors and destructors need to know whether they're "in
13966 charge" of initializing virtual base classes. */
e0fff4b3 13967 t = TREE_CHAIN (t);
454fa7a7 13968 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
13969 {
13970 current_in_charge_parm = t;
13971 t = TREE_CHAIN (t);
13972 }
13973 if (DECL_HAS_VTT_PARM_P (decl1))
13974 {
13975 if (DECL_NAME (t) != vtt_parm_identifier)
13976 abort ();
13977 current_vtt_parm = t;
13978 }
b35d4555
MM
13979 }
13980
db5ae43f 13981 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 13982 {
4f1c5b7d 13983 tree ctx = decl_function_context (decl1);
86052cc3 13984
faae18ab
MS
13985 if (DECL_NOT_REALLY_EXTERN (decl1))
13986 DECL_EXTERNAL (decl1) = 0;
86052cc3 13987
79065db2 13988 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
13989 && TREE_PUBLIC (ctx))
13990 /* This is a function in a local class in an extern inline
13991 function. */
13992 comdat_linkage (decl1);
faae18ab 13993 }
8d08fdba
MS
13994 /* If this function belongs to an interface, it is public.
13995 If it belongs to someone else's interface, it is also external.
1f901793 13996 This only affects inlines and template instantiations. */
5566b478
MS
13997 else if (interface_unknown == 0
13998 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
d11ad92e 13999 || flag_alt_external_templates))
8d08fdba 14000 {
79065db2
MM
14001 if (DECL_DECLARED_INLINE_P (decl1)
14002 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 14003 || processing_template_decl)
1f901793
JM
14004 {
14005 DECL_EXTERNAL (decl1)
14006 = (interface_only
79065db2
MM
14007 || (DECL_DECLARED_INLINE_P (decl1)
14008 && ! flag_implement_inlines
9c73ec84 14009 && !DECL_VINDEX (decl1)));
1f901793
JM
14010
14011 /* For WIN32 we also want to put these in linkonce sections. */
14012 maybe_make_one_only (decl1);
14013 }
db5ae43f 14014 else
893de33c 14015 DECL_EXTERNAL (decl1) = 0;
e8abc66f 14016 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 14017 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba 14018 }
c16c47fb
JM
14019 else if (interface_unknown && interface_only
14020 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
14021 || flag_alt_external_templates))
14022 {
14023 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
14024 interface, we will have interface_only set but not
14025 interface_known. In that case, we don't want to use the normal
14026 heuristics because someone will supply a #pragma implementation
14027 elsewhere, and deducing it here would produce a conflict. */
14028 comdat_linkage (decl1);
14029 DECL_EXTERNAL (decl1) = 0;
14030 DECL_INTERFACE_KNOWN (decl1) = 1;
14031 DECL_DEFER_OUTPUT (decl1) = 1;
14032 }
8d08fdba 14033 else
a0a33927
MS
14034 {
14035 /* This is a definition, not a reference.
b7484fbe
MS
14036 So clear DECL_EXTERNAL. */
14037 DECL_EXTERNAL (decl1) = 0;
faae18ab 14038
79065db2
MM
14039 if ((DECL_DECLARED_INLINE_P (decl1)
14040 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
14041 && ! DECL_INTERFACE_KNOWN (decl1)
14042 /* Don't try to defer nested functions for now. */
4f1c5b7d 14043 && ! decl_function_context (decl1))
878cd289
MS
14044 DECL_DEFER_OUTPUT (decl1) = 1;
14045 else
893de33c 14046 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 14047 }
a9aedbc2 14048
f444e36b
MM
14049 pushlevel (0);
14050 current_binding_level->parm_flag = 1;
8d08fdba 14051
5566b478
MS
14052 ++function_depth;
14053
0d9eb3ba 14054 if (DECL_DESTRUCTOR_P (decl1))
46e8c075
MM
14055 {
14056 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14057 DECL_CONTEXT (dtor_label) = current_function_decl;
14058 }
8d08fdba 14059
0ba8a114
NS
14060 start_fname_decls ();
14061
f444e36b
MM
14062 store_parm_decls (current_function_parms);
14063
8d08fdba
MS
14064 return 1;
14065}
14066\f
14067/* Store the parameter declarations into the current function declaration.
14068 This is called after parsing the parameter declarations, before
14069 digesting the body of the function.
14070
14071 Also install to binding contour return value identifier, if any. */
14072
f444e36b
MM
14073static void
14074store_parm_decls (current_function_parms)
14075 tree current_function_parms;
8d08fdba
MS
14076{
14077 register tree fndecl = current_function_decl;
14078 register tree parm;
8d08fdba 14079
8d08fdba
MS
14080 /* This is a chain of any other decls that came in among the parm
14081 declarations. If a parm is declared with enum {foo, bar} x;
14082 then CONST_DECLs for foo and bar are put here. */
14083 tree nonparms = NULL_TREE;
14084
b35d4555 14085 if (current_function_parms)
8d08fdba
MS
14086 {
14087 /* This case is when the function was defined with an ANSI prototype.
14088 The parms already have decls, so we need not do anything here
14089 except record them as in effect
14090 and complain if any redundant old-style parm decls were written. */
14091
b35d4555
MM
14092 tree specparms = current_function_parms;
14093 tree next;
14094
f444e36b 14095 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 14096 at class level. */
f444e36b 14097 storedecls (NULL_TREE);
8d08fdba 14098
f444e36b 14099 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
14100 for each of these. We must do them in reverse order so that
14101 they end in the correct forward order. */
f444e36b 14102 specparms = nreverse (specparms);
5566b478 14103
b35d4555 14104 for (parm = specparms; parm; parm = next)
8d08fdba
MS
14105 {
14106 next = TREE_CHAIN (parm);
14107 if (TREE_CODE (parm) == PARM_DECL)
14108 {
f444e36b
MM
14109 if (DECL_NAME (parm) == NULL_TREE
14110 || TREE_CODE (parm) != VOID_TYPE)
14111 pushdecl (parm);
14112 else
33bd39a2 14113 error ("parameter `%D' declared void", parm);
8d08fdba
MS
14114 }
14115 else
14116 {
14117 /* If we find an enum constant or a type tag,
14118 put it aside for the moment. */
14119 TREE_CHAIN (parm) = NULL_TREE;
14120 nonparms = chainon (nonparms, parm);
14121 }
14122 }
14123
f444e36b
MM
14124 /* Get the decls in their original chain order and record in the
14125 function. This is all and only the PARM_DECLs that were
14126 pushed into scope by the loop above. */
14127 DECL_ARGUMENTS (fndecl) = getdecls ();
969fd501 14128 storetags (gettags ());
8d08fdba
MS
14129 }
14130 else
14131 DECL_ARGUMENTS (fndecl) = NULL_TREE;
14132
14133 /* Now store the final chain of decls for the arguments
14134 as the decl-chain of the current lexical scope.
14135 Put the enumerators in as well, at the front so that
14136 DECL_ARGUMENTS is not modified. */
f444e36b 14137 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
eb448459 14138
b35d4555 14139 /* Do the starting of the exception specifications, if we have any. */
68642fb6 14140 if (flag_exceptions && !processing_template_decl
1660cb3a 14141 && flag_enforce_eh_specs
b35d4555 14142 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
52a11cbf 14143 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
14144}
14145
8d08fdba 14146\f
59026e79
MM
14147/* We have finished doing semantic analysis on DECL, but have not yet
14148 generated RTL for its body. Save away our current state, so that
14149 when we want to generate RTL later we know what to do. */
14150
14151static void
14152save_function_data (decl)
14153 tree decl;
14154{
e2500fed 14155 struct language_function *f;
59026e79
MM
14156
14157 /* Save the language-specific per-function data so that we can
14158 get it back when we really expand this function. */
14159 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
14160 19990908);
68642fb6 14161
59026e79 14162 /* Make a copy. */
e2500fed
GK
14163 f = ((struct language_function *)
14164 ggc_alloc (sizeof (struct language_function)));
14165 memcpy (f, cp_function_chain, sizeof (struct language_function));
59026e79
MM
14166 DECL_SAVED_FUNCTION_DATA (decl) = f;
14167
14168 /* Clear out the bits we don't need. */
ae499cce
MM
14169 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
14170 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
59026e79
MM
14171 f->x_named_label_uses = NULL;
14172 f->bindings = NULL;
8e4ce833 14173 f->x_local_names = NULL;
59026e79
MM
14174
14175 /* When we get back here again, we will be expanding. */
14176 f->x_expanding_p = 1;
914653a2
MM
14177
14178 /* If we've already decided that we cannot inline this function, we
14179 must remember that fact when we actually go to expand the
14180 function. */
acc72c37
MM
14181 if (current_function_cannot_inline)
14182 {
14183 f->cannot_inline = current_function_cannot_inline;
14184 DECL_INLINE (decl) = 0;
14185 }
59026e79
MM
14186}
14187
cdd2559c
JM
14188/* Add a note to mark the beginning of the main body of the constructor.
14189 This is used to set up the data structures for the cleanup regions for
14190 fully-constructed bases and members. */
14191
14192static void
14193begin_constructor_body ()
14194{
cdd2559c
JM
14195}
14196
ade3dc07
JM
14197/* Add a note to mark the end of the main body of the constructor. This is
14198 used to end the cleanup regions for fully-constructed bases and
14199 members. */
efee38a9
MM
14200
14201static void
14202finish_constructor_body ()
14203{
efee38a9
MM
14204}
14205
cdd2559c
JM
14206/* Do all the processing for the beginning of a destructor; set up the
14207 vtable pointers and cleanups for bases and members. */
14208
14209static void
14210begin_destructor_body ()
14211{
14212 tree if_stmt;
14213 tree compound_stmt;
14214
14215 /* If the dtor is empty, and we know there is not any possible
14216 way we could use any vtable entries, before they are possibly
14217 set by a base class dtor, we don't have to setup the vtables,
14218 as we know that any base class dtor will set up any vtables
14219 it needs. We avoid MI, because one base class dtor can do a
14220 virtual dispatch to an overridden function that would need to
14221 have a non-related vtable set up, we cannot avoid setting up
14222 vtables in that case. We could change this to see if there
14223 is just one vtable.
14224
14225 ??? In the destructor for a class, the vtables are set
14226 appropriately for that class. There will be no non-related
14227 vtables. jason 2001-12-11. */
14228 if_stmt = begin_if_stmt ();
14229
14230 /* If it is not safe to avoid setting up the vtables, then
14231 someone will change the condition to be boolean_true_node.
14232 (Actually, for now, we do not have code to set the condition
14233 appropriately, so we just assume that we always need to
14234 initialize the vtables.) */
14235 finish_if_stmt_cond (boolean_true_node, if_stmt);
cdd2559c
JM
14236
14237 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
14238
14239 /* Make all virtual function table pointers in non-virtual base
14240 classes point to CURRENT_CLASS_TYPE's virtual function
14241 tables. */
14242 initialize_vtbl_ptrs (current_class_ptr);
14243
14244 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
14245 finish_then_clause (if_stmt);
14246 finish_if_stmt ();
14247
14248 /* And insert cleanups for our bases and members so that they
14249 will be properly destroyed if we throw. */
14250 push_base_cleanups ();
14251}
14252
ade3dc07
JM
14253/* At the end of every destructor we generate code to delete the object if
14254 necessary. Do that now. */
9bfadf57
MM
14255
14256static void
14257finish_destructor_body ()
14258{
9bfadf57
MM
14259 tree exprstmt;
14260
5633b37c
MM
14261 /* Any return from a destructor will end up here; that way all base
14262 and member cleanups will be run when the function returns. */
14263 add_stmt (build_stmt (LABEL_STMT, dtor_label));
14264
52682a1b
MM
14265 /* In a virtual destructor, we must call delete. */
14266 if (DECL_VIRTUAL_P (current_function_decl))
14267 {
14268 tree if_stmt;
fa72b064 14269 tree virtual_size = cxx_sizeof (current_class_type);
68642fb6 14270
52682a1b 14271 /* [class.dtor]
68642fb6 14272
ade3dc07
JM
14273 At the point of definition of a virtual destructor (including
14274 an implicit definition), non-placement operator delete shall
14275 be looked up in the scope of the destructor's class and if
14276 found shall be accessible and unambiguous. */
52682a1b
MM
14277 exprstmt = build_op_delete_call
14278 (DELETE_EXPR, current_class_ptr, virtual_size,
14279 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
298d6f60 14280
52682a1b
MM
14281 if_stmt = begin_if_stmt ();
14282 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
14283 current_in_charge_parm,
14284 integer_one_node),
14285 if_stmt);
14286 finish_expr_stmt (exprstmt);
14287 finish_then_clause (if_stmt);
14288 finish_if_stmt ();
14289 }
ade3dc07 14290}
9bfadf57 14291
ade3dc07
JM
14292/* Do the necessary processing for the beginning of a function body, which
14293 in this case includes member-initializers, but not the catch clauses of
14294 a function-try-block. Currently, this means opening a binding level
14295 for the member-initializers (in a ctor) and member cleanups (in a dtor).
14296 In other functions, this isn't necessary, but it doesn't hurt. */
14297
14298tree
14299begin_function_body ()
14300{
cdd2559c
JM
14301 tree stmt;
14302
b5856475
JM
14303 if (processing_template_decl)
14304 /* Do nothing now. */;
14305 else
14306 /* Always keep the BLOCK node associated with the outermost pair of
14307 curly braces of a function. These are needed for correct
14308 operation of dwarfout.c. */
14309 keep_next_level (1);
14310
cdd2559c 14311 stmt = begin_compound_stmt (0);
ade3dc07 14312 COMPOUND_STMT_BODY_BLOCK (stmt) = 1;
cdd2559c
JM
14313
14314 if (processing_template_decl)
14315 /* Do nothing now. */;
14316 else if (DECL_CONSTRUCTOR_P (current_function_decl))
14317 begin_constructor_body ();
14318 else if (DECL_DESTRUCTOR_P (current_function_decl))
14319 begin_destructor_body ();
14320
ade3dc07 14321 return stmt;
9bfadf57
MM
14322}
14323
ade3dc07
JM
14324/* Do the processing for the end of a function body. Currently, this means
14325 closing out the cleanups for fully-constructed bases and members, and in
14326 the case of the destructor, deleting the object if desired. Again, this
14327 is only meaningful for [cd]tors, since they are the only functions where
14328 there is a significant distinction between the main body and any
14329 function catch clauses. Handling, say, main() return semantics here
14330 would be wrong, as flowing off the end of a function catch clause for
14331 main() would also need to return 0. */
14332
14333void
14334finish_function_body (compstmt)
14335 tree compstmt;
14336{
5633b37c 14337 /* Close the block. */
ade3dc07
JM
14338 finish_compound_stmt (0, compstmt);
14339
14340 if (processing_template_decl)
14341 /* Do nothing now. */;
14342 else if (DECL_CONSTRUCTOR_P (current_function_decl))
14343 finish_constructor_body ();
14344 else if (DECL_DESTRUCTOR_P (current_function_decl))
14345 finish_destructor_body ();
14346}
14347
8d08fdba
MS
14348/* Finish up a function declaration and compile that function
14349 all the way to assembler language output. The free the storage
14350 for the function definition.
14351
68642fb6 14352 FLAGS is a bitwise or of the following values:
f181d4ae
MM
14353 2 - INCLASS_INLINE
14354 We just finished processing the body of an in-class inline
14355 function definition. (This processing will have taken place
87e3dbc9 14356 after the class definition is complete.) */
8d08fdba 14357
4d6abc1c 14358tree
0acf7199 14359finish_function (flags)
f181d4ae 14360 int flags;
8d08fdba
MS
14361{
14362 register tree fndecl = current_function_decl;
14363 tree fntype, ctype = NULL_TREE;
f181d4ae 14364 int inclass_inline = (flags & 2) != 0;
87e3dbc9 14365 int nested;
8d08fdba
MS
14366
14367 /* When we get some parse errors, we can end up without a
14368 current_function_decl, so cope. */
14369 if (fndecl == NULL_TREE)
4d6abc1c 14370 return error_mark_node;
8d08fdba 14371
9aad8f83
MA
14372 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
14373 && DECL_VIRTUAL_P (fndecl)
14374 && !processing_template_decl)
14375 {
14376 tree fnclass = DECL_CONTEXT (fndecl);
14377 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
14378 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
14379 }
14380
87e3dbc9 14381 nested = function_depth > 1;
8d08fdba
MS
14382 fntype = TREE_TYPE (fndecl);
14383
9bfadf57
MM
14384 /* TREE_READONLY (fndecl) = 1;
14385 This caused &foo to be of type ptr-to-const-function
14386 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 14387
f444e36b 14388 my_friendly_assert (building_stmt_tree (), 20000911);
8d08fdba 14389
0ba8a114
NS
14390 finish_fname_decls ();
14391
db9b2174
MM
14392 /* For a cloned function, we've already got all the code we need;
14393 there's no need to add any extra bits. */
f444e36b 14394 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 14395 {
ade3dc07 14396 if (DECL_MAIN_P (current_function_decl))
efee38a9
MM
14397 {
14398 /* Make it so that `main' always returns 0 by default. */
08c7ae5a 14399#if VMS_TARGET
efee38a9
MM
14400 finish_return_stmt (integer_one_node);
14401#else
14402 finish_return_stmt (integer_zero_node);
14403#endif
14404 }
87e3dbc9 14405
b35d4555
MM
14406 /* Finish dealing with exception specifiers. */
14407 if (flag_exceptions && !processing_template_decl
1660cb3a 14408 && flag_enforce_eh_specs
b35d4555 14409 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
52a11cbf
RH
14410 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14411 (TREE_TYPE (current_function_decl)),
14412 current_eh_spec_block);
5566b478 14413 }
68642fb6 14414
558475f0 14415 /* If we're saving up tree structure, tie off the function now. */
f444e36b 14416 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
8d2733ca 14417
8d08fdba
MS
14418 /* This must come after expand_function_end because cleanups might
14419 have declarations (from inline functions) that need to go into
14420 this function's blocks. */
7437519c
ZW
14421
14422 /* If the current binding level isn't the outermost binding level
14423 for this function, either there is a bug, or we have experienced
14424 syntax errors and the statement tree is malformed. */
f444e36b 14425 if (current_binding_level->parm_flag != 1)
7437519c
ZW
14426 {
14427 /* Make sure we have already experienced errors. */
14428 if (errorcount == 0)
14429 abort ();
14430
14431 /* Throw away the broken statement tree and extra binding
14432 levels. */
14433 DECL_SAVED_TREE (fndecl) = build_stmt (COMPOUND_STMT, NULL_TREE);
14434
14435 while (current_binding_level->parm_flag != 1)
14436 {
14437 if (current_binding_level->parm_flag == 2)
14438 pop_nested_class ();
14439 else
14440 poplevel (0, 0, 0);
14441 }
14442 }
f444e36b 14443 poplevel (1, 0, 1);
8d08fdba 14444
07b2f2fd
JM
14445 /* Set up the named return value optimization, if we can. Here, we
14446 eliminate the copy from the nrv into the RESULT_DECL and any cleanup
14447 for the nrv. genrtl_start_function and declare_return_variable
14448 handle making the nrv and RESULT_DECL share space. */
14449 if (current_function_return_value)
14450 {
14451 tree r = current_function_return_value;
14452 /* This is only worth doing for fns that return in memory--and
14453 simpler, since we don't have to worry about promoted modes. */
14454 if (r != error_mark_node
14455 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl))))
14456 {
14457 DECL_ALIGN (r) = DECL_ALIGN (DECL_RESULT (fndecl));
14458 walk_tree_without_duplicates (&DECL_SAVED_TREE (fndecl),
14459 nullify_returns_r, r);
14460 }
14461 else
14462 /* Clear it so genrtl_start_function and declare_return_variable
14463 know we're not optimizing. */
14464 current_function_return_value = NULL_TREE;
14465 }
14466
a8f73d4b 14467 /* Remember that we were in class scope. */
db5ae43f 14468 if (current_class_name)
a8f73d4b 14469 ctype = current_class_type;
db5ae43f 14470
1caa11d3
MM
14471 /* Must mark the RESULT_DECL as being in this function. */
14472 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14473
14474 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14475 to the FUNCTION_DECL node itself. */
14476 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14477
59026e79 14478 /* Save away current state, if appropriate. */
f444e36b 14479 if (!processing_template_decl)
59026e79
MM
14480 save_function_data (fndecl);
14481
95fabfd3
MM
14482 /* If this function calls `setjmp' it cannot be inlined. When
14483 `longjmp' is called it is not guaranteed to restore the value of
14484 local variables that have been modified since the call to
14485 `setjmp'. So, if were to inline this function into some caller
14486 `c', then when we `longjmp', we might not restore all variables
14487 in `c'. (It might seem, at first blush, that there's no way for
14488 this function to modify local variables in `c', but their
14489 addresses may have been stored somewhere accessible to this
14490 function.) */
f444e36b 14491 if (!processing_template_decl && calls_setjmp_p (fndecl))
95fabfd3
MM
14492 DECL_UNINLINABLE (fndecl) = 1;
14493
efe49da0 14494 /* Complain if there's just no return statement. */
46cfb101 14495 if (warn_return_type
efe49da0 14496 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
57d5032b 14497 && !current_function_returns_value && !current_function_returns_null
efe49da0
JM
14498 /* Don't complain if we abort or throw. */
14499 && !current_function_returns_abnormally
46cfb101
JM
14500 && !DECL_NAME (DECL_RESULT (fndecl))
14501 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
efe49da0 14502 inline function, as we might never be compiled separately. */
efc7052d 14503 && (DECL_INLINE (fndecl) || processing_template_decl))
efe49da0
JM
14504 warning ("no return statement in function returning non-void");
14505
f444e36b
MM
14506 /* Clear out memory we no longer need. */
14507 free_after_parsing (cfun);
14508 /* Since we never call rest_of_compilation, we never clear
14509 CFUN. Do so explicitly. */
14510 free_after_compilation (cfun);
14511 cfun = NULL;
a8f73d4b 14512
27631dae 14513 /* If this is an in-class inline definition, we may have to pop the
a8f73d4b
MM
14514 bindings for the template parameters that we added in
14515 maybe_begin_member_template_processing when start_function was
14516 called. */
14517 if (inclass_inline)
14518 maybe_end_member_template_processing ();
14519
14520 /* Leave the scope of the class. */
14521 if (ctype)
14522 pop_nested_class ();
5566b478
MS
14523
14524 --function_depth;
8d08fdba 14525
4d6abc1c 14526 /* Clean up. */
28cbf42c 14527 if (! nested)
1f8f4a0b
MM
14528 /* Let the error reporting routines know that we're outside a
14529 function. For a nested function, this value is used in
b03e38e1 14530 cxx_pop_function_context and then reset via pop_function_context. */
1f8f4a0b 14531 current_function_decl = NULL_TREE;
4d6abc1c
MM
14532
14533 return fndecl;
8d08fdba
MS
14534}
14535\f
14536/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
14537 DECLSPECS and DECLARATOR are the parts of the declaration;
14538 they describe the return type and the name of the function,
14539 but twisted together in a fashion that parallels the syntax of C.
14540
14541 This function creates a binding context for the function body
14542 as well as setting up the FUNCTION_DECL in current_function_decl.
14543
14544 Returns a FUNCTION_DECL on success.
14545
14546 If the DECLARATOR is not suitable for a function (it defines a datum
14547 instead), we return 0, which tells yyparse to report a parse error.
14548
14549 May return void_type_node indicating that this method is actually
14550 a friend. See grokfield for more details.
14551
14552 Came here with a `.pushlevel' .
14553
14554 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14555 CHANGES TO CODE IN `grokfield'. */
e92cc029 14556
8d08fdba 14557tree
acf82af2
JM
14558start_method (declspecs, declarator, attrlist)
14559 tree declarator, declspecs, attrlist;
8d08fdba 14560{
c11b6f21 14561 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 14562 &attrlist);
8d08fdba 14563
a723baf1
MM
14564 if (fndecl == error_mark_node)
14565 return error_mark_node;
14566
14567 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14568 {
14569 error ("invalid member function declaration");
14570 return error_mark_node;
14571 }
8d08fdba 14572
195a5def
IR
14573 if (attrlist)
14574 cplus_decl_attributes (&fndecl, attrlist, 0);
14575
8d08fdba 14576 /* Pass friends other than inline friend functions back. */
a1774733 14577 if (fndecl == void_type_node)
8d08fdba
MS
14578 return fndecl;
14579
8d08fdba
MS
14580 if (DECL_IN_AGGR_P (fndecl))
14581 {
14582 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14583 {
68642fb6 14584 if (DECL_CONTEXT (fndecl)
2c73f9f5 14585 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
33bd39a2 14586 error ("`%D' is already defined in class `%T'", fndecl,
2ae7bada 14587 DECL_CONTEXT (fndecl));
8d08fdba
MS
14588 }
14589 return void_type_node;
14590 }
14591
f3400fe2
JM
14592 check_template_shadow (fndecl);
14593
79065db2 14594 DECL_DECLARED_INLINE_P (fndecl) = 1;
faae18ab 14595
8926095f 14596 if (flag_default_inline)
8d08fdba
MS
14597 DECL_INLINE (fndecl) = 1;
14598
36a117a5
MM
14599 /* We process method specializations in finish_struct_1. */
14600 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
3ac3d9ea 14601 fndecl = push_template_decl (fndecl);
a0a33927 14602
8d08fdba
MS
14603 if (! DECL_FRIEND_P (fndecl))
14604 {
8d08fdba
MS
14605 if (TREE_CHAIN (fndecl))
14606 {
14607 fndecl = copy_node (fndecl);
14608 TREE_CHAIN (fndecl) = NULL_TREE;
14609 }
271e6f02 14610 grok_special_member_properties (fndecl);
8d08fdba
MS
14611 }
14612
cd9f6678 14613 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
8d08fdba
MS
14614
14615 /* Make a place for the parms */
14616 pushlevel (0);
14617 current_binding_level->parm_flag = 1;
68642fb6 14618
8d08fdba
MS
14619 DECL_IN_AGGR_P (fndecl) = 1;
14620 return fndecl;
14621}
14622
14623/* Go through the motions of finishing a function definition.
14624 We don't compile this method until after the whole class has
14625 been processed.
14626
14627 FINISH_METHOD must return something that looks as though it
14628 came from GROKFIELD (since we are defining a method, after all).
14629
14630 This is called after parsing the body of the function definition.
14631 STMTS is the chain of statements that makes up the function body.
14632
14633 DECL is the ..._DECL that `start_method' provided. */
14634
14635tree
14636finish_method (decl)
14637 tree decl;
14638{
14639 register tree fndecl = decl;
14640 tree old_initial;
8d08fdba
MS
14641
14642 register tree link;
14643
a1774733 14644 if (decl == void_type_node)
8d08fdba
MS
14645 return decl;
14646
14647 old_initial = DECL_INITIAL (fndecl);
14648
14649 /* Undo the level for the parms (from start_method).
14650 This is like poplevel, but it causes nothing to be
14651 saved. Saving information here confuses symbol-table
14652 output routines. Besides, this information will
14653 be correctly output when this method is actually
14654 compiled. */
14655
14656 /* Clear out the meanings of the local variables of this level;
14657 also record in each decl which block it belongs to. */
14658
14659 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14660 {
14661 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 14662 pop_binding (DECL_NAME (link), link);
8d08fdba
MS
14663 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14664 DECL_CONTEXT (link) = NULL_TREE;
14665 }
14666
8d08fdba
MS
14667 poplevel (0, 0, 0);
14668
14669 DECL_INITIAL (fndecl) = old_initial;
14670
14671 /* We used to check if the context of FNDECL was different from
14672 current_class_type as another way to get inside here. This didn't work
14673 for String.cc in libg++. */
14674 if (DECL_FRIEND_P (fndecl))
14675 {
14676 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14677 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14678 decl = void_type_node;
14679 }
14680
14681 return decl;
14682}
14683\f
0154eaa8
MM
14684
14685/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
14686 we can lay it out later, when and if its type becomes complete. */
8d08fdba
MS
14687
14688void
0154eaa8
MM
14689maybe_register_incomplete_var (var)
14690 tree var;
8d08fdba 14691{
0154eaa8 14692 my_friendly_assert (TREE_CODE (var) == VAR_DECL, 20020406);
8d08fdba 14693
0154eaa8
MM
14694 /* Keep track of variables with incomplete types. */
14695 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14696 && DECL_EXTERNAL (var))
70adf8a9 14697 {
0154eaa8
MM
14698 tree inner_type = TREE_TYPE (var);
14699
14700 while (TREE_CODE (inner_type) == ARRAY_TYPE)
14701 inner_type = TREE_TYPE (inner_type);
14702 inner_type = TYPE_MAIN_VARIANT (inner_type);
14703
14704 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14705 /* RTTI TD entries are created while defining the type_info. */
14706 || (TYPE_LANG_SPECIFIC (inner_type)
14707 && TYPE_BEING_DEFINED (inner_type)))
14708 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
70adf8a9 14709 }
0154eaa8 14710}
70adf8a9 14711
0154eaa8
MM
14712/* Called when a class type (given by TYPE) is defined. If there are
14713 any existing VAR_DECLs whose type hsa been completed by this
14714 declaration, update them now. */
70adf8a9 14715
0154eaa8
MM
14716void
14717complete_vars (type)
14718 tree type;
14719{
14720 tree *list = &incomplete_vars;
14721
14722 my_friendly_assert (CLASS_TYPE_P (type), 20020406);
14723 while (*list)
14724 {
14725 if (same_type_p (type, TREE_PURPOSE (*list)))
70adf8a9 14726 {
0154eaa8 14727 tree var = TREE_VALUE (*list);
c740732f
MM
14728 /* Complete the type of the variable. The VAR_DECL itself
14729 will be laid out in expand_expr. */
14730 complete_type (TREE_TYPE (var));
0154eaa8
MM
14731 /* Remove this entry from the list. */
14732 *list = TREE_CHAIN (*list);
f30432d7
MS
14733 }
14734 else
0154eaa8 14735 list = &TREE_CHAIN (*list);
f30432d7 14736 }
8d08fdba
MS
14737}
14738
86f45d2c
MM
14739/* If DECL is of a type which needs a cleanup, build that cleanup
14740 here. */
e92cc029 14741
86f45d2c 14742tree
c88770e9 14743cxx_maybe_build_cleanup (decl)
86f45d2c 14744 tree decl;
8d08fdba
MS
14745{
14746 tree type = TREE_TYPE (decl);
86f45d2c 14747
834c6dff 14748 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 14749 {
80048418 14750 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
8d08fdba 14751 tree rval;
8d08fdba 14752
8d08fdba
MS
14753 if (TREE_CODE (type) == ARRAY_TYPE)
14754 rval = decl;
14755 else
14756 {
dffd7eb6 14757 cxx_mark_addressable (decl);
8d08fdba
MS
14758 rval = build_unary_op (ADDR_EXPR, decl, 0);
14759 }
14760
14761 /* Optimize for space over speed here. */
14762 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14763 || flag_expensive_optimizations)
14764 flags |= LOOKUP_NONVIRTUAL;
14765
86f45d2c
MM
14766 rval = build_delete (TREE_TYPE (rval), rval,
14767 sfk_complete_destructor, flags, 0);
8d08fdba
MS
14768
14769 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14770 && ! TYPE_HAS_DESTRUCTOR (type))
e1b3e07d 14771 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
051e6fd7 14772 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
8d08fdba 14773
8d08fdba
MS
14774 return rval;
14775 }
6e4ae815 14776 return NULL_TREE;
8d08fdba
MS
14777}
14778\f
558475f0 14779/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
14780
14781void
14782finish_stmt ()
14783{
558475f0
MM
14784 /* Always assume this statement was not an expression statement. If
14785 it actually was an expression statement, its our callers
14786 responsibility to fix this up. */
14787 last_expr_type = NULL_TREE;
8d08fdba
MS
14788}
14789
3afb32a4
MM
14790/* DECL was originally constructed as a non-static member function,
14791 but turned out to be static. Update it accordingly. */
700f8a87 14792
8857f91e 14793void
3afb32a4
MM
14794revert_static_member_fn (decl)
14795 tree decl;
8d08fdba 14796{
700f8a87 14797 tree tmp;
3afb32a4
MM
14798 tree function = TREE_TYPE (decl);
14799 tree args = TYPE_ARG_TYPES (function);
8d08fdba 14800
89d684bb 14801 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
91063b51 14802 != TYPE_UNQUALIFIED)
33bd39a2 14803 error ("static member function `%#D' declared with type qualifiers",
11306230 14804 decl);
f30432d7 14805
700f8a87
MS
14806 args = TREE_CHAIN (args);
14807 tmp = build_function_type (TREE_TYPE (function), args);
89d684bb 14808 tmp = build_qualified_type (tmp, cp_type_quals (function));
f30432d7 14809 tmp = build_exception_variant (tmp,
8d08fdba 14810 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
14811 TREE_TYPE (decl) = tmp;
14812 if (DECL_ARGUMENTS (decl))
14813 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14814 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 14815}
a4443a08 14816
68642fb6
UD
14817/* Initialize the variables used during compilation of a C++
14818 function. */
db5ae43f 14819
b03e38e1
NB
14820void
14821cxx_push_function_context (f)
99dccabc
MM
14822 struct function *f;
14823{
e2500fed
GK
14824 struct language_function *p
14825 = ((struct language_function *)
14826 ggc_alloc_cleared (sizeof (struct language_function)));
14827 f->language = p;
db5ae43f 14828
b35d4555
MM
14829 /* It takes an explicit call to expand_body to generate RTL for a
14830 function. */
14831 expanding_p = 0;
f1dedc31
MM
14832
14833 /* Whenever we start a new function, we destroy temporaries in the
14834 usual way. */
ae499cce 14835 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
db5ae43f
MS
14836}
14837
a8f73d4b
MM
14838/* Free the language-specific parts of F, now that we've finished
14839 compiling the function. */
db5ae43f 14840
b03e38e1
NB
14841void
14842cxx_pop_function_context (f)
99dccabc 14843 struct function *f;
db5ae43f 14844{
99dccabc 14845 f->language = 0;
db5ae43f 14846}
ebfc180f 14847
e2500fed
GK
14848/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14849 one of the language-independent trees. */
4519c0a8 14850
e2500fed
GK
14851enum cp_tree_node_structure_enum
14852cp_tree_node_structure (t)
14853 union lang_tree_node *t;
4519c0a8 14854{
e2500fed 14855 switch (TREE_CODE (&t->generic))
4519c0a8 14856 {
a723baf1 14857 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
e2500fed
GK
14858 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
14859 case CPLUS_BINDING: return TS_CP_BINDING;
14860 case OVERLOAD: return TS_CP_OVERLOAD;
14861 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
14862 case PTRMEM_CST: return TS_CP_PTRMEM;
14863 case WRAPPER: return TS_CP_WRAPPER;
14864 case SRCLOC: return TS_CP_SRCLOC;
14865 default: return TS_CP_GENERIC;
4519c0a8
MM
14866 }
14867}
5fd8e536
JM
14868
14869/* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since
14870 the definition of IDENTIFIER_GLOBAL_VALUE is different for C and C++. */
14871
14872tree
14873identifier_global_value (t)
14874 tree t;
14875{
14876 return IDENTIFIER_GLOBAL_VALUE (t);
14877}
d363e7bf 14878
eaa7c03f
JM
14879/* Build the void_list_node (void_type_node having been created). */
14880tree
14881build_void_list_node ()
14882{
14883 tree t = build_tree_list (NULL_TREE, void_type_node);
14884 TREE_PARMLIST (t) = 1;
14885 return t;
14886}
14887
d363e7bf
AJ
14888static int
14889cp_missing_noreturn_ok_p (decl)
14890 tree decl;
14891{
14892 /* A missing noreturn is ok for the `main' function. */
92643fea 14893 return DECL_MAIN_P (decl);
d363e7bf 14894}
e2500fed
GK
14895
14896#include "gt-cp-decl.h"
14897#include "gtype-cp.h"
This page took 5.470768 seconds and 5 git commands to generate.