Makefile.in (CXX_TREE_H): Include function.h.
[gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22
23 /* Process declarations and symbol lookup for C front end.
24 Also constructs types; the standard scalar types at initialization,
25 and structure, union, array and enum types when they are declared. */
26
27 /* ??? not all decl nodes are given the most useful possible
28 line numbers. For example, the CONST_DECLs for enum values. */
29
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.h"
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45 #include "defaults.h"
46
47 #define obstack_chunk_alloc xmalloc
48 #define obstack_chunk_free free
49
50 extern struct obstack permanent_obstack;
51 extern struct obstack* saveable_obstack;
52
53 extern int current_class_depth;
54
55 extern tree static_ctors, static_dtors;
56
57 extern tree current_namespace;
58 extern tree global_namespace;
59
60 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
61
62 /* Obstack used for remembering local class declarations (like
63 enums and static (const) members. */
64 #include "stack.h"
65 struct obstack decl_obstack;
66 static struct stack_level *decl_stack;
67
68 #ifndef CHAR_TYPE_SIZE
69 #define CHAR_TYPE_SIZE BITS_PER_UNIT
70 #endif
71
72 #ifndef SHORT_TYPE_SIZE
73 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
74 #endif
75
76 #ifndef INT_TYPE_SIZE
77 #define INT_TYPE_SIZE BITS_PER_WORD
78 #endif
79
80 #ifndef LONG_TYPE_SIZE
81 #define LONG_TYPE_SIZE BITS_PER_WORD
82 #endif
83
84 #ifndef LONG_LONG_TYPE_SIZE
85 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
86 #endif
87
88 #ifndef WCHAR_UNSIGNED
89 #define WCHAR_UNSIGNED 0
90 #endif
91
92 #ifndef FLOAT_TYPE_SIZE
93 #define FLOAT_TYPE_SIZE BITS_PER_WORD
94 #endif
95
96 #ifndef DOUBLE_TYPE_SIZE
97 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
98 #endif
99
100 #ifndef LONG_DOUBLE_TYPE_SIZE
101 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
102 #endif
103
104 #ifndef BOOL_TYPE_SIZE
105 #ifdef SLOW_BYTE_ACCESS
106 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
107 #else
108 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
109 #endif
110 #endif
111
112 /* We let tm.h override the types used here, to handle trivial differences
113 such as the choice of unsigned int or long unsigned int for size_t.
114 When machines start needing nontrivial differences in the size type,
115 it would be best to do something here to figure out automatically
116 from other information what type to use. */
117
118 #ifndef SIZE_TYPE
119 #define SIZE_TYPE "long unsigned int"
120 #endif
121
122 #ifndef PTRDIFF_TYPE
123 #define PTRDIFF_TYPE "long int"
124 #endif
125
126 #ifndef WCHAR_TYPE
127 #define WCHAR_TYPE "int"
128 #endif
129
130 static tree grokparms PROTO((tree, int));
131 static const char *redeclaration_error_message PROTO((tree, tree));
132
133 static struct stack_level *push_decl_level PROTO((struct stack_level *,
134 struct obstack *));
135 static void push_binding_level PROTO((struct binding_level *, int,
136 int));
137 static void pop_binding_level PROTO((void));
138 static void suspend_binding_level PROTO((void));
139 static void resume_binding_level PROTO((struct binding_level *));
140 static struct binding_level *make_binding_level PROTO((void));
141 static void declare_namespace_level PROTO((void));
142 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
143 static void storedecls PROTO((tree));
144 static void require_complete_types_for_parms PROTO((tree));
145 static void push_overloaded_decl_1 PROTO((tree));
146 static int ambi_op_p PROTO((tree));
147 static int unary_op_p PROTO((tree));
148 static tree store_bindings PROTO((tree, tree));
149 static tree lookup_tag_reverse PROTO((tree, tree));
150 static tree obscure_complex_init PROTO((tree, tree));
151 static tree maybe_build_cleanup_1 PROTO((tree, tree));
152 static tree lookup_name_real PROTO((tree, int, int, int));
153 static void warn_extern_redeclared_static PROTO((tree, tree));
154 static void grok_reference_init PROTO((tree, tree, tree));
155 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
156 enum overload_flags, tree,
157 tree, int, int, int, int, int, int, tree));
158 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
159 static tree lookup_tag PROTO((enum tree_code, tree,
160 struct binding_level *, int));
161 static void set_identifier_type_value_with_scope
162 PROTO((tree, tree, struct binding_level *));
163 static void record_builtin_type PROTO((enum rid, const char *, tree));
164 static void record_unknown_type PROTO((tree, const char *));
165 static int member_function_or_else PROTO((tree, tree, const char *));
166 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
167 int));
168 static void lang_print_error_function PROTO((const char *));
169 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
170 static void check_for_uninitialized_const_var PROTO((tree));
171 static unsigned long typename_hash PROTO((hash_table_key));
172 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
173 static void push_binding PROTO((tree, tree, struct binding_level*));
174 static int add_binding PROTO((tree, tree));
175 static void pop_binding PROTO((tree, tree));
176 static tree local_variable_p PROTO((tree));
177 static tree find_binding PROTO((tree, tree));
178 static tree select_decl PROTO((tree, int));
179 static int lookup_flags PROTO((int, int));
180 static tree qualify_lookup PROTO((tree, int));
181 static tree record_builtin_java_type PROTO((const char *, int));
182 static const char *tag_name PROTO((enum tag_types code));
183 static void find_class_binding_level PROTO((void));
184 static struct binding_level *innermost_nonclass_level PROTO((void));
185 static tree poplevel_class PROTO((void));
186 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
187 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
188 static int walk_globals_r PROTO((tree, void *));
189 static void add_decl_to_level PROTO((tree, struct binding_level *));
190 static tree make_label_decl PROTO((tree, int));
191 static void pop_label PROTO((tree));
192 static void pop_labels PROTO((tree));
193 static void maybe_deduce_size_from_array_init PROTO((tree, tree));
194 static void layout_var_decl PROTO((tree, tree *));
195 static void maybe_commonize_var PROTO((tree));
196 static tree build_cleanup_on_safe_obstack PROTO((tree));
197 static void check_initializer PROTO((tree, tree *));
198 static void make_rtl_for_nonlocal_decl PROTO((tree, tree, const char *));
199 static void push_cp_function_context PROTO((struct function *));
200 static void pop_cp_function_context PROTO((struct function *));
201
202 #if defined (DEBUG_CP_BINDING_LEVELS)
203 static void indent PROTO((void));
204 #endif
205
206 /* A node which has tree code ERROR_MARK, and whose type is itself.
207 All erroneous expressions are replaced with this node. All functions
208 that accept nodes as arguments should avoid generating error messages
209 if this node is one of the arguments, since it is undesirable to get
210 multiple error messages from one error in the input. */
211
212 tree error_mark_node;
213
214 /* Erroneous argument lists can use this *IFF* they do not modify it. */
215 tree error_mark_list;
216
217 /* The following symbols are subsumed in the cp_global_trees array, and
218 listed here individually for documentation purposes.
219
220 C++ extensions
221 tree wchar_decl_node;
222 tree void_zero_node;
223
224 tree vtable_entry_type;
225 tree delta_type_node;
226 #if 0
227 Old rtti stuff.
228 tree __baselist_desc_type_node;
229 tree __i_desc_type_node, __m_desc_type_node;
230 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
231 #endif
232 tree __t_desc_type_node;
233 #if 0
234 tree __tp_desc_type_node;
235 #endif
236 tree __access_mode_type_node;
237 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
238 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
239 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
240 #if 0
241 Not needed yet? May be needed one day?
242 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
243 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
244 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
245 #endif
246
247 tree class_star_type_node;
248 tree class_type_node, record_type_node, union_type_node, enum_type_node;
249 tree unknown_type_node;
250
251 Array type `vtable_entry_type[]'
252
253 tree vtbl_type_node;
254 tree vtbl_ptr_type_node;
255
256 Nnamespace std
257
258 tree std_node;
259
260 A FUNCTION_DECL which can call `abort'. Not necessarily the
261 one that the user will declare, but sufficient to be called
262 by routines that want to abort the program.
263
264 tree abort_fndecl;
265
266 The FUNCTION_DECL for the default `::operator delete'.
267
268 tree global_delete_fndecl;
269
270 Used by RTTI
271 tree type_info_type_node, tinfo_fn_id, tinfo_fn_type;
272
273 */
274
275 tree cp_global_trees[CPTI_MAX];
276
277 /* These can't be part of the above array, since they are declared
278 individually in tree.h, and used by the debug output routines. */
279
280 tree void_type_node;
281 tree char_type_node;
282 tree integer_type_node;
283 tree unsigned_type_node;
284
285 /* These can't be part of the above array, since they are declared
286 individially in tree.h and used by the target routines. */
287
288 tree ptr_type_node;
289 tree va_list_type_node;
290
291 /* Indicates that there is a type value in some namespace, although
292 that is not necessarily in scope at the moment. */
293
294 static tree global_type_node;
295
296 /* Namespace std. */
297 int in_std;
298
299 /* Expect only namespace names now. */
300 static int only_namespace_names;
301
302 /* In a destructor, the last insn emitted after the start of the
303 function and the parms. */
304
305 #define last_dtor_insn cp_function_chain->last_dtor_insn
306
307 /* In a constructor, the last insn emitted after the start of the
308 function and the parms, the exception specification and any
309 function-try-block. The constructor initializers are emitted after
310 this insn. */
311
312 #define last_parm_cleanup_insn cp_function_chain->last_parm_cleanup_insn
313
314 /* If original DECL_RESULT of current function was a register,
315 but due to being an addressable named return value, would up
316 on the stack, this variable holds the named return value's
317 original location. */
318
319 #define original_result_rtx cp_function_chain->result_rtx
320
321 /* C++: Keep these around to reduce calls to `get_identifier'.
322 Identifiers for `this' in member functions and the auto-delete
323 parameter for destructors. */
324 tree this_identifier, in_charge_identifier;
325 tree ctor_identifier, dtor_identifier;
326 /* Used in pointer to member functions, in vtables, and in sigtables. */
327 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
328 tree pfn_or_delta2_identifier, tag_identifier;
329 tree vt_off_identifier;
330
331 /* Exception specifier used for throw(). */
332 tree empty_except_spec;
333
334 struct named_label_list
335 {
336 struct binding_level *binding_level;
337 tree names_in_scope;
338 tree label_decl;
339 const char *filename_o_goto;
340 int lineno_o_goto;
341 struct named_label_list *next;
342 };
343
344 /* A list (chain of TREE_LIST nodes) of named label uses.
345 The TREE_PURPOSE field is the list of variables defined
346 in the label's scope defined at the point of use.
347 The TREE_VALUE field is the LABEL_DECL used.
348 The TREE_TYPE field holds `current_binding_level' at the
349 point of the label's use.
350
351 BWAHAHAAHAHahhahahahaah. No, no, no, said the little chicken.
352
353 Look at the pretty struct named_label_list. See the pretty struct
354 with the pretty named fields that describe what they do. See the
355 pretty lack of gratuitous casts. Notice the code got a lot cleaner.
356
357 Used only for jumps to as-yet undefined labels, since
358 jumps to defined labels can have their validity checked
359 by stmt.c. */
360
361 #define named_label_uses cp_function_chain->named_label_uses
362
363 /* A list of objects which have constructors or destructors
364 which reside in the global scope. The decl is stored in
365 the TREE_VALUE slot and the initializer is stored
366 in the TREE_PURPOSE slot. */
367 tree static_aggregates;
368
369 /* -- end of C++ */
370
371 /* Two expressions that are constants with value zero.
372 The first is of type `int', the second of type `void *'. */
373
374 tree integer_zero_node;
375 tree null_pointer_node;
376
377 /* The value for __null (NULL), namely, a zero of an integer type with
378 the same number of bits as a pointer. */
379 tree null_node;
380
381 /* A node for the integer constants 1, 2, and 3. */
382
383 tree integer_one_node, integer_two_node, integer_three_node;
384
385 /* While defining an enum type, this is 1 plus the last enumerator
386 constant value. */
387
388 static tree enum_next_value;
389
390 /* Nonzero means that there was overflow computing enum_next_value. */
391
392 static int enum_overflow;
393
394 /* Parsing a function declarator leaves a list of parameter names
395 or a chain or parameter decls here. */
396
397 tree last_function_parms;
398
399 /* Parsing a function declarator leaves here a chain of structure
400 and enum types declared in the parmlist. */
401
402 static tree last_function_parm_tags;
403
404 /* After parsing the declarator that starts a function definition,
405 `start_function' puts here the list of parameter names or chain of decls.
406 `store_parm_decls' finds it here. */
407
408 static tree current_function_parms;
409
410 /* Similar, for last_function_parm_tags. */
411 static tree current_function_parm_tags;
412
413 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
414 that have names. Here so we can clear out their names' definitions
415 at the end of the function. The TREE_VALUE is a LABEL_DECL; the
416 TREE_PURPOSE is the previous binding of the label. */
417
418 #define named_labels cp_function_chain->named_labels
419
420 /* The FUNCTION_DECL for the function currently being compiled,
421 or 0 if between functions. */
422 tree current_function_decl;
423
424 /* Set to 0 at beginning of a function definition, and whenever
425 a label (case or named) is defined. Set to value of expression
426 returned from function when that value can be transformed into
427 a named return value. */
428
429 tree current_function_return_value;
430
431 /* Nonzero means give `double' the same size as `float'. */
432
433 extern int flag_short_double;
434
435 /* Nonzero means don't recognize any builtin functions. */
436
437 extern int flag_no_builtin;
438
439 /* Nonzero means don't recognize the non-ANSI builtin functions.
440 -ansi sets this. */
441
442 extern int flag_no_nonansi_builtin;
443
444 /* Nonzero means enable obscure ANSI features and disable GNU extensions
445 that might cause ANSI-compliant code to be miscompiled. */
446
447 extern int flag_ansi;
448
449 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
450 objects. */
451 extern int flag_huge_objects;
452
453 /* Nonzero if we want to conserve space in the .o files. We do this
454 by putting uninitialized data and runtime initialized data into
455 .common instead of .data at the expense of not flagging multiple
456 definitions. */
457 extern int flag_conserve_space;
458
459 /* Pointers to the base and current top of the language name stack. */
460
461 extern tree *current_lang_base, *current_lang_stack;
462 \f
463 /* C and C++ flags are in decl2.c. */
464
465 /* Set to 0 at beginning of a constructor, set to 1
466 if that function does an allocation before referencing its
467 instance variable. */
468 #define current_function_assigns_this cp_function_chain->assigns_this
469 #define current_function_just_assigned_this \
470 cp_function_chain->just_assigned_this
471
472 /* Flag used when debugging spew.c */
473
474 extern int spew_debug;
475
476 /* This is a copy of the class_shadowed list of the previous class binding
477 contour when at global scope. It's used to reset IDENTIFIER_CLASS_VALUEs
478 when entering another class scope (i.e. a cache miss). */
479 extern tree previous_class_values;
480
481 /* A expression of value 0 with the same precision as a sizetype
482 node, but signed. */
483 tree signed_size_zero_node;
484
485 /* The name of the anonymous namespace, throughout this translation
486 unit. */
487 tree anonymous_namespace_name;
488
489 \f
490 /* Allocate a level of searching. */
491
492 static
493 struct stack_level *
494 push_decl_level (stack, obstack)
495 struct stack_level *stack;
496 struct obstack *obstack;
497 {
498 struct stack_level tem;
499 tem.prev = stack;
500
501 return push_stack_level (obstack, (char *)&tem, sizeof (tem));
502 }
503 \f
504 /* For each binding contour we allocate a binding_level structure
505 which records the names defined in that contour.
506 Contours include:
507 0) the global one
508 1) one for each function definition,
509 where internal declarations of the parameters appear.
510 2) one for each compound statement,
511 to record its declarations.
512
513 The current meaning of a name can be found by searching the levels
514 from the current one out to the global one.
515
516 Off to the side, may be the class_binding_level. This exists only
517 to catch class-local declarations. It is otherwise nonexistent.
518
519 Also there may be binding levels that catch cleanups that must be
520 run when exceptions occur. Thus, to see whether a name is bound in
521 the current scope, it is not enough to look in the
522 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
523 instead. */
524
525 /* Note that the information in the `names' component of the global contour
526 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
527
528 struct binding_level
529 {
530 /* A chain of _DECL nodes for all variables, constants, functions,
531 and typedef types. These are in the reverse of the order
532 supplied. There may be OVERLOADs on this list, too, but they
533 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
534 tree names;
535
536 /* A list of structure, union and enum definitions, for looking up
537 tag names.
538 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
539 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
540 or ENUMERAL_TYPE node.
541
542 C++: the TREE_VALUE nodes can be simple types for
543 component_bindings. */
544 tree tags;
545
546 /* A list of USING_DECL nodes. */
547 tree usings;
548
549 /* A list of used namespaces. PURPOSE is the namespace,
550 VALUE the common ancestor with this binding_level's namespace. */
551 tree using_directives;
552
553 /* If this binding level is the binding level for a class, then
554 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
555 is the name of an entity bound in the class; the TREE_VALUE is
556 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
557 when leaving class scope, we can restore the
558 IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
559 the DECL bound by this name in the class. */
560 tree class_shadowed;
561
562 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
563 is used for all binding levels. */
564 tree type_shadowed;
565
566 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
567 label in this scope. The TREE_PURPOSE is the previous value of
568 the IDENTIFIER_LABEL VALUE. */
569 tree shadowed_labels;
570
571 /* For each level (except not the global one),
572 a chain of BLOCK nodes for all the levels
573 that were entered and exited one level down. */
574 tree blocks;
575
576 /* The BLOCK node for this level, if one has been preallocated.
577 If 0, the BLOCK is allocated (if needed) when the level is popped. */
578 tree this_block;
579
580 /* The binding level which this one is contained in (inherits from). */
581 struct binding_level *level_chain;
582
583 /* List of decls in `names' that have incomplete
584 structure or union types. */
585 tree incomplete;
586
587 /* List of VAR_DECLS saved from a previous for statement.
588 These would be dead in ANSI-conforming code, but might
589 be referenced in ARM-era code. These are stored in a
590 TREE_LIST; the TREE_VALUE is the actual declaration. */
591 tree dead_vars_from_for;
592
593 /* 1 for the level that holds the parameters of a function.
594 2 for the level that holds a class declaration.
595 3 for levels that hold parameter declarations. */
596 unsigned parm_flag : 4;
597
598 /* 1 means make a BLOCK for this level regardless of all else.
599 2 for temporary binding contours created by the compiler. */
600 unsigned keep : 3;
601
602 /* Nonzero if this level "doesn't exist" for tags. */
603 unsigned tag_transparent : 1;
604
605 /* Nonzero if this level can safely have additional
606 cleanup-needing variables added to it. */
607 unsigned more_cleanups_ok : 1;
608 unsigned have_cleanups : 1;
609
610 /* Nonzero if this level is for storing the decls for template
611 parameters and generic decls; these decls will be discarded and
612 replaced with a TEMPLATE_DECL. */
613 unsigned pseudo_global : 1;
614
615 /* This is set for a namespace binding level. */
616 unsigned namespace_p : 1;
617
618 /* True if this level is that of a for-statement where we need to
619 worry about ambiguous (ARM or ANSI) scope rules. */
620 unsigned is_for_scope : 1;
621
622 /* True if this level corresponds to an EH region, as for a try block. */
623 unsigned eh_region : 1;
624
625 /* One bit left for this word. */
626
627 #if defined(DEBUG_CP_BINDING_LEVELS)
628 /* Binding depth at which this level began. */
629 unsigned binding_depth;
630 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
631 };
632
633 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
634
635 /* The binding level currently in effect. */
636
637 #define current_binding_level cp_function_chain->binding_level
638
639 /* The binding level of the current class, if any. */
640
641 static struct binding_level *class_binding_level;
642
643 /* A chain of binding_level structures awaiting reuse. */
644
645 static struct binding_level *free_binding_level;
646
647 /* The outermost binding level, for names of file scope.
648 This is created when the compiler is started and exists
649 through the entire run. */
650
651 static struct binding_level *global_binding_level;
652
653 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
654
655 static int keep_next_level_flag;
656
657 #if defined(DEBUG_CP_BINDING_LEVELS)
658 static int binding_depth = 0;
659 static int is_class_level = 0;
660
661 static void
662 indent ()
663 {
664 register unsigned i;
665
666 for (i = 0; i < binding_depth*2; i++)
667 putc (' ', stderr);
668 }
669 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
670
671 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
672
673 static void
674 push_binding_level (newlevel, tag_transparent, keep)
675 struct binding_level *newlevel;
676 int tag_transparent, keep;
677 {
678 /* Add this level to the front of the chain (stack) of levels that
679 are active. */
680 bzero ((char*) newlevel, sizeof (struct binding_level));
681 newlevel->level_chain = current_binding_level;
682 current_binding_level = newlevel;
683 newlevel->tag_transparent = tag_transparent;
684 newlevel->more_cleanups_ok = 1;
685
686 /* We are called before expand_start_bindings, but after
687 expand_eh_region_start for a try block; so we check this now,
688 before the EH block is covered up. */
689 newlevel->eh_region = is_eh_region ();
690
691 newlevel->keep = keep;
692 #if defined(DEBUG_CP_BINDING_LEVELS)
693 newlevel->binding_depth = binding_depth;
694 indent ();
695 fprintf (stderr, "push %s level 0x%08x line %d\n",
696 (is_class_level) ? "class" : "block", newlevel, lineno);
697 is_class_level = 0;
698 binding_depth++;
699 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
700 }
701
702 /* Find the innermost enclosing class scope, and reset
703 CLASS_BINDING_LEVEL appropriately. */
704
705 static void
706 find_class_binding_level ()
707 {
708 struct binding_level *level = current_binding_level;
709
710 while (level && level->parm_flag != 2)
711 level = level->level_chain;
712 if (level && level->parm_flag == 2)
713 class_binding_level = level;
714 else
715 class_binding_level = 0;
716 }
717
718 static void
719 pop_binding_level ()
720 {
721 if (global_binding_level)
722 {
723 /* Cannot pop a level, if there are none left to pop. */
724 if (current_binding_level == global_binding_level)
725 my_friendly_abort (123);
726 }
727 /* Pop the current level, and free the structure for reuse. */
728 #if defined(DEBUG_CP_BINDING_LEVELS)
729 binding_depth--;
730 indent ();
731 fprintf (stderr, "pop %s level 0x%08x line %d\n",
732 (is_class_level) ? "class" : "block",
733 current_binding_level, lineno);
734 if (is_class_level != (current_binding_level == class_binding_level))
735 {
736 indent ();
737 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
738 }
739 is_class_level = 0;
740 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
741 {
742 register struct binding_level *level = current_binding_level;
743 current_binding_level = current_binding_level->level_chain;
744 level->level_chain = free_binding_level;
745 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
746 if (level->binding_depth != binding_depth)
747 abort ();
748 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
749 free_binding_level = level;
750 find_class_binding_level ();
751 }
752 }
753
754 static void
755 suspend_binding_level ()
756 {
757 if (class_binding_level)
758 current_binding_level = class_binding_level;
759
760 if (global_binding_level)
761 {
762 /* Cannot suspend a level, if there are none left to suspend. */
763 if (current_binding_level == global_binding_level)
764 my_friendly_abort (123);
765 }
766 /* Suspend the current level. */
767 #if defined(DEBUG_CP_BINDING_LEVELS)
768 binding_depth--;
769 indent ();
770 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
771 (is_class_level) ? "class" : "block",
772 current_binding_level, lineno);
773 if (is_class_level != (current_binding_level == class_binding_level))
774 {
775 indent ();
776 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
777 }
778 is_class_level = 0;
779 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
780 current_binding_level = current_binding_level->level_chain;
781 find_class_binding_level ();
782 }
783
784 static void
785 resume_binding_level (b)
786 struct binding_level *b;
787 {
788 /* Resuming binding levels is meant only for namespaces,
789 and those cannot nest into classes. */
790 my_friendly_assert(!class_binding_level, 386);
791 /* Also, resuming a non-directly nested namespace is a no-no. */
792 my_friendly_assert(b->level_chain == current_binding_level, 386);
793 current_binding_level = b;
794 #if defined(DEBUG_CP_BINDING_LEVELS)
795 b->binding_depth = binding_depth;
796 indent ();
797 fprintf (stderr, "resume %s level 0x%08x line %d\n",
798 (is_class_level) ? "class" : "block", b, lineno);
799 is_class_level = 0;
800 binding_depth++;
801 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
802 }
803 \f
804 /* Create a new `struct binding_level'. */
805
806 static
807 struct binding_level *
808 make_binding_level ()
809 {
810 /* NOSTRICT */
811 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
812 }
813
814 /* Nonzero if we are currently in the global binding level. */
815
816 int
817 global_bindings_p ()
818 {
819 return current_binding_level == global_binding_level;
820 }
821
822 /* Return the innermost binding level that is not for a class scope. */
823
824 static struct binding_level *
825 innermost_nonclass_level ()
826 {
827 struct binding_level *b;
828
829 b = current_binding_level;
830 while (b->parm_flag == 2)
831 b = b->level_chain;
832
833 return b;
834 }
835
836 /* Nonzero if we are currently in a toplevel binding level. This
837 means either the global binding level or a namespace in a toplevel
838 binding level. Since there are no non-toplevel namespace levels,
839 this really means any namespace or pseudo-global level. We also
840 include a class whose context is toplevel. */
841
842 int
843 toplevel_bindings_p ()
844 {
845 struct binding_level *b = innermost_nonclass_level ();
846
847 return b->namespace_p || b->pseudo_global;
848 }
849
850 /* Nonzero if this is a namespace scope, or if we are defining a class
851 which is itself at namespace scope, or whose enclosing class is
852 such a class, etc. */
853
854 int
855 namespace_bindings_p ()
856 {
857 struct binding_level *b = innermost_nonclass_level ();
858
859 return b->namespace_p;
860 }
861
862 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
863 unconditionally. Otherwise, use the normal logic to decide whether
864 or not to create a BLOCK. */
865
866 void
867 keep_next_level (keep)
868 int keep;
869 {
870 keep_next_level_flag = keep;
871 }
872
873 /* Nonzero if the current level needs to have a BLOCK made. */
874
875 int
876 kept_level_p ()
877 {
878 return (current_binding_level->blocks != NULL_TREE
879 || current_binding_level->keep
880 || current_binding_level->names != NULL_TREE
881 || (current_binding_level->tags != NULL_TREE
882 && !current_binding_level->tag_transparent));
883 }
884
885 /* Identify this binding level as a level of parameters. */
886
887 void
888 declare_parm_level ()
889 {
890 current_binding_level->parm_flag = 1;
891 }
892
893 void
894 declare_pseudo_global_level ()
895 {
896 current_binding_level->pseudo_global = 1;
897 }
898
899 static void
900 declare_namespace_level ()
901 {
902 current_binding_level->namespace_p = 1;
903 }
904
905 int
906 pseudo_global_level_p ()
907 {
908 return current_binding_level->pseudo_global;
909 }
910
911 void
912 set_class_shadows (shadows)
913 tree shadows;
914 {
915 class_binding_level->class_shadowed = shadows;
916 }
917
918 /* Enter a new binding level.
919 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
920 not for that of tags. */
921
922 void
923 pushlevel (tag_transparent)
924 int tag_transparent;
925 {
926 register struct binding_level *newlevel = NULL_BINDING_LEVEL;
927
928 /* If this is the top level of a function,
929 just make sure that NAMED_LABELS is 0.
930 They should have been set to 0 at the end of the previous function. */
931
932 if (current_binding_level == global_binding_level)
933 my_friendly_assert (named_labels == NULL_TREE, 134);
934
935 /* Reuse or create a struct for this binding level. */
936
937 #if defined(DEBUG_CP_BINDING_LEVELS)
938 if (0)
939 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
940 if (free_binding_level)
941 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
942 {
943 newlevel = free_binding_level;
944 free_binding_level = free_binding_level->level_chain;
945 }
946 else
947 newlevel = make_binding_level ();
948
949 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
950 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
951 keep_next_level_flag = 0;
952 }
953
954 void
955 note_level_for_for ()
956 {
957 current_binding_level->is_for_scope = 1;
958 }
959
960 void
961 pushlevel_temporary (tag_transparent)
962 int tag_transparent;
963 {
964 pushlevel (tag_transparent);
965 current_binding_level->keep = 2;
966 clear_last_expr ();
967
968 /* Note we don't call push_momentary() here. Otherwise, it would cause
969 cleanups to be allocated on the momentary obstack, and they will be
970 overwritten by the next statement. */
971
972 expand_start_bindings (0);
973 }
974
975 /* For a binding between a name and an entity at a block scope,
976 this is the `struct binding_level' for the block. */
977 #define BINDING_LEVEL(NODE) \
978 (((struct tree_binding*)NODE)->scope.level)
979
980 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
981 They are kept here because they are allocated from the permanent
982 obstack and cannot be easily freed. */
983 static tree free_binding_nodes;
984
985 /* Make DECL the innermost binding for ID. The LEVEL is the binding
986 level at which this declaration is being bound. */
987
988 static void
989 push_binding (id, decl, level)
990 tree id;
991 tree decl;
992 struct binding_level* level;
993 {
994 tree binding;
995
996 if (!free_binding_nodes)
997 {
998 /* There are no free nodes, so we must build one here. */
999 push_permanent_obstack ();
1000 binding = make_node (CPLUS_BINDING);
1001 pop_obstacks ();
1002 }
1003 else
1004 {
1005 /* There are nodes on the free list. Grab the first one. */
1006 binding = free_binding_nodes;
1007
1008 /* And update the free list. */
1009 free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1010 }
1011
1012 /* Now, fill in the binding information. */
1013 BINDING_VALUE (binding) = decl;
1014 BINDING_TYPE (binding) = NULL_TREE;
1015 BINDING_LEVEL (binding) = level;
1016 INHERITED_VALUE_BINDING_P (binding) = 0;
1017 LOCAL_BINDING_P (binding) = (level != class_binding_level);
1018
1019 /* And put it on the front of the list of bindings for ID. */
1020 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1021 IDENTIFIER_BINDING (id) = binding;
1022 }
1023
1024 /* ID is already bound in the current scope. But, DECL is an
1025 additional binding for ID in the same scope. This is the `struct
1026 stat' hack whereby a non-typedef class-name or enum-name can be
1027 bound at the same level as some other kind of entity. It's the
1028 responsibility of the caller to check that inserting this name is
1029 legal here. Returns nonzero if the new binding was successful. */
1030 static int
1031 add_binding (id, decl)
1032 tree id;
1033 tree decl;
1034 {
1035 tree binding = IDENTIFIER_BINDING (id);
1036 int ok = 1;
1037
1038 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1039 /* The new name is the type name. */
1040 BINDING_TYPE (binding) = decl;
1041 else if (!BINDING_VALUE (binding))
1042 /* This situation arises when push_class_level_binding moves an
1043 inherited type-binding out of the way to make room for a new
1044 value binding. */
1045 BINDING_VALUE (binding) = decl;
1046 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1047 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1048 {
1049 /* The old binding was a type name. It was placed in
1050 BINDING_VALUE because it was thought, at the point it was
1051 declared, to be the only entity with such a name. Move the
1052 type name into the type slot; it is now hidden by the new
1053 binding. */
1054 BINDING_TYPE (binding) = BINDING_VALUE (binding);
1055 BINDING_VALUE (binding) = decl;
1056 INHERITED_VALUE_BINDING_P (binding) = 0;
1057 }
1058 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1059 && TREE_CODE (decl) == TYPE_DECL
1060 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1061 && same_type_p (TREE_TYPE (decl),
1062 TREE_TYPE (BINDING_VALUE (binding))))
1063 /* We have two typedef-names, both naming the same type to have
1064 the same name. This is OK because of:
1065
1066 [dcl.typedef]
1067
1068 In a given scope, a typedef specifier can be used to redefine
1069 the name of any type declared in that scope to refer to the
1070 type to which it already refers. */
1071 ok = 0;
1072 else
1073 {
1074 cp_error ("declaration of `%#D'", decl);
1075 cp_error_at ("conflicts with previous declaration `%#D'",
1076 BINDING_VALUE (binding));
1077 ok = 0;
1078 }
1079
1080 return ok;
1081 }
1082
1083 /* Add DECL to the list of things declared in B. */
1084
1085 static void
1086 add_decl_to_level (decl, b)
1087 tree decl;
1088 struct binding_level *b;
1089 {
1090 /* Only things that will live forever should go in the global
1091 binding level. */
1092 my_friendly_assert (!(b == global_binding_level
1093 && !TREE_PERMANENT (decl)),
1094 19990817);
1095
1096 /* We build up the list in reverse order, and reverse it later if
1097 necessary. */
1098 TREE_CHAIN (decl) = b->names;
1099 b->names = decl;
1100 }
1101
1102 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1103 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1104 doesn't really belong to this binding level, that it got here
1105 through a using-declaration. */
1106
1107 void
1108 push_local_binding (id, decl, flags)
1109 tree id;
1110 tree decl;
1111 int flags;
1112 {
1113 struct binding_level *b;
1114
1115 /* Skip over any local classes. This makes sense if we call
1116 push_local_binding with a friend decl of a local class. */
1117 b = current_binding_level;
1118 while (b->parm_flag == 2)
1119 b = b->level_chain;
1120
1121 if (lookup_name_current_level (id))
1122 {
1123 /* Supplement the existing binding. */
1124 if (!add_binding (id, decl))
1125 /* It didn't work. Something else must be bound at this
1126 level. Do not add DECL to the list of things to pop
1127 later. */
1128 return;
1129 }
1130 else
1131 /* Create a new binding. */
1132 push_binding (id, decl, b);
1133
1134 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1135 /* We must put the OVERLOAD into a TREE_LIST since the
1136 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1137 decls that got here through a using-declaration. */
1138 decl = build_tree_list (NULL_TREE, decl);
1139
1140 /* And put DECL on the list of things declared by the current
1141 binding level. */
1142 add_decl_to_level (decl, b);
1143 }
1144
1145 /* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1146 binding was successful. */
1147
1148 int
1149 push_class_binding (id, decl)
1150 tree id;
1151 tree decl;
1152 {
1153 int result = 1;
1154 tree binding = IDENTIFIER_BINDING (id);
1155 tree context;
1156
1157 /* Note that we declared this value so that we can issue an error if
1158 this an illegal redeclaration of a name already used for some
1159 other purpose. */
1160 note_name_declared_in_class (id, decl);
1161
1162 if (binding && BINDING_LEVEL (binding) == class_binding_level)
1163 /* Supplement the existing binding. */
1164 result = add_binding (id, decl);
1165 else
1166 /* Create a new binding. */
1167 push_binding (id, decl, class_binding_level);
1168
1169 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1170 class-level declaration. Note that we do not use DECL here
1171 because of the possibility of the `struct stat' hack; if DECL is
1172 a class-name or enum-name we might prefer a field-name, or some
1173 such. */
1174 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1175
1176 /* If this is a binding from a base class, mark it as such. */
1177 binding = IDENTIFIER_BINDING (id);
1178 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1179 {
1180 /* Any implicit typename must be from a base-class. The
1181 context for an implicit typename declaration is always
1182 the derived class in which the lookup was done, so the checks
1183 based on the context of DECL below will not trigger. */
1184 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1185 INHERITED_VALUE_BINDING_P (binding) = 1;
1186 else
1187 {
1188 if (TREE_CODE (decl) == OVERLOAD)
1189 context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1190 else
1191 {
1192 my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1193 0);
1194 context = DECL_REAL_CONTEXT (decl);
1195 }
1196
1197 if (is_properly_derived_from (current_class_type, context))
1198 INHERITED_VALUE_BINDING_P (binding) = 1;
1199 else
1200 INHERITED_VALUE_BINDING_P (binding) = 0;
1201 }
1202 }
1203 else if (BINDING_VALUE (binding) == decl)
1204 /* We only encounter a TREE_LIST when push_class_decls detects an
1205 ambiguity. Such an ambiguity can be overridden by a definition
1206 in this class. */
1207 INHERITED_VALUE_BINDING_P (binding) = 1;
1208
1209 return result;
1210 }
1211
1212 /* Remove the binding for DECL which should be the innermost binding
1213 for ID. */
1214
1215 static void
1216 pop_binding (id, decl)
1217 tree id;
1218 tree decl;
1219 {
1220 tree binding;
1221
1222 if (id == NULL_TREE)
1223 /* It's easiest to write the loops that call this function without
1224 checking whether or not the entities involved have names. We
1225 get here for such an entity. */
1226 return;
1227
1228 /* Get the innermost binding for ID. */
1229 binding = IDENTIFIER_BINDING (id);
1230
1231 /* The name should be bound. */
1232 my_friendly_assert (binding != NULL_TREE, 0);
1233
1234 /* The DECL will be either the ordinary binding or the type
1235 binding for this identifier. Remove that binding. */
1236 if (BINDING_VALUE (binding) == decl)
1237 BINDING_VALUE (binding) = NULL_TREE;
1238 else if (BINDING_TYPE (binding) == decl)
1239 BINDING_TYPE (binding) = NULL_TREE;
1240 else
1241 my_friendly_abort (0);
1242
1243 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1244 {
1245 /* We're completely done with the innermost binding for this
1246 identifier. Unhook it from the list of bindings. */
1247 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1248
1249 /* And place it on the free list. */
1250 TREE_CHAIN (binding) = free_binding_nodes;
1251 free_binding_nodes = binding;
1252 }
1253 }
1254
1255 /* When a label goes out of scope, check to see if that label was used
1256 in a valid manner, and issue any appropriate warnings or errors. */
1257
1258 static void
1259 pop_label (link)
1260 tree link;
1261 {
1262 tree label = TREE_VALUE (link);
1263
1264 if (DECL_INITIAL (label) == NULL_TREE)
1265 {
1266 cp_error_at ("label `%D' used but not defined", label);
1267 /* Avoid crashing later. */
1268 define_label (input_filename, 1, DECL_NAME (label));
1269 }
1270 else if (warn_unused && !TREE_USED (label))
1271 cp_warning_at ("label `%D' defined but not used", label);
1272
1273 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1274 }
1275
1276 /* At the end of a function, all labels declared within the fucntion
1277 go out of scope. BLOCK is the top-level block for the
1278 function. */
1279
1280 static void
1281 pop_labels (block)
1282 tree block;
1283 {
1284 tree link;
1285
1286 /* Clear out the definitions of all label names, since their scopes
1287 end here. */
1288 for (link = named_labels; link; link = TREE_CHAIN (link))
1289 {
1290 pop_label (link);
1291 /* Put the labels into the "variables" of the top-level block,
1292 so debugger can see them. */
1293 TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1294 BLOCK_VARS (block) = TREE_VALUE (link);
1295 }
1296
1297 named_labels = NULL_TREE;
1298 }
1299
1300 /* Exit a binding level.
1301 Pop the level off, and restore the state of the identifier-decl mappings
1302 that were in effect when this level was entered.
1303
1304 If KEEP == 1, this level had explicit declarations, so
1305 and create a "block" (a BLOCK node) for the level
1306 to record its declarations and subblocks for symbol table output.
1307
1308 If FUNCTIONBODY is nonzero, this level is the body of a function,
1309 so create a block as if KEEP were set and also clear out all
1310 label names.
1311
1312 If REVERSE is nonzero, reverse the order of decls before putting
1313 them into the BLOCK. */
1314
1315 tree
1316 poplevel (keep, reverse, functionbody)
1317 int keep;
1318 int reverse;
1319 int functionbody;
1320 {
1321 register tree link;
1322 /* The chain of decls was accumulated in reverse order.
1323 Put it into forward order, just for cleanliness. */
1324 tree decls;
1325 int tmp = functionbody;
1326 int real_functionbody = current_binding_level->keep == 2
1327 ? ((functionbody = 0), tmp) : functionbody;
1328 tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1329 tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1330 tree block = NULL_TREE;
1331 tree decl;
1332 int block_previously_created;
1333 int leaving_for_scope;
1334
1335 if (current_binding_level->parm_flag == 2)
1336 return poplevel_class ();
1337
1338 my_friendly_assert (!current_binding_level->class_shadowed,
1339 19990414);
1340
1341 /* We used to use KEEP == 2 to indicate that the new block should go
1342 at the beginning of the list of blocks at this binding level,
1343 rather than the end. This hack is no longer used. */
1344 my_friendly_assert (keep == 0 || keep == 1, 0);
1345
1346 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1347 (HOST_WIDE_INT) current_binding_level->level_chain,
1348 current_binding_level->parm_flag,
1349 current_binding_level->keep);
1350
1351 if (current_binding_level->keep == 1)
1352 keep = 1;
1353
1354 /* Get the decls in the order they were written.
1355 Usually current_binding_level->names is in reverse order.
1356 But parameter decls were previously put in forward order. */
1357
1358 if (reverse)
1359 current_binding_level->names
1360 = decls = nreverse (current_binding_level->names);
1361 else
1362 decls = current_binding_level->names;
1363
1364 /* Output any nested inline functions within this block
1365 if they weren't already output. */
1366
1367 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1368 if (TREE_CODE (decl) == FUNCTION_DECL
1369 && ! TREE_ASM_WRITTEN (decl)
1370 && DECL_INITIAL (decl) != NULL_TREE
1371 && TREE_ADDRESSABLE (decl)
1372 && decl_function_context (decl) == current_function_decl)
1373 {
1374 /* If this decl was copied from a file-scope decl
1375 on account of a block-scope extern decl,
1376 propagate TREE_ADDRESSABLE to the file-scope decl. */
1377 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1378 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1379 else
1380 {
1381 push_function_context ();
1382 output_inline_function (decl);
1383 pop_function_context ();
1384 }
1385 }
1386
1387 /* If there were any declarations or structure tags in that level,
1388 or if this level is a function body,
1389 create a BLOCK to record them for the life of this function. */
1390
1391 block = NULL_TREE;
1392 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1393 if (block_previously_created)
1394 block = current_binding_level->this_block;
1395 else if (keep == 1 || functionbody)
1396 block = make_node (BLOCK);
1397 if (block != NULL_TREE)
1398 {
1399 if (block_previously_created)
1400 {
1401 if (decls || tags || subblocks)
1402 {
1403 if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1404 warning ("internal compiler error: debugging info corrupted");
1405
1406 BLOCK_VARS (block) = decls;
1407 BLOCK_TYPE_TAGS (block) = tags;
1408
1409 /* We can have previous subblocks and new subblocks when
1410 doing fixup_gotos with complex cleanups. We chain the new
1411 subblocks onto the end of any pre-existing subblocks. */
1412 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1413 subblocks);
1414 }
1415 /* If we created the block earlier on, and we are just
1416 diddling it now, then it already should have a proper
1417 BLOCK_END_NOTE value associated with it. */
1418 }
1419 else
1420 {
1421 BLOCK_VARS (block) = decls;
1422 BLOCK_TYPE_TAGS (block) = tags;
1423 BLOCK_SUBBLOCKS (block) = subblocks;
1424 /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1425 value. */
1426 remember_end_note (block);
1427 }
1428 }
1429
1430 /* In each subblock, record that this is its superior. */
1431
1432 if (keep >= 0)
1433 for (link = subblocks; link; link = TREE_CHAIN (link))
1434 BLOCK_SUPERCONTEXT (link) = block;
1435
1436 /* We still support the old for-scope rules, whereby the variables
1437 in a for-init statement were in scope after the for-statement
1438 ended. We only use the new rules in flag_new_for_scope is
1439 nonzero. */
1440 leaving_for_scope
1441 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1442
1443 /* Remove declarations for all the DECLs in this level. */
1444 for (link = decls; link; link = TREE_CHAIN (link))
1445 {
1446 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1447 {
1448 tree outer_binding
1449 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1450 tree ns_binding;
1451
1452 if (!outer_binding)
1453 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1454 else
1455 ns_binding = NULL_TREE;
1456
1457 if (outer_binding
1458 && (BINDING_LEVEL (outer_binding)
1459 == current_binding_level->level_chain))
1460 /* We have something like:
1461
1462 int i;
1463 for (int i; ;);
1464
1465 and we are leaving the `for' scope. There's no reason to
1466 keep the binding of the inner `i' in this case. */
1467 pop_binding (DECL_NAME (link), link);
1468 else if ((outer_binding
1469 && (TREE_CODE (BINDING_VALUE (outer_binding))
1470 == TYPE_DECL))
1471 || (ns_binding
1472 && TREE_CODE (ns_binding) == TYPE_DECL))
1473 /* Here, we have something like:
1474
1475 typedef int I;
1476
1477 void f () {
1478 for (int I; ;);
1479 }
1480
1481 We must pop the for-scope binding so we know what's a
1482 type and what isn't. */
1483 pop_binding (DECL_NAME (link), link);
1484 else
1485 {
1486 /* Mark this VAR_DECL as dead so that we can tell we left it
1487 there only for backward compatibility. */
1488 DECL_DEAD_FOR_LOCAL (link) = 1;
1489
1490 /* Keep track of what should of have happenned when we
1491 popped the binding. */
1492 if (outer_binding && BINDING_VALUE (outer_binding))
1493 DECL_SHADOWED_FOR_VAR (link)
1494 = BINDING_VALUE (outer_binding);
1495
1496 /* Add it to the list of dead variables in the next
1497 outermost binding to that we can remove these when we
1498 leave that binding. */
1499 current_binding_level->level_chain->dead_vars_from_for
1500 = tree_cons (NULL_TREE, link,
1501 current_binding_level->level_chain->
1502 dead_vars_from_for);
1503
1504 /* Although we don't pop the CPLUS_BINDING, we do clear
1505 its BINDING_LEVEL since the level is going away now. */
1506 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1507 = 0;
1508 }
1509 }
1510 else
1511 {
1512 /* Remove the binding. */
1513 decl = link;
1514 if (TREE_CODE (decl) == TREE_LIST)
1515 decl = TREE_VALUE (decl);
1516 if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1517 pop_binding (DECL_NAME (decl), decl);
1518 else if (TREE_CODE (decl) == OVERLOAD)
1519 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1520 else
1521 my_friendly_abort (0);
1522 }
1523 }
1524
1525 /* Remove declarations for any `for' variables from inner scopes
1526 that we kept around. */
1527 for (link = current_binding_level->dead_vars_from_for;
1528 link; link = TREE_CHAIN (link))
1529 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1530
1531 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1532 for (link = current_binding_level->type_shadowed;
1533 link; link = TREE_CHAIN (link))
1534 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1535
1536 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1537 for (link = current_binding_level->shadowed_labels;
1538 link;
1539 link = TREE_CHAIN (link))
1540 pop_label (link);
1541
1542 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1543 list if a `using' declaration put them there. The debugging
1544 back-ends won't understand OVERLOAD, so we remove them here.
1545 Because the BLOCK_VARS are (temporarily) shared with
1546 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1547 popped all the bindings. */
1548 if (block)
1549 {
1550 tree* d;
1551
1552 for (d = &BLOCK_VARS (block); *d; )
1553 {
1554 if (TREE_CODE (*d) == TREE_LIST)
1555 *d = TREE_CHAIN (*d);
1556 else
1557 d = &TREE_CHAIN (*d);
1558 }
1559 }
1560
1561 /* If the level being exited is the top level of a function,
1562 check over all the labels. */
1563 if (functionbody)
1564 {
1565 /* Since this is the top level block of a function, the vars are
1566 the function's parameters. Don't leave them in the BLOCK
1567 because they are found in the FUNCTION_DECL instead. */
1568 BLOCK_VARS (block) = 0;
1569 pop_labels (block);
1570 }
1571
1572 /* Any uses of undefined labels now operate under constraints
1573 of next binding contour. */
1574 {
1575 struct binding_level *level_chain;
1576 level_chain = current_binding_level->level_chain;
1577 if (level_chain)
1578 {
1579 struct named_label_list *labels;
1580 for (labels = named_label_uses; labels; labels = labels->next)
1581 if (labels->binding_level == current_binding_level)
1582 {
1583 labels->binding_level = level_chain;
1584 labels->names_in_scope = level_chain->names;
1585 }
1586 }
1587 }
1588
1589 tmp = current_binding_level->keep;
1590
1591 pop_binding_level ();
1592 if (functionbody)
1593 DECL_INITIAL (current_function_decl) = block;
1594 else if (block)
1595 {
1596 if (!block_previously_created)
1597 current_binding_level->blocks
1598 = chainon (current_binding_level->blocks, block);
1599 }
1600 /* If we did not make a block for the level just exited,
1601 any blocks made for inner levels
1602 (since they cannot be recorded as subblocks in that level)
1603 must be carried forward so they will later become subblocks
1604 of something else. */
1605 else if (subblocks)
1606 current_binding_level->blocks
1607 = chainon (current_binding_level->blocks, subblocks);
1608
1609 /* Take care of compiler's internal binding structures. */
1610 if (tmp == 2)
1611 {
1612 expand_end_bindings (getdecls (), keep, 1);
1613 /* Each and every BLOCK node created here in `poplevel' is important
1614 (e.g. for proper debugging information) so if we created one
1615 earlier, mark it as "used". */
1616 if (block)
1617 TREE_USED (block) = 1;
1618 block = poplevel (keep, reverse, real_functionbody);
1619 }
1620
1621 /* Each and every BLOCK node created here in `poplevel' is important
1622 (e.g. for proper debugging information) so if we created one
1623 earlier, mark it as "used". */
1624 if (block)
1625 TREE_USED (block) = 1;
1626 return block;
1627 }
1628
1629 /* Delete the node BLOCK from the current binding level.
1630 This is used for the block inside a stmt expr ({...})
1631 so that the block can be reinserted where appropriate. */
1632
1633 void
1634 delete_block (block)
1635 tree block;
1636 {
1637 tree t;
1638 if (current_binding_level->blocks == block)
1639 current_binding_level->blocks = TREE_CHAIN (block);
1640 for (t = current_binding_level->blocks; t;)
1641 {
1642 if (TREE_CHAIN (t) == block)
1643 TREE_CHAIN (t) = TREE_CHAIN (block);
1644 else
1645 t = TREE_CHAIN (t);
1646 }
1647 TREE_CHAIN (block) = NULL_TREE;
1648 /* Clear TREE_USED which is always set by poplevel.
1649 The flag is set again if insert_block is called. */
1650 TREE_USED (block) = 0;
1651 }
1652
1653 /* Insert BLOCK at the end of the list of subblocks of the
1654 current binding level. This is used when a BIND_EXPR is expanded,
1655 to handle the BLOCK node inside the BIND_EXPR. */
1656
1657 void
1658 insert_block (block)
1659 tree block;
1660 {
1661 TREE_USED (block) = 1;
1662 current_binding_level->blocks
1663 = chainon (current_binding_level->blocks, block);
1664 }
1665
1666 /* Set the BLOCK node for the innermost scope
1667 (the one we are currently in). */
1668
1669 void
1670 set_block (block)
1671 register tree block;
1672 {
1673 current_binding_level->this_block = block;
1674 }
1675
1676 /* Do a pushlevel for class declarations. */
1677
1678 void
1679 pushlevel_class ()
1680 {
1681 register struct binding_level *newlevel;
1682
1683 /* Reuse or create a struct for this binding level. */
1684 #if defined(DEBUG_CP_BINDING_LEVELS)
1685 if (0)
1686 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1687 if (free_binding_level)
1688 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1689 {
1690 newlevel = free_binding_level;
1691 free_binding_level = free_binding_level->level_chain;
1692 }
1693 else
1694 newlevel = make_binding_level ();
1695
1696 #if defined(DEBUG_CP_BINDING_LEVELS)
1697 is_class_level = 1;
1698 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1699
1700 push_binding_level (newlevel, 0, 0);
1701
1702 decl_stack = push_decl_level (decl_stack, &decl_obstack);
1703 class_binding_level = current_binding_level;
1704 class_binding_level->parm_flag = 2;
1705 }
1706
1707 /* ...and a poplevel for class declarations. */
1708
1709 static tree
1710 poplevel_class ()
1711 {
1712 register struct binding_level *level = class_binding_level;
1713 tree shadowed;
1714
1715 my_friendly_assert (level != 0, 354);
1716
1717 decl_stack = pop_stack_level (decl_stack);
1718 /* If we're leaving a toplevel class, don't bother to do the setting
1719 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1720 shouldn't even be used when current_class_type isn't set, and second,
1721 if we don't touch it here, we're able to use the cache effect if the
1722 next time we're entering a class scope, it is the same class. */
1723 if (current_class_depth != 1)
1724 {
1725 struct binding_level* b;
1726
1727 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1728 for (shadowed = level->class_shadowed;
1729 shadowed;
1730 shadowed = TREE_CHAIN (shadowed))
1731 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1732
1733 /* Find the next enclosing class, and recreate
1734 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1735 b = level->level_chain;
1736 while (b && b->parm_flag != 2)
1737 b = b->level_chain;
1738
1739 if (b)
1740 for (shadowed = b->class_shadowed;
1741 shadowed;
1742 shadowed = TREE_CHAIN (shadowed))
1743 {
1744 tree t;
1745
1746 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1747 while (t && BINDING_LEVEL (t) != b)
1748 t = TREE_CHAIN (t);
1749
1750 if (t)
1751 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1752 = BINDING_VALUE (t);
1753 }
1754 }
1755 else
1756 /* Remember to save what IDENTIFIER's were bound in this scope so we
1757 can recover from cache misses. */
1758 {
1759 previous_class_type = current_class_type;
1760 previous_class_values = class_binding_level->class_shadowed;
1761 }
1762 for (shadowed = level->type_shadowed;
1763 shadowed;
1764 shadowed = TREE_CHAIN (shadowed))
1765 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1766
1767 /* Remove the bindings for all of the class-level declarations. */
1768 for (shadowed = level->class_shadowed;
1769 shadowed;
1770 shadowed = TREE_CHAIN (shadowed))
1771 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1772
1773 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1774 (HOST_WIDE_INT) class_binding_level->level_chain,
1775 class_binding_level->parm_flag,
1776 class_binding_level->keep);
1777
1778 /* Now, pop out of the binding level which we created up in the
1779 `pushlevel_class' routine. */
1780 #if defined(DEBUG_CP_BINDING_LEVELS)
1781 is_class_level = 1;
1782 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1783
1784 pop_binding_level ();
1785
1786 return NULL_TREE;
1787 }
1788
1789 /* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1790 for any names in enclosing classes. */
1791
1792 void
1793 clear_identifier_class_values ()
1794 {
1795 tree t;
1796
1797 if (!class_binding_level)
1798 return;
1799
1800 for (t = class_binding_level->class_shadowed;
1801 t;
1802 t = TREE_CHAIN (t))
1803 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1804 }
1805
1806 /* Returns non-zero if T is a virtual function table. */
1807
1808 int
1809 vtable_decl_p (t, data)
1810 tree t;
1811 void *data ATTRIBUTE_UNUSED;
1812 {
1813 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1814 }
1815
1816 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1817 functions. */
1818
1819 int
1820 vtype_decl_p (t, data)
1821 tree t;
1822 void *data ATTRIBUTE_UNUSED;
1823 {
1824 return (TREE_CODE (t) == TYPE_DECL
1825 && TREE_TYPE (t) != error_mark_node
1826 && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1827 && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1828 }
1829
1830 /* Return the declarations that are members of the namespace NS. */
1831
1832 tree
1833 cp_namespace_decls (ns)
1834 tree ns;
1835 {
1836 return NAMESPACE_LEVEL (ns)->names;
1837 }
1838
1839 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1840 itself, calling F for each. The DATA is passed to F as well. */
1841
1842 static int
1843 walk_namespaces_r (namespace, f, data)
1844 tree namespace;
1845 walk_namespaces_fn f;
1846 void *data;
1847 {
1848 tree current;
1849 int result = 0;
1850
1851 result |= (*f) (namespace, data);
1852
1853 for (current = cp_namespace_decls (namespace);
1854 current;
1855 current = TREE_CHAIN (current))
1856 {
1857 if (TREE_CODE (current) != NAMESPACE_DECL
1858 || DECL_NAMESPACE_ALIAS (current))
1859 continue;
1860 if (!DECL_LANG_SPECIFIC (current))
1861 {
1862 /* Hmm. std. */
1863 my_friendly_assert (current == std_node, 393);
1864 continue;
1865 }
1866
1867 /* We found a namespace. */
1868 result |= walk_namespaces_r (current, f, data);
1869 }
1870
1871 return result;
1872 }
1873
1874 /* Walk all the namespaces, calling F for each. The DATA is passed to
1875 F as well. */
1876
1877 int
1878 walk_namespaces (f, data)
1879 walk_namespaces_fn f;
1880 void *data;
1881 {
1882 return walk_namespaces_r (global_namespace, f, data);
1883 }
1884
1885 struct walk_globals_data {
1886 walk_globals_pred p;
1887 walk_globals_fn f;
1888 void *data;
1889 };
1890
1891 /* Walk the global declarations in NAMESPACE. Whenever one is found
1892 for which P returns non-zero, call F with its address. If any call
1893 to F returns a non-zero value, return a non-zero value. */
1894
1895 static int
1896 walk_globals_r (namespace, data)
1897 tree namespace;
1898 void *data;
1899 {
1900 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1901 walk_globals_pred p = wgd->p;
1902 walk_globals_fn f = wgd->f;
1903 void *d = wgd->data;
1904 tree *t;
1905 int result = 0;
1906
1907 t = &NAMESPACE_LEVEL (namespace)->names;
1908
1909 while (*t)
1910 {
1911 tree glbl = *t;
1912
1913 if ((*p) (glbl, d))
1914 result |= (*f) (t, d);
1915
1916 /* If F changed *T, then *T still points at the next item to
1917 examine. */
1918 if (*t == glbl)
1919 t = &TREE_CHAIN (*t);
1920 }
1921
1922 return result;
1923 }
1924
1925 /* Walk the global declarations. Whenever one is found for which P
1926 returns non-zero, call F with its address. If any call to F
1927 returns a non-zero value, return a non-zero value. */
1928
1929 int
1930 walk_globals (p, f, data)
1931 walk_globals_pred p;
1932 walk_globals_fn f;
1933 void *data;
1934 {
1935 struct walk_globals_data wgd;
1936 wgd.p = p;
1937 wgd.f = f;
1938 wgd.data = data;
1939
1940 return walk_namespaces (walk_globals_r, &wgd);
1941 }
1942
1943 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1944 DATA is non-NULL, this is the last time we will call
1945 wrapup_global_declarations for this NAMESPACE. */
1946
1947 int
1948 wrapup_globals_for_namespace (namespace, data)
1949 tree namespace;
1950 void *data;
1951 {
1952 tree globals = cp_namespace_decls (namespace);
1953 int len = list_length (globals);
1954 tree *vec = (tree *) alloca (sizeof (tree) * len);
1955 int i;
1956 int result;
1957 tree decl;
1958 int last_time = (data != 0);
1959
1960 if (last_time && namespace == global_namespace)
1961 /* Let compile_file handle the global namespace. */
1962 return 0;
1963
1964 /* Process the decls in reverse order--earliest first.
1965 Put them into VEC from back to front, then take out from front. */
1966
1967 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1968 vec[len - i - 1] = decl;
1969
1970 if (last_time)
1971 {
1972 check_global_declarations (vec, len);
1973 return 0;
1974 }
1975
1976 /* Temporarily mark vtables as external. That prevents
1977 wrapup_global_declarations from writing them out; we must process
1978 them ourselves in finish_vtable_vardecl. */
1979 for (i = 0; i < len; ++i)
1980 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1981 {
1982 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1983 DECL_EXTERNAL (vec[i]) = 1;
1984 }
1985
1986 /* Write out any globals that need to be output. */
1987 result = wrapup_global_declarations (vec, len);
1988
1989 /* Undo the hack to DECL_EXTERNAL above. */
1990 for (i = 0; i < len; ++i)
1991 if (vtable_decl_p (vec[i], /*data=*/0)
1992 && DECL_NOT_REALLY_EXTERN (vec[i]))
1993 {
1994 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1995 DECL_EXTERNAL (vec[i]) = 0;
1996 }
1997
1998 return result;
1999 }
2000
2001 \f
2002 /* For debugging. */
2003 static int no_print_functions = 0;
2004 static int no_print_builtins = 0;
2005
2006 void
2007 print_binding_level (lvl)
2008 struct binding_level *lvl;
2009 {
2010 tree t;
2011 int i = 0, len;
2012 fprintf (stderr, " blocks=");
2013 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
2014 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
2015 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
2016 if (lvl->tag_transparent)
2017 fprintf (stderr, " tag-transparent");
2018 if (lvl->more_cleanups_ok)
2019 fprintf (stderr, " more-cleanups-ok");
2020 if (lvl->have_cleanups)
2021 fprintf (stderr, " have-cleanups");
2022 fprintf (stderr, "\n");
2023 if (lvl->names)
2024 {
2025 fprintf (stderr, " names:\t");
2026 /* We can probably fit 3 names to a line? */
2027 for (t = lvl->names; t; t = TREE_CHAIN (t))
2028 {
2029 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
2030 continue;
2031 if (no_print_builtins
2032 && (TREE_CODE (t) == TYPE_DECL)
2033 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2034 continue;
2035
2036 /* Function decls tend to have longer names. */
2037 if (TREE_CODE (t) == FUNCTION_DECL)
2038 len = 3;
2039 else
2040 len = 2;
2041 i += len;
2042 if (i > 6)
2043 {
2044 fprintf (stderr, "\n\t");
2045 i = len;
2046 }
2047 print_node_brief (stderr, "", t, 0);
2048 if (t == error_mark_node)
2049 break;
2050 }
2051 if (i)
2052 fprintf (stderr, "\n");
2053 }
2054 if (lvl->tags)
2055 {
2056 fprintf (stderr, " tags:\t");
2057 i = 0;
2058 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2059 {
2060 if (TREE_PURPOSE (t) == NULL_TREE)
2061 len = 3;
2062 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2063 len = 2;
2064 else
2065 len = 4;
2066 i += len;
2067 if (i > 5)
2068 {
2069 fprintf (stderr, "\n\t");
2070 i = len;
2071 }
2072 if (TREE_PURPOSE (t) == NULL_TREE)
2073 {
2074 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2075 fprintf (stderr, ">");
2076 }
2077 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2078 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2079 else
2080 {
2081 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2082 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2083 fprintf (stderr, ">");
2084 }
2085 }
2086 if (i)
2087 fprintf (stderr, "\n");
2088 }
2089 if (lvl->class_shadowed)
2090 {
2091 fprintf (stderr, " class-shadowed:");
2092 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2093 {
2094 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2095 }
2096 fprintf (stderr, "\n");
2097 }
2098 if (lvl->type_shadowed)
2099 {
2100 fprintf (stderr, " type-shadowed:");
2101 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2102 {
2103 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2104 }
2105 fprintf (stderr, "\n");
2106 }
2107 }
2108
2109 void
2110 print_other_binding_stack (stack)
2111 struct binding_level *stack;
2112 {
2113 struct binding_level *level;
2114 for (level = stack; level != global_binding_level; level = level->level_chain)
2115 {
2116 fprintf (stderr, "binding level ");
2117 fprintf (stderr, HOST_PTR_PRINTF, level);
2118 fprintf (stderr, "\n");
2119 print_binding_level (level);
2120 }
2121 }
2122
2123 void
2124 print_binding_stack ()
2125 {
2126 struct binding_level *b;
2127 fprintf (stderr, "current_binding_level=");
2128 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2129 fprintf (stderr, "\nclass_binding_level=");
2130 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2131 fprintf (stderr, "\nglobal_binding_level=");
2132 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2133 fprintf (stderr, "\n");
2134 if (class_binding_level)
2135 {
2136 for (b = class_binding_level; b; b = b->level_chain)
2137 if (b == current_binding_level)
2138 break;
2139 if (b)
2140 b = class_binding_level;
2141 else
2142 b = current_binding_level;
2143 }
2144 else
2145 b = current_binding_level;
2146 print_other_binding_stack (b);
2147 fprintf (stderr, "global:\n");
2148 print_binding_level (global_binding_level);
2149 }
2150
2151 /* Namespace binding access routines: The namespace_bindings field of
2152 the identifier is polymorphic, with three possible values:
2153 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2154 indicating the BINDING_VALUE of global_namespace. */
2155
2156 /* Check whether the a binding for the name to scope is known.
2157 Assumes that the bindings of the name are already a list
2158 of bindings. Returns the binding found, or NULL_TREE. */
2159
2160 static tree
2161 find_binding (name, scope)
2162 tree name;
2163 tree scope;
2164 {
2165 tree iter, prev = NULL_TREE;
2166
2167 scope = ORIGINAL_NAMESPACE (scope);
2168
2169 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2170 iter = TREE_CHAIN (iter))
2171 {
2172 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2173 if (BINDING_SCOPE (iter) == scope)
2174 {
2175 /* Move binding found to the front of the list, so
2176 subsequent lookups will find it faster. */
2177 if (prev)
2178 {
2179 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2180 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2181 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2182 }
2183 return iter;
2184 }
2185 prev = iter;
2186 }
2187 return NULL_TREE;
2188 }
2189
2190 /* Always returns a binding for name in scope. If the
2191 namespace_bindings is not a list, convert it to one first.
2192 If no binding is found, make a new one. */
2193
2194 tree
2195 binding_for_name (name, scope)
2196 tree name;
2197 tree scope;
2198 {
2199 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2200 tree result;
2201
2202 scope = ORIGINAL_NAMESPACE (scope);
2203
2204 if (b && TREE_CODE (b) != CPLUS_BINDING)
2205 {
2206 /* Get rid of optimization for global scope. */
2207 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2208 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2209 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2210 }
2211 if (b && (result = find_binding (name, scope)))
2212 return result;
2213 /* Not found, make a new permanent one. */
2214 push_obstacks (&permanent_obstack, &permanent_obstack);
2215 result = make_node (CPLUS_BINDING);
2216 TREE_CHAIN (result) = b;
2217 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2218 BINDING_SCOPE (result) = scope;
2219 BINDING_TYPE (result) = NULL_TREE;
2220 BINDING_VALUE (result) = NULL_TREE;
2221 pop_obstacks ();
2222 return result;
2223 }
2224
2225 /* Return the binding value for name in scope, considering that
2226 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2227
2228 tree
2229 namespace_binding (name, scope)
2230 tree name;
2231 tree scope;
2232 {
2233 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2234 if (b == NULL_TREE)
2235 return NULL_TREE;
2236 if (scope == NULL_TREE)
2237 scope = global_namespace;
2238 if (TREE_CODE (b) != CPLUS_BINDING)
2239 return (scope == global_namespace) ? b : NULL_TREE;
2240 name = find_binding (name,scope);
2241 if (name == NULL_TREE)
2242 return name;
2243 return BINDING_VALUE (name);
2244 }
2245
2246 /* Set the binding value for name in scope. If modifying the binding
2247 of global_namespace is attempted, try to optimize it. */
2248
2249 void
2250 set_namespace_binding (name, scope, val)
2251 tree name;
2252 tree scope;
2253 tree val;
2254 {
2255 tree b;
2256
2257 if (scope == NULL_TREE)
2258 scope = global_namespace;
2259
2260 if (scope == global_namespace)
2261 {
2262 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2263 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2264 {
2265 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2266 return;
2267 }
2268 }
2269 b = binding_for_name (name, scope);
2270 BINDING_VALUE (b) = val;
2271 }
2272
2273 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2274 select a name that is unique to this compilation unit. */
2275
2276 void
2277 push_namespace (name)
2278 tree name;
2279 {
2280 tree d = NULL_TREE;
2281 int need_new = 1;
2282 int implicit_use = 0;
2283 int global = 0;
2284 if (!global_namespace)
2285 {
2286 /* This must be ::. */
2287 my_friendly_assert (name == get_identifier ("::"), 377);
2288 global = 1;
2289 }
2290 else if (!name)
2291 {
2292 /* The name of anonymous namespace is unique for the translation
2293 unit. */
2294 if (!anonymous_namespace_name)
2295 anonymous_namespace_name = get_file_function_name ('N');
2296 name = anonymous_namespace_name;
2297 d = IDENTIFIER_NAMESPACE_VALUE (name);
2298 if (d)
2299 /* Reopening anonymous namespace. */
2300 need_new = 0;
2301 implicit_use = 1;
2302 }
2303 else if (current_namespace == global_namespace
2304 && name == DECL_NAME (std_node))
2305 {
2306 in_std++;
2307 return;
2308 }
2309 else
2310 {
2311 /* Check whether this is an extended namespace definition. */
2312 d = IDENTIFIER_NAMESPACE_VALUE (name);
2313 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2314 {
2315 need_new = 0;
2316 if (DECL_NAMESPACE_ALIAS (d))
2317 {
2318 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2319 d, DECL_NAMESPACE_ALIAS (d));
2320 d = DECL_NAMESPACE_ALIAS (d);
2321 }
2322 }
2323 }
2324
2325 if (need_new)
2326 {
2327 /* Make a new namespace, binding the name to it. */
2328 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2329 /* The global namespace is not pushed, and the global binding
2330 level is set elsewhere. */
2331 if (!global)
2332 {
2333 d = pushdecl (d);
2334 pushlevel (0);
2335 declare_namespace_level ();
2336 NAMESPACE_LEVEL (d) = current_binding_level;
2337 }
2338 }
2339 else
2340 resume_binding_level (NAMESPACE_LEVEL (d));
2341
2342 if (implicit_use)
2343 do_using_directive (d);
2344 /* Enter the name space. */
2345 current_namespace = d;
2346 }
2347
2348 /* Pop from the scope of the current namespace. */
2349
2350 void
2351 pop_namespace ()
2352 {
2353 if (current_namespace == global_namespace)
2354 {
2355 my_friendly_assert (in_std>0, 980421);
2356 in_std--;
2357 return;
2358 }
2359 current_namespace = CP_DECL_CONTEXT (current_namespace);
2360 /* The binding level is not popped, as it might be re-opened later. */
2361 suspend_binding_level ();
2362 }
2363
2364 /* Push into the scope of the namespace NS, even if it is deeply
2365 nested within another namespace. */
2366
2367 void
2368 push_nested_namespace (ns)
2369 tree ns;
2370 {
2371 if (ns == global_namespace)
2372 push_to_top_level ();
2373 else
2374 {
2375 push_nested_namespace (CP_DECL_CONTEXT (ns));
2376 push_namespace (DECL_NAME (ns));
2377 }
2378 }
2379
2380 /* Pop back from the scope of the namespace NS, which was previously
2381 entered with push_nested_namespace. */
2382
2383 void
2384 pop_nested_namespace (ns)
2385 tree ns;
2386 {
2387 while (ns != global_namespace)
2388 {
2389 pop_namespace ();
2390 ns = CP_DECL_CONTEXT (ns);
2391 }
2392
2393 pop_from_top_level ();
2394 }
2395
2396 \f
2397 /* Subroutines for reverting temporarily to top-level for instantiation
2398 of templates and such. We actually need to clear out the class- and
2399 local-value slots of all identifiers, so that only the global values
2400 are at all visible. Simply setting current_binding_level to the global
2401 scope isn't enough, because more binding levels may be pushed. */
2402 struct saved_scope {
2403 struct binding_level *old_binding_level;
2404 tree old_bindings;
2405 tree old_namespace;
2406 struct saved_scope *prev;
2407 tree class_name, class_type;
2408 tree access_specifier;
2409 tree function_decl;
2410 struct binding_level *class_bindings;
2411 tree *lang_base, *lang_stack, lang_name;
2412 int lang_stacksize;
2413 tree last_function_parms;
2414 tree template_parms;
2415 HOST_WIDE_INT processing_template_decl;
2416 tree previous_class_type, previous_class_values;
2417 int processing_specialization;
2418 int processing_explicit_instantiation;
2419 char *class_cache_firstobj;
2420 };
2421 static struct saved_scope *current_saved_scope;
2422
2423 /* A chain of the binding vecs created by store_bindings. We create a
2424 whole bunch of these during compilation, on permanent_obstack, so we
2425 can't just throw them away. */
2426 static tree free_binding_vecs;
2427
2428 static tree
2429 store_bindings (names, old_bindings)
2430 tree names, old_bindings;
2431 {
2432 tree t;
2433 for (t = names; t; t = TREE_CHAIN (t))
2434 {
2435 tree binding, t1, id;
2436
2437 if (TREE_CODE (t) == TREE_LIST)
2438 id = TREE_PURPOSE (t);
2439 else
2440 id = DECL_NAME (t);
2441
2442 if (!id
2443 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2444 we have no IDENTIFIER_BINDING if we have left the class
2445 scope, but cached the class-level declarations. */
2446 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2447 continue;
2448
2449 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2450 if (TREE_VEC_ELT (t1, 0) == id)
2451 goto skip_it;
2452
2453 if (free_binding_vecs)
2454 {
2455 binding = free_binding_vecs;
2456 free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2457 }
2458 else
2459 binding = make_tree_vec (4);
2460
2461 if (id)
2462 {
2463 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2464 TREE_VEC_ELT (binding, 0) = id;
2465 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2466 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2467 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2468 IDENTIFIER_BINDING (id) = NULL_TREE;
2469 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2470 }
2471 TREE_CHAIN (binding) = old_bindings;
2472 old_bindings = binding;
2473 skip_it:
2474 ;
2475 }
2476 return old_bindings;
2477 }
2478
2479 void
2480 maybe_push_to_top_level (pseudo)
2481 int pseudo;
2482 {
2483 extern int current_lang_stacksize;
2484 struct saved_scope *s
2485 = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2486 struct binding_level *b = current_binding_level;
2487 tree old_bindings = NULL_TREE;
2488
2489 push_function_context_to (NULL_TREE);
2490
2491 if (previous_class_type)
2492 old_bindings = store_bindings (previous_class_values, old_bindings);
2493
2494 /* Have to include global_binding_level, because class-level decls
2495 aren't listed anywhere useful. */
2496 for (; b; b = b->level_chain)
2497 {
2498 tree t;
2499
2500 /* Template IDs are inserted into the global level. If they were
2501 inserted into namespace level, finish_file wouldn't find them
2502 when doing pending instantiations. Therefore, don't stop at
2503 namespace level, but continue until :: . */
2504 if (b == global_binding_level || (pseudo && b->pseudo_global))
2505 break;
2506
2507 old_bindings = store_bindings (b->names, old_bindings);
2508 /* We also need to check class_shadowed to save class-level type
2509 bindings, since pushclass doesn't fill in b->names. */
2510 if (b->parm_flag == 2)
2511 old_bindings = store_bindings (b->class_shadowed, old_bindings);
2512
2513 /* Unwind type-value slots back to top level. */
2514 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2515 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2516 }
2517
2518 s->old_binding_level = current_binding_level;
2519 current_binding_level = b;
2520
2521 s->old_namespace = current_namespace;
2522 s->class_name = current_class_name;
2523 s->class_type = current_class_type;
2524 s->access_specifier = current_access_specifier;
2525 s->function_decl = current_function_decl;
2526 s->class_bindings = class_binding_level;
2527 s->lang_stack = current_lang_stack;
2528 s->lang_base = current_lang_base;
2529 s->lang_stacksize = current_lang_stacksize;
2530 s->lang_name = current_lang_name;
2531 s->last_function_parms = last_function_parms;
2532 s->template_parms = current_template_parms;
2533 s->processing_template_decl = processing_template_decl;
2534 s->previous_class_type = previous_class_type;
2535 s->previous_class_values = previous_class_values;
2536 s->class_cache_firstobj = class_cache_firstobj;
2537 s->processing_specialization = processing_specialization;
2538 s->processing_explicit_instantiation = processing_explicit_instantiation;
2539
2540 current_class_name = current_class_type = NULL_TREE;
2541 current_function_decl = NULL_TREE;
2542 class_binding_level = (struct binding_level *)0;
2543 current_lang_stacksize = 10;
2544 current_lang_stack = current_lang_base
2545 = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2546 current_lang_name = lang_name_cplusplus;
2547 strict_prototype = strict_prototypes_lang_cplusplus;
2548 named_labels = NULL_TREE;
2549 previous_class_type = previous_class_values = NULL_TREE;
2550 class_cache_firstobj = 0;
2551 processing_specialization = 0;
2552 processing_explicit_instantiation = 0;
2553 current_template_parms = NULL_TREE;
2554 processing_template_decl = 0;
2555 current_namespace = global_namespace;
2556
2557 s->prev = current_saved_scope;
2558 s->old_bindings = old_bindings;
2559 current_saved_scope = s;
2560
2561 push_obstacks (&permanent_obstack, &permanent_obstack);
2562 }
2563
2564 void
2565 push_to_top_level ()
2566 {
2567 maybe_push_to_top_level (0);
2568 }
2569
2570 void
2571 pop_from_top_level ()
2572 {
2573 extern int current_lang_stacksize;
2574 struct saved_scope *s = current_saved_scope;
2575 tree t;
2576
2577 /* Clear out class-level bindings cache. */
2578 if (previous_class_type)
2579 invalidate_class_lookup_cache ();
2580
2581 pop_obstacks ();
2582
2583 current_binding_level = s->old_binding_level;
2584 current_saved_scope = s->prev;
2585 for (t = s->old_bindings; t; )
2586 {
2587 tree save = t;
2588 tree id = TREE_VEC_ELT (t, 0);
2589 if (id)
2590 {
2591 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2592 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2593 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2594 }
2595 t = TREE_CHAIN (t);
2596 TREE_CHAIN (save) = free_binding_vecs;
2597 free_binding_vecs = save;
2598 }
2599 current_namespace = s->old_namespace;
2600 current_class_name = s->class_name;
2601 current_class_type = s->class_type;
2602 current_access_specifier = s->access_specifier;
2603 current_function_decl = s->function_decl;
2604 class_binding_level = s->class_bindings;
2605 free (current_lang_base);
2606 current_lang_base = s->lang_base;
2607 current_lang_stack = s->lang_stack;
2608 current_lang_name = s->lang_name;
2609 current_lang_stacksize = s->lang_stacksize;
2610 if (current_lang_name == lang_name_cplusplus)
2611 strict_prototype = strict_prototypes_lang_cplusplus;
2612 else if (current_lang_name == lang_name_c)
2613 strict_prototype = strict_prototypes_lang_c;
2614 last_function_parms = s->last_function_parms;
2615 current_template_parms = s->template_parms;
2616 processing_template_decl = s->processing_template_decl;
2617 previous_class_type = s->previous_class_type;
2618 previous_class_values = s->previous_class_values;
2619 processing_specialization = s->processing_specialization;
2620 processing_explicit_instantiation = s->processing_explicit_instantiation;
2621 class_cache_firstobj = s->class_cache_firstobj;
2622
2623 free (s);
2624
2625 pop_function_context_from (NULL_TREE);
2626 }
2627 \f
2628 /* Push a definition of struct, union or enum tag "name".
2629 into binding_level "b". "type" should be the type node,
2630 We assume that the tag "name" is not already defined.
2631
2632 Note that the definition may really be just a forward reference.
2633 In that case, the TYPE_SIZE will be a NULL_TREE.
2634
2635 C++ gratuitously puts all these tags in the name space. */
2636
2637 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2638 record the shadowed value for this binding contour. TYPE is
2639 the type that ID maps to. */
2640
2641 static void
2642 set_identifier_type_value_with_scope (id, type, b)
2643 tree id;
2644 tree type;
2645 struct binding_level *b;
2646 {
2647 if (!b->namespace_p)
2648 {
2649 /* Shadow the marker, not the real thing, so that the marker
2650 gets restored later. */
2651 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2652 b->type_shadowed
2653 = tree_cons (id, old_type_value, b->type_shadowed);
2654 }
2655 else
2656 {
2657 tree binding = binding_for_name (id, current_namespace);
2658 BINDING_TYPE (binding) = type;
2659 /* Store marker instead of real type. */
2660 type = global_type_node;
2661 }
2662 SET_IDENTIFIER_TYPE_VALUE (id, type);
2663 }
2664
2665 /* As set_identifier_type_value_with_scope, but using current_binding_level. */
2666
2667 void
2668 set_identifier_type_value (id, type)
2669 tree id;
2670 tree type;
2671 {
2672 set_identifier_type_value_with_scope (id, type, current_binding_level);
2673 }
2674
2675 /* Return the type associated with id. */
2676
2677 tree
2678 identifier_type_value (id)
2679 tree id;
2680 {
2681 /* There is no type with that name, anywhere. */
2682 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2683 return NULL_TREE;
2684 /* This is not the type marker, but the real thing. */
2685 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2686 return REAL_IDENTIFIER_TYPE_VALUE (id);
2687 /* Have to search for it. It must be on the global level, now.
2688 Ask lookup_name not to return non-types. */
2689 id = lookup_name_real (id, 2, 1, 0);
2690 if (id)
2691 return TREE_TYPE (id);
2692 return NULL_TREE;
2693 }
2694
2695 /* Pop off extraneous binding levels left over due to syntax errors.
2696
2697 We don't pop past namespaces, as they might be valid. */
2698
2699 void
2700 pop_everything ()
2701 {
2702 #ifdef DEBUG_CP_BINDING_LEVELS
2703 fprintf (stderr, "XXX entering pop_everything ()\n");
2704 #endif
2705 while (!toplevel_bindings_p ())
2706 {
2707 if (current_binding_level->parm_flag == 2)
2708 pop_nested_class ();
2709 else
2710 poplevel (0, 0, 0);
2711 }
2712 #ifdef DEBUG_CP_BINDING_LEVELS
2713 fprintf (stderr, "XXX leaving pop_everything ()\n");
2714 #endif
2715 }
2716
2717 /* The type TYPE is being declared. If it is a class template, or a
2718 specialization of a class template, do any processing required and
2719 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2720 being declared a friend. B is the binding level at which this TYPE
2721 should be bound.
2722
2723 Returns the TYPE_DECL for TYPE, which may have been altered by this
2724 processing. */
2725
2726 static tree
2727 maybe_process_template_type_declaration (type, globalize, b)
2728 tree type;
2729 int globalize;
2730 struct binding_level* b;
2731 {
2732 tree decl = TYPE_NAME (type);
2733
2734 if (processing_template_parmlist)
2735 /* You can't declare a new template type in a template parameter
2736 list. But, you can declare a non-template type:
2737
2738 template <class A*> struct S;
2739
2740 is a forward-declaration of `A'. */
2741 ;
2742 else
2743 {
2744 maybe_check_template_type (type);
2745
2746 my_friendly_assert (IS_AGGR_TYPE (type)
2747 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2748
2749
2750 if (processing_template_decl)
2751 {
2752 /* This may change after the call to
2753 push_template_decl_real, but we want the original value. */
2754 tree name = DECL_NAME (decl);
2755
2756 decl = push_template_decl_real (decl, globalize);
2757 /* If the current binding level is the binding level for the
2758 template parameters (see the comment in
2759 begin_template_parm_list) and the enclosing level is a class
2760 scope, and we're not looking at a friend, push the
2761 declaration of the member class into the class scope. In the
2762 friend case, push_template_decl will already have put the
2763 friend into global scope, if appropriate. */
2764 if (TREE_CODE (type) != ENUMERAL_TYPE
2765 && !globalize && b->pseudo_global
2766 && b->level_chain->parm_flag == 2)
2767 {
2768 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2769 /* Put this tag on the list of tags for the class, since
2770 that won't happen below because B is not the class
2771 binding level, but is instead the pseudo-global level. */
2772 b->level_chain->tags =
2773 saveable_tree_cons (name, type, b->level_chain->tags);
2774 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2775 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2776 }
2777 }
2778 }
2779
2780 return decl;
2781 }
2782
2783 /* In C++, you don't have to write `struct S' to refer to `S'; you
2784 can just use `S'. We accomplish this by creating a TYPE_DECL as
2785 if the user had written `typedef struct S S'. Create and return
2786 the TYPE_DECL for TYPE. */
2787
2788 tree
2789 create_implicit_typedef (name, type)
2790 tree name;
2791 tree type;
2792 {
2793 tree decl;
2794
2795 decl = build_decl (TYPE_DECL, name, type);
2796 SET_DECL_ARTIFICIAL (decl);
2797 /* There are other implicit type declarations, like the one *within*
2798 a class that allows you to write `S::S'. We must distinguish
2799 amongst these. */
2800 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2801 TYPE_NAME (type) = decl;
2802
2803 return decl;
2804 }
2805
2806 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2807 Normally put it into the inner-most non-tag-transparent scope,
2808 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2809 The latter is needed for implicit declarations. */
2810
2811 void
2812 pushtag (name, type, globalize)
2813 tree name, type;
2814 int globalize;
2815 {
2816 register struct binding_level *b;
2817
2818 b = current_binding_level;
2819 while (b->tag_transparent
2820 || (globalize && b->parm_flag == 2))
2821 b = b->level_chain;
2822
2823 if (toplevel_bindings_p ())
2824 b->tags = perm_tree_cons (name, type, b->tags);
2825 else
2826 b->tags = saveable_tree_cons (name, type, b->tags);
2827
2828 if (name)
2829 {
2830 /* Do C++ gratuitous typedefing. */
2831 if (IDENTIFIER_TYPE_VALUE (name) != type)
2832 {
2833 register tree d = NULL_TREE;
2834 int in_class = 0;
2835 tree context = TYPE_CONTEXT (type);
2836
2837 if (! context)
2838 {
2839 tree cs = current_scope ();
2840
2841 if (! globalize)
2842 context = cs;
2843 else if (cs != NULL_TREE
2844 && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2845 /* When declaring a friend class of a local class, we want
2846 to inject the newly named class into the scope
2847 containing the local class, not the namespace scope. */
2848 context = hack_decl_function_context (get_type_decl (cs));
2849 }
2850 if (!context)
2851 context = current_namespace;
2852
2853 if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2854 || b->parm_flag == 2)
2855 in_class = 1;
2856
2857 if (current_lang_name == lang_name_java)
2858 TYPE_FOR_JAVA (type) = 1;
2859
2860 d = create_implicit_typedef (name, type);
2861 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2862 if (! in_class)
2863 set_identifier_type_value_with_scope (name, type, b);
2864
2865 d = maybe_process_template_type_declaration (type,
2866 globalize, b);
2867
2868 if (b->parm_flag == 2)
2869 {
2870 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2871 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2872 class. But if it's a member template class, we
2873 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2874 is done later. */
2875 finish_member_declaration (d);
2876 else
2877 pushdecl_class_level (d);
2878 }
2879 else
2880 d = pushdecl_with_scope (d, b);
2881
2882 if (ANON_AGGRNAME_P (name))
2883 DECL_IGNORED_P (d) = 1;
2884
2885 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2886 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2887 if (!uses_template_parms (type))
2888 DECL_ASSEMBLER_NAME (d)
2889 = get_identifier (build_overload_name (type, 1, 1));
2890 }
2891 if (b->parm_flag == 2)
2892 {
2893 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2894 CLASSTYPE_TAGS (current_class_type) = b->tags;
2895 }
2896 }
2897
2898 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2899 /* Use the canonical TYPE_DECL for this node. */
2900 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2901 else
2902 {
2903 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2904 will be the tagged type we just added to the current
2905 binding level. This fake NULL-named TYPE_DECL node helps
2906 dwarfout.c to know when it needs to output a
2907 representation of a tagged type, and it also gives us a
2908 convenient place to record the "scope start" address for
2909 the tagged type. */
2910
2911 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2912 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2913 }
2914 }
2915
2916 /* Counter used to create anonymous type names. */
2917
2918 static int anon_cnt = 0;
2919
2920 /* Return an IDENTIFIER which can be used as a name for
2921 anonymous structs and unions. */
2922
2923 tree
2924 make_anon_name ()
2925 {
2926 char buf[32];
2927
2928 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2929 return get_identifier (buf);
2930 }
2931
2932 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2933 This keeps dbxout from getting confused. */
2934
2935 void
2936 clear_anon_tags ()
2937 {
2938 register struct binding_level *b;
2939 register tree tags;
2940 static int last_cnt = 0;
2941
2942 /* Fast out if no new anon names were declared. */
2943 if (last_cnt == anon_cnt)
2944 return;
2945
2946 b = current_binding_level;
2947 while (b->tag_transparent)
2948 b = b->level_chain;
2949 tags = b->tags;
2950 while (tags)
2951 {
2952 /* A NULL purpose means we have already processed all tags
2953 from here to the end of the list. */
2954 if (TREE_PURPOSE (tags) == NULL_TREE)
2955 break;
2956 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2957 TREE_PURPOSE (tags) = NULL_TREE;
2958 tags = TREE_CHAIN (tags);
2959 }
2960 last_cnt = anon_cnt;
2961 }
2962 \f
2963 /* Subroutine of duplicate_decls: return truthvalue of whether
2964 or not types of these decls match.
2965
2966 For C++, we must compare the parameter list so that `int' can match
2967 `int&' in a parameter position, but `int&' is not confused with
2968 `const int&'. */
2969
2970 int
2971 decls_match (newdecl, olddecl)
2972 tree newdecl, olddecl;
2973 {
2974 int types_match;
2975
2976 if (newdecl == olddecl)
2977 return 1;
2978
2979 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2980 /* If the two DECLs are not even the same kind of thing, we're not
2981 interested in their types. */
2982 return 0;
2983
2984 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2985 {
2986 tree f1 = TREE_TYPE (newdecl);
2987 tree f2 = TREE_TYPE (olddecl);
2988 tree p1 = TYPE_ARG_TYPES (f1);
2989 tree p2 = TYPE_ARG_TYPES (f2);
2990
2991 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2992 && ! (DECL_LANGUAGE (newdecl) == lang_c
2993 && DECL_LANGUAGE (olddecl) == lang_c))
2994 return 0;
2995
2996 /* When we parse a static member function definition,
2997 we put together a FUNCTION_DECL which thinks its type
2998 is METHOD_TYPE. Change that to FUNCTION_TYPE, and
2999 proceed. */
3000 if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
3001 revert_static_member_fn (&newdecl, &f1, &p1);
3002 else if (TREE_CODE (f2) == METHOD_TYPE
3003 && DECL_STATIC_FUNCTION_P (newdecl))
3004 revert_static_member_fn (&olddecl, &f2, &p2);
3005
3006 /* Here we must take care of the case where new default
3007 parameters are specified. Also, warn if an old
3008 declaration becomes ambiguous because default
3009 parameters may cause the two to be ambiguous. */
3010 if (TREE_CODE (f1) != TREE_CODE (f2))
3011 {
3012 if (TREE_CODE (f1) == OFFSET_TYPE)
3013 cp_compiler_error ("`%D' redeclared as member function", newdecl);
3014 else
3015 cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
3016 return 0;
3017 }
3018
3019 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
3020 {
3021 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
3022 && p2 == NULL_TREE)
3023 {
3024 types_match = self_promoting_args_p (p1);
3025 if (p1 == void_list_node)
3026 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3027 }
3028 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
3029 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
3030 {
3031 types_match = self_promoting_args_p (p2);
3032 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3033 }
3034 else
3035 types_match = compparms (p1, p2);
3036 }
3037 else
3038 types_match = 0;
3039 }
3040 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3041 {
3042 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3043 DECL_TEMPLATE_PARMS (olddecl)))
3044 return 0;
3045
3046 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3047 types_match = 1;
3048 else
3049 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3050 DECL_TEMPLATE_RESULT (newdecl));
3051 }
3052 else
3053 {
3054 if (TREE_TYPE (newdecl) == error_mark_node)
3055 types_match = TREE_TYPE (olddecl) == error_mark_node;
3056 else if (TREE_TYPE (olddecl) == NULL_TREE)
3057 types_match = TREE_TYPE (newdecl) == NULL_TREE;
3058 else if (TREE_TYPE (newdecl) == NULL_TREE)
3059 types_match = 0;
3060 else
3061 types_match = comptypes (TREE_TYPE (newdecl),
3062 TREE_TYPE (olddecl),
3063 COMPARE_REDECLARATION);
3064 }
3065
3066 return types_match;
3067 }
3068
3069 /* If NEWDECL is `static' and an `extern' was seen previously,
3070 warn about it. (OLDDECL may be NULL_TREE; NAME contains
3071 information about previous usage as an `extern'.)
3072
3073 Note that this does not apply to the C++ case of declaring
3074 a variable `extern const' and then later `const'.
3075
3076 Don't complain about built-in functions, since they are beyond
3077 the user's control. */
3078
3079 static void
3080 warn_extern_redeclared_static (newdecl, olddecl)
3081 tree newdecl, olddecl;
3082 {
3083 tree name;
3084
3085 static const char *explicit_extern_static_warning
3086 = "`%D' was declared `extern' and later `static'";
3087 static const char *implicit_extern_static_warning
3088 = "`%D' was declared implicitly `extern' and later `static'";
3089
3090 if (TREE_CODE (newdecl) == TYPE_DECL)
3091 return;
3092
3093 name = DECL_ASSEMBLER_NAME (newdecl);
3094 if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
3095 {
3096 /* It's okay to redeclare an ANSI built-in function as static,
3097 or to declare a non-ANSI built-in function as anything. */
3098 if (! (TREE_CODE (newdecl) == FUNCTION_DECL
3099 && olddecl != NULL_TREE
3100 && TREE_CODE (olddecl) == FUNCTION_DECL
3101 && DECL_ARTIFICIAL (olddecl)))
3102 {
3103 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3104 ? implicit_extern_static_warning
3105 : explicit_extern_static_warning, newdecl);
3106 if (olddecl != NULL_TREE)
3107 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3108 }
3109 }
3110 }
3111
3112 /* Handle when a new declaration NEWDECL has the same name as an old
3113 one OLDDECL in the same binding contour. Prints an error message
3114 if appropriate.
3115
3116 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3117 Otherwise, return 0. */
3118
3119 int
3120 duplicate_decls (newdecl, olddecl)
3121 tree newdecl, olddecl;
3122 {
3123 extern struct obstack permanent_obstack;
3124 unsigned olddecl_uid = DECL_UID (olddecl);
3125 int olddecl_friend = 0, types_match = 0;
3126 int new_defines_function = 0;
3127
3128 if (newdecl == olddecl)
3129 return 1;
3130
3131 types_match = decls_match (newdecl, olddecl);
3132
3133 /* If either the type of the new decl or the type of the old decl is an
3134 error_mark_node, then that implies that we have already issued an
3135 error (earlier) for some bogus type specification, and in that case,
3136 it is rather pointless to harass the user with yet more error message
3137 about the same declaration, so just pretend the types match here. */
3138 if (TREE_TYPE (newdecl) == error_mark_node
3139 || TREE_TYPE (olddecl) == error_mark_node)
3140 types_match = 1;
3141
3142 /* Check for redeclaration and other discrepancies. */
3143 if (TREE_CODE (olddecl) == FUNCTION_DECL
3144 && DECL_ARTIFICIAL (olddecl))
3145 {
3146 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3147 {
3148 /* If you declare a built-in or predefined function name as static,
3149 the old definition is overridden, but optionally warn this was a
3150 bad choice of name. */
3151 if (! TREE_PUBLIC (newdecl))
3152 {
3153 if (warn_shadow)
3154 cp_warning ("shadowing %s function `%#D'",
3155 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3156 olddecl);
3157 /* Discard the old built-in function. */
3158 return 0;
3159 }
3160 /* If the built-in is not ansi, then programs can override
3161 it even globally without an error. */
3162 else if (! DECL_BUILT_IN (olddecl))
3163 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3164 olddecl, newdecl);
3165 else
3166 {
3167 cp_error ("declaration of `%#D'", newdecl);
3168 cp_error ("conflicts with built-in declaration `%#D'",
3169 olddecl);
3170 }
3171 return 0;
3172 }
3173 else if (!types_match)
3174 {
3175 if ((DECL_LANGUAGE (newdecl) == lang_c
3176 && DECL_LANGUAGE (olddecl) == lang_c)
3177 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3178 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3179 {
3180 /* A near match; override the builtin. */
3181
3182 if (TREE_PUBLIC (newdecl))
3183 {
3184 cp_warning ("new declaration `%#D'", newdecl);
3185 cp_warning ("ambiguates built-in declaration `%#D'",
3186 olddecl);
3187 }
3188 else if (warn_shadow)
3189 cp_warning ("shadowing %s function `%#D'",
3190 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3191 olddecl);
3192 }
3193 else
3194 /* Discard the old built-in function. */
3195 return 0;
3196 }
3197 }
3198 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3199 {
3200 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3201 && TREE_CODE (newdecl) != TYPE_DECL
3202 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3203 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3204 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3205 && TREE_CODE (olddecl) != TYPE_DECL
3206 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3207 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3208 == TYPE_DECL))))
3209 {
3210 /* We do nothing special here, because C++ does such nasty
3211 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3212 get shadowed, and know that if we need to find a TYPE_DECL
3213 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3214 slot of the identifier. */
3215 return 0;
3216 }
3217
3218 if ((TREE_CODE (newdecl) == FUNCTION_DECL
3219 && DECL_FUNCTION_TEMPLATE_P (olddecl))
3220 || (TREE_CODE (olddecl) == FUNCTION_DECL
3221 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3222 return 0;
3223
3224 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3225 if (TREE_CODE (olddecl) == TREE_LIST)
3226 olddecl = TREE_VALUE (olddecl);
3227 cp_error_at ("previous declaration of `%#D'", olddecl);
3228
3229 /* New decl is completely inconsistent with the old one =>
3230 tell caller to replace the old one. */
3231
3232 return 0;
3233 }
3234 else if (!types_match)
3235 {
3236 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3237 /* These are certainly not duplicate declarations; they're
3238 from different scopes. */
3239 return 0;
3240
3241 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3242 {
3243 /* The name of a class template may not be declared to refer to
3244 any other template, class, function, object, namespace, value,
3245 or type in the same scope. */
3246 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3247 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3248 {
3249 cp_error ("declaration of template `%#D'", newdecl);
3250 cp_error_at ("conflicts with previous declaration `%#D'",
3251 olddecl);
3252 }
3253 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3254 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3255 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3256 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3257 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3258 DECL_TEMPLATE_PARMS (olddecl)))
3259 {
3260 cp_error ("new declaration `%#D'", newdecl);
3261 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3262 }
3263 return 0;
3264 }
3265 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3266 {
3267 if (DECL_LANGUAGE (newdecl) == lang_c
3268 && DECL_LANGUAGE (olddecl) == lang_c)
3269 {
3270 cp_error ("declaration of C function `%#D' conflicts with",
3271 newdecl);
3272 cp_error_at ("previous declaration `%#D' here", olddecl);
3273 }
3274 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3275 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3276 {
3277 cp_error ("new declaration `%#D'", newdecl);
3278 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3279 }
3280 else
3281 return 0;
3282 }
3283
3284 /* Already complained about this, so don't do so again. */
3285 else if (current_class_type == NULL_TREE
3286 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3287 {
3288 cp_error ("conflicting types for `%#D'", newdecl);
3289 cp_error_at ("previous declaration as `%#D'", olddecl);
3290 }
3291 }
3292 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3293 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3294 && (!DECL_TEMPLATE_INFO (newdecl)
3295 || (DECL_TI_TEMPLATE (newdecl)
3296 != DECL_TI_TEMPLATE (olddecl))))
3297 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3298 && (!DECL_TEMPLATE_INFO (olddecl)
3299 || (DECL_TI_TEMPLATE (olddecl)
3300 != DECL_TI_TEMPLATE (newdecl))))))
3301 /* It's OK to have a template specialization and a non-template
3302 with the same type, or to have specializations of two
3303 different templates with the same type. Note that if one is a
3304 specialization, and the other is an instantiation of the same
3305 template, that we do not exit at this point. That situation
3306 can occur if we instantiate a template class, and then
3307 specialize one of its methods. This situation is legal, but
3308 the declarations must be merged in the usual way. */
3309 return 0;
3310 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3311 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3312 && !DECL_USE_TEMPLATE (newdecl))
3313 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3314 && !DECL_USE_TEMPLATE (olddecl))))
3315 /* One of the declarations is a template instantiation, and the
3316 other is not a template at all. That's OK. */
3317 return 0;
3318 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3319 && DECL_NAMESPACE_ALIAS (newdecl)
3320 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3321 /* Redeclaration of namespace alias, ignore it. */
3322 return 1;
3323 else
3324 {
3325 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3326 if (errmsg)
3327 {
3328 cp_error (errmsg, newdecl);
3329 if (DECL_NAME (olddecl) != NULL_TREE)
3330 cp_error_at ((DECL_INITIAL (olddecl)
3331 && namespace_bindings_p ())
3332 ? "`%#D' previously defined here"
3333 : "`%#D' previously declared here", olddecl);
3334 }
3335 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3336 && DECL_INITIAL (olddecl) != NULL_TREE
3337 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3338 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3339 {
3340 /* Prototype decl follows defn w/o prototype. */
3341 cp_warning_at ("prototype for `%#D'", newdecl);
3342 cp_warning_at ("follows non-prototype definition here", olddecl);
3343 }
3344 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3345 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3346 {
3347 /* extern "C" int foo ();
3348 int foo () { bar (); }
3349 is OK. */
3350 if (current_lang_stack == current_lang_base)
3351 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3352 else
3353 {
3354 cp_error_at ("previous declaration of `%#D' with %L linkage",
3355 olddecl, DECL_LANGUAGE (olddecl));
3356 cp_error ("conflicts with new declaration with %L linkage",
3357 DECL_LANGUAGE (newdecl));
3358 }
3359 }
3360
3361 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3362 ;
3363 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3364 {
3365 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3366 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3367 int i = 1;
3368
3369 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3370 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3371
3372 for (; t1 && t1 != void_list_node;
3373 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3374 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3375 {
3376 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3377 TREE_PURPOSE (t2)))
3378 {
3379 if (pedantic)
3380 {
3381 cp_pedwarn ("default argument given for parameter %d of `%#D'",
3382 i, newdecl);
3383 cp_pedwarn_at ("after previous specification in `%#D'",
3384 olddecl);
3385 }
3386 }
3387 else
3388 {
3389 cp_error ("default argument given for parameter %d of `%#D'",
3390 i, newdecl);
3391 cp_error_at ("after previous specification in `%#D'",
3392 olddecl);
3393 }
3394 }
3395
3396 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3397 && TREE_ADDRESSABLE (olddecl) && warn_inline)
3398 {
3399 cp_warning ("`%#D' was used before it was declared inline",
3400 newdecl);
3401 cp_warning_at ("previous non-inline declaration here",
3402 olddecl);
3403 }
3404 }
3405 }
3406
3407 /* If new decl is `static' and an `extern' was seen previously,
3408 warn about it. */
3409 warn_extern_redeclared_static (newdecl, olddecl);
3410
3411 /* We have committed to returning 1 at this point. */
3412 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3413 {
3414 /* Now that functions must hold information normally held
3415 by field decls, there is extra work to do so that
3416 declaration information does not get destroyed during
3417 definition. */
3418 if (DECL_VINDEX (olddecl))
3419 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3420 if (DECL_CONTEXT (olddecl))
3421 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3422 if (DECL_CLASS_CONTEXT (olddecl))
3423 DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3424 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3425 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3426 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3427 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3428 DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3429 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3430 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3431 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3432
3433 /* Optionally warn about more than one declaration for the same
3434 name, but don't warn about a function declaration followed by a
3435 definition. */
3436 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3437 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3438 /* Don't warn about extern decl followed by definition. */
3439 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3440 /* Don't warn about friends, let add_friend take care of it. */
3441 && ! DECL_FRIEND_P (newdecl))
3442 {
3443 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3444 cp_warning_at ("previous declaration of `%D'", olddecl);
3445 }
3446 }
3447
3448 /* Deal with C++: must preserve virtual function table size. */
3449 if (TREE_CODE (olddecl) == TYPE_DECL)
3450 {
3451 register tree newtype = TREE_TYPE (newdecl);
3452 register tree oldtype = TREE_TYPE (olddecl);
3453
3454 if (newtype != error_mark_node && oldtype != error_mark_node
3455 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3456 {
3457 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3458 CLASSTYPE_FRIEND_CLASSES (newtype)
3459 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3460 }
3461 }
3462
3463 /* Copy all the DECL_... slots specified in the new decl
3464 except for any that we copy here from the old type. */
3465 DECL_MACHINE_ATTRIBUTES (newdecl)
3466 = merge_machine_decl_attributes (olddecl, newdecl);
3467
3468 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3469 {
3470 if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3471 DECL_TEMPLATE_RESULT (olddecl)))
3472 cp_error ("invalid redeclaration of %D", newdecl);
3473 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3474 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3475 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3476 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3477
3478 return 1;
3479 }
3480
3481 if (types_match)
3482 {
3483 /* Automatically handles default parameters. */
3484 tree oldtype = TREE_TYPE (olddecl);
3485 tree newtype;
3486
3487 /* Make sure we put the new type in the same obstack as the old one. */
3488 if (oldtype)
3489 push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3490 else
3491 push_permanent_obstack ();
3492
3493 /* Merge the data types specified in the two decls. */
3494 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3495
3496 if (TREE_CODE (newdecl) == VAR_DECL)
3497 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3498 /* Do this after calling `common_type' so that default
3499 parameters don't confuse us. */
3500 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3501 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3502 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3503 {
3504 TREE_TYPE (newdecl) = build_exception_variant (newtype,
3505 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3506 TREE_TYPE (olddecl) = build_exception_variant (newtype,
3507 TYPE_RAISES_EXCEPTIONS (oldtype));
3508
3509 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3510 && DECL_SOURCE_LINE (olddecl) != 0
3511 && flag_exceptions
3512 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3513 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3514 {
3515 cp_error ("declaration of `%F' throws different exceptions",
3516 newdecl);
3517 cp_error_at ("to previous declaration `%F'", olddecl);
3518 }
3519 }
3520 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3521
3522 /* Lay the type out, unless already done. */
3523 if (! same_type_p (newtype, oldtype)
3524 && TREE_TYPE (newdecl) != error_mark_node
3525 && !(processing_template_decl && uses_template_parms (newdecl)))
3526 layout_type (TREE_TYPE (newdecl));
3527
3528 if ((TREE_CODE (newdecl) == VAR_DECL
3529 || TREE_CODE (newdecl) == PARM_DECL
3530 || TREE_CODE (newdecl) == RESULT_DECL
3531 || TREE_CODE (newdecl) == FIELD_DECL
3532 || TREE_CODE (newdecl) == TYPE_DECL)
3533 && !(processing_template_decl && uses_template_parms (newdecl)))
3534 layout_decl (newdecl, 0);
3535
3536 /* Merge the type qualifiers. */
3537 if (TREE_READONLY (newdecl))
3538 TREE_READONLY (olddecl) = 1;
3539 if (TREE_THIS_VOLATILE (newdecl))
3540 TREE_THIS_VOLATILE (olddecl) = 1;
3541
3542 /* Merge the initialization information. */
3543 if (DECL_INITIAL (newdecl) == NULL_TREE
3544 && DECL_INITIAL (olddecl) != NULL_TREE)
3545 {
3546 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3547 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3548 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3549 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3550 && DECL_LANG_SPECIFIC (newdecl)
3551 && DECL_LANG_SPECIFIC (olddecl))
3552 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3553 }
3554
3555 /* Merge the section attribute.
3556 We want to issue an error if the sections conflict but that must be
3557 done later in decl_attributes since we are called before attributes
3558 are assigned. */
3559 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3560 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3561
3562 /* Keep the old rtl since we can safely use it, unless it's the
3563 call to abort() used for abstract virtuals. */
3564 if ((DECL_LANG_SPECIFIC (olddecl)
3565 && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3566 || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3567 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3568
3569 pop_obstacks ();
3570 }
3571 /* If cannot merge, then use the new type and qualifiers,
3572 and don't preserve the old rtl. */
3573 else
3574 {
3575 /* Clean out any memory we had of the old declaration. */
3576 tree oldstatic = value_member (olddecl, static_aggregates);
3577 if (oldstatic)
3578 TREE_VALUE (oldstatic) = error_mark_node;
3579
3580 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3581 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3582 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3583 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3584 }
3585
3586 /* Merge the storage class information. */
3587 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3588 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3589 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3590 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3591 if (! DECL_EXTERNAL (olddecl))
3592 DECL_EXTERNAL (newdecl) = 0;
3593
3594 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3595 {
3596 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3597 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3598 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3599 DECL_TEMPLATE_INSTANTIATED (newdecl)
3600 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3601 /* Don't really know how much of the language-specific
3602 values we should copy from old to new. */
3603 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3604 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3605 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3606 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3607 olddecl_friend = DECL_FRIEND_P (olddecl);
3608
3609 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3610 if (TREE_CODE (newdecl) == FUNCTION_DECL
3611 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3612 DECL_BEFRIENDING_CLASSES (newdecl)
3613 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3614 DECL_BEFRIENDING_CLASSES (olddecl));
3615 }
3616
3617 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3618 {
3619 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3620 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3621 {
3622 /* If newdecl is not a specialization, then it is not a
3623 template-related function at all. And that means that we
3624 shoud have exited above, returning 0. */
3625 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3626 0);
3627
3628 if (TREE_USED (olddecl))
3629 /* From [temp.expl.spec]:
3630
3631 If a template, a member template or the member of a class
3632 template is explicitly specialized then that
3633 specialization shall be declared before the first use of
3634 that specialization that would cause an implicit
3635 instantiation to take place, in every translation unit in
3636 which such a use occurs. */
3637 cp_error ("explicit specialization of %D after first use",
3638 olddecl);
3639
3640 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3641 }
3642 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3643
3644 /* If either decl says `inline', this fn is inline, unless its
3645 definition was passed already. */
3646 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3647 DECL_INLINE (olddecl) = 1;
3648 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3649
3650 if (! types_match)
3651 {
3652 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3653 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3654 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3655 }
3656 if (! types_match || new_defines_function)
3657 {
3658 /* These need to be copied so that the names are available.
3659 Note that if the types do match, we'll preserve inline
3660 info and other bits, but if not, we won't. */
3661 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3662 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3663 }
3664 if (new_defines_function)
3665 /* If defining a function declared with other language
3666 linkage, use the previously declared language linkage. */
3667 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3668 else if (types_match)
3669 {
3670 /* If redeclaring a builtin function, and not a definition,
3671 it stays built in. */
3672 if (DECL_BUILT_IN (olddecl))
3673 {
3674 DECL_BUILT_IN (newdecl) = 1;
3675 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3676 /* If we're keeping the built-in definition, keep the rtl,
3677 regardless of declaration matches. */
3678 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3679 }
3680 else
3681 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3682
3683 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3684 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3685 /* Previously saved insns go together with
3686 the function's previous definition. */
3687 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3688 /* Don't clear out the arguments if we're redefining a function. */
3689 if (DECL_ARGUMENTS (olddecl))
3690 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3691 }
3692 if (DECL_LANG_SPECIFIC (olddecl))
3693 DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3694 }
3695
3696 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3697 {
3698 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3699 }
3700
3701 /* Now preserve various other info from the definition. */
3702 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3703 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3704 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3705 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3706
3707 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3708 {
3709 int function_size;
3710 struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3711 struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3712
3713 function_size = sizeof (struct tree_decl);
3714
3715 bcopy ((char *) newdecl + sizeof (struct tree_common),
3716 (char *) olddecl + sizeof (struct tree_common),
3717 function_size - sizeof (struct tree_common));
3718
3719 /* Can we safely free the storage used by newdecl? */
3720
3721 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3722 & ~ obstack_alignment_mask (&permanent_obstack))
3723
3724 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3725 {
3726 /* If newdecl is a template instantiation, it is possible that
3727 the following sequence of events has occurred:
3728
3729 o A friend function was declared in a class template. The
3730 class template was instantiated.
3731
3732 o The instantiation of the friend declaration was
3733 recorded on the instantiation list, and is newdecl.
3734
3735 o Later, however, instantiate_class_template called pushdecl
3736 on the newdecl to perform name injection. But, pushdecl in
3737 turn called duplicate_decls when it discovered that another
3738 declaration of a global function with the same name already
3739 existed.
3740
3741 o Here, in duplicate_decls, we decided to clobber newdecl.
3742
3743 If we're going to do that, we'd better make sure that
3744 olddecl, and not newdecl, is on the list of
3745 instantiations so that if we try to do the instantiation
3746 again we won't get the clobbered declaration. */
3747
3748 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3749 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3750
3751 for (; decls; decls = TREE_CHAIN (decls))
3752 if (TREE_VALUE (decls) == newdecl)
3753 TREE_VALUE (decls) = olddecl;
3754 }
3755
3756 if (((char *)newdecl + ROUND (function_size) == (char *)nl
3757 && ((char *)newdecl + ROUND (function_size)
3758 + ROUND (sizeof (struct lang_decl))
3759 == obstack_next_free (&permanent_obstack)))
3760 || ((char *)newdecl + ROUND (function_size)
3761 == obstack_next_free (&permanent_obstack)))
3762 {
3763 DECL_MAIN_VARIANT (newdecl) = olddecl;
3764 DECL_LANG_SPECIFIC (olddecl) = ol;
3765 bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3766
3767 obstack_free (&permanent_obstack, newdecl);
3768 }
3769 else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3770 {
3771 if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3772 {
3773 struct lang_decl *free_lang_decl = ol;
3774
3775 /* Save these lang_decls that would otherwise be lost. */
3776 if (DECL_LANG_SPECIFIC (olddecl) == ol)
3777 abort ();
3778
3779 free_lang_decl->u.next = free_lang_decl_chain;
3780 free_lang_decl_chain = free_lang_decl;
3781 }
3782 else
3783 {
3784 /* Storage leak. */;
3785 }
3786 }
3787 }
3788 else
3789 {
3790 bcopy ((char *) newdecl + sizeof (struct tree_common),
3791 (char *) olddecl + sizeof (struct tree_common),
3792 sizeof (struct tree_decl) - sizeof (struct tree_common)
3793 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3794 }
3795
3796 DECL_UID (olddecl) = olddecl_uid;
3797 if (olddecl_friend)
3798 DECL_FRIEND_P (olddecl) = 1;
3799
3800 /* NEWDECL contains the merged attribute lists.
3801 Update OLDDECL to be the same. */
3802 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3803
3804 return 1;
3805 }
3806
3807 /* Record a decl-node X as belonging to the current lexical scope.
3808 Check for errors (such as an incompatible declaration for the same
3809 name already seen in the same scope).
3810
3811 Returns either X or an old decl for the same name.
3812 If an old decl is returned, it may have been smashed
3813 to agree with what X says. */
3814
3815 tree
3816 pushdecl (x)
3817 tree x;
3818 {
3819 register tree t;
3820 register tree name = DECL_ASSEMBLER_NAME (x);
3821 int need_new_binding = 1;
3822
3823 if (DECL_TEMPLATE_PARM_P (x))
3824 /* Template parameters have no context; they are not X::T even
3825 when declared within a class or namespace. */
3826 ;
3827 else
3828 {
3829 if (current_function_decl && x != current_function_decl
3830 /* A local declaration for a function doesn't constitute
3831 nesting. */
3832 && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3833 /* Don't change DECL_CONTEXT of virtual methods. */
3834 && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3835 && !DECL_CONTEXT (x))
3836 DECL_CONTEXT (x) = current_function_decl;
3837 if (!DECL_CONTEXT (x))
3838 DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3839 }
3840
3841 /* Type are looked up using the DECL_NAME, as that is what the rest of the
3842 compiler wants to use. */
3843 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3844 || TREE_CODE (x) == NAMESPACE_DECL)
3845 name = DECL_NAME (x);
3846
3847 if (name)
3848 {
3849 #if 0
3850 /* Not needed...see below. */
3851 char *file;
3852 int line;
3853 #endif
3854 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3855 name = TREE_OPERAND (name, 0);
3856
3857 /* Namespace-scoped variables are not found in the current level. */
3858 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3859 t = namespace_binding (name, DECL_CONTEXT (x));
3860 else
3861 t = lookup_name_current_level (name);
3862 if (t == error_mark_node)
3863 {
3864 /* error_mark_node is 0 for a while during initialization! */
3865 t = NULL_TREE;
3866 cp_error_at ("`%#D' used prior to declaration", x);
3867 }
3868
3869 else if (t != NULL_TREE)
3870 {
3871 #if 0
3872 /* This is turned off until I have time to do it right (bpk). */
3873 /* With the code below that uses it... */
3874 file = DECL_SOURCE_FILE (t);
3875 line = DECL_SOURCE_LINE (t);
3876 #endif
3877 if (TREE_CODE (t) == PARM_DECL)
3878 {
3879 if (DECL_CONTEXT (t) == NULL_TREE)
3880 fatal ("parse errors have confused me too much");
3881
3882 /* Check for duplicate params. */
3883 if (duplicate_decls (x, t))
3884 return t;
3885 }
3886 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3887 || DECL_FUNCTION_TEMPLATE_P (x))
3888 && is_overloaded_fn (t))
3889 /* Don't do anything just yet. */;
3890 else if (t == wchar_decl_node)
3891 {
3892 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3893 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3894
3895 /* Throw away the redeclaration. */
3896 return t;
3897 }
3898 else if (TREE_CODE (t) != TREE_CODE (x))
3899 {
3900 if (duplicate_decls (x, t))
3901 return t;
3902 }
3903 else if (duplicate_decls (x, t))
3904 {
3905 #if 0
3906 /* This is turned off until I have time to do it right (bpk). */
3907
3908 /* Also warn if they did a prototype with `static' on it, but
3909 then later left the `static' off. */
3910 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3911 {
3912 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3913 return t;
3914
3915 if (extra_warnings)
3916 {
3917 cp_warning ("`static' missing from declaration of `%D'",
3918 t);
3919 warning_with_file_and_line (file, line,
3920 "previous declaration of `%s'",
3921 decl_as_string (t, 0));
3922 }
3923
3924 /* Now fix things so it'll do what they expect. */
3925 if (current_function_decl)
3926 TREE_PUBLIC (current_function_decl) = 0;
3927 }
3928 /* Due to interference in memory reclamation (X may be
3929 obstack-deallocated at this point), we must guard against
3930 one really special case. [jason: This should be handled
3931 by start_function] */
3932 if (current_function_decl == x)
3933 current_function_decl = t;
3934 #endif
3935 if (TREE_CODE (t) == TYPE_DECL)
3936 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3937 else if (TREE_CODE (t) == FUNCTION_DECL)
3938 check_default_args (t);
3939
3940 return t;
3941 }
3942 else if (DECL_MAIN_P (x))
3943 {
3944 /* A redeclaration of main, but not a duplicate of the
3945 previous one.
3946
3947 [basic.start.main]
3948
3949 This function shall not be overloaded. */
3950 cp_error_at ("invalid redeclaration of `%D'", t);
3951 cp_error ("as `%D'", x);
3952 /* We don't try to push this declaration since that
3953 causes a crash. */
3954 return x;
3955 }
3956 }
3957
3958 check_template_shadow (x);
3959
3960 /* If this is a function conjured up by the backend, massage it
3961 so it looks friendly. */
3962 if (TREE_CODE (x) == FUNCTION_DECL
3963 && ! DECL_LANG_SPECIFIC (x))
3964 {
3965 retrofit_lang_decl (x);
3966 DECL_LANGUAGE (x) = lang_c;
3967 }
3968
3969 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3970 {
3971 t = push_overloaded_decl (x, PUSH_LOCAL);
3972 if (t != x || DECL_LANGUAGE (x) == lang_c)
3973 return t;
3974 if (!namespace_bindings_p ())
3975 /* We do not need to create a binding for this name;
3976 push_overloaded_decl will have already done so if
3977 necessary. */
3978 need_new_binding = 0;
3979 }
3980 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3981 {
3982 t = push_overloaded_decl (x, PUSH_GLOBAL);
3983 if (t == x)
3984 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3985 return t;
3986 }
3987
3988 /* If declaring a type as a typedef, copy the type (unless we're
3989 at line 0), and install this TYPE_DECL as the new type's typedef
3990 name. See the extensive comment in ../c-decl.c (pushdecl). */
3991 if (TREE_CODE (x) == TYPE_DECL)
3992 {
3993 tree type = TREE_TYPE (x);
3994 if (DECL_SOURCE_LINE (x) == 0)
3995 {
3996 if (TYPE_NAME (type) == 0)
3997 TYPE_NAME (type) = x;
3998 }
3999 else if (type != error_mark_node && TYPE_NAME (type) != x
4000 /* We don't want to copy the type when all we're
4001 doing is making a TYPE_DECL for the purposes of
4002 inlining. */
4003 && (!TYPE_NAME (type)
4004 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
4005 {
4006 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
4007
4008 DECL_ORIGINAL_TYPE (x) = type;
4009 type = build_type_copy (type);
4010 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4011 TYPE_NAME (type) = x;
4012 TREE_TYPE (x) = type;
4013
4014 pop_obstacks ();
4015 }
4016
4017 if (type != error_mark_node
4018 && TYPE_NAME (type)
4019 && TYPE_IDENTIFIER (type))
4020 set_identifier_type_value_with_scope (DECL_NAME (x), type,
4021 current_binding_level);
4022
4023 }
4024
4025 /* Multiple external decls of the same identifier ought to match.
4026
4027 We get warnings about inline functions where they are defined.
4028 We get warnings about other functions from push_overloaded_decl.
4029
4030 Avoid duplicate warnings where they are used. */
4031 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
4032 {
4033 tree decl;
4034
4035 if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
4036 && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
4037 || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
4038 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4039 else
4040 decl = NULL_TREE;
4041
4042 if (decl
4043 /* If different sort of thing, we already gave an error. */
4044 && TREE_CODE (decl) == TREE_CODE (x)
4045 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
4046 {
4047 cp_pedwarn ("type mismatch with previous external decl", x);
4048 cp_pedwarn_at ("previous external decl of `%#D'", decl);
4049 }
4050 }
4051
4052 /* This name is new in its binding level.
4053 Install the new declaration and return it. */
4054 if (namespace_bindings_p ())
4055 {
4056 /* Install a global value. */
4057
4058 /* If the first global decl has external linkage,
4059 warn if we later see static one. */
4060 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
4061 TREE_PUBLIC (name) = 1;
4062
4063 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4064 && t != NULL_TREE))
4065 {
4066 if (TREE_CODE (x) == FUNCTION_DECL)
4067 my_friendly_assert
4068 ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
4069 || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
4070 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
4071 }
4072
4073 /* Don't forget if the function was used via an implicit decl. */
4074 if (IDENTIFIER_IMPLICIT_DECL (name)
4075 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4076 TREE_USED (x) = 1;
4077
4078 /* Don't forget if its address was taken in that way. */
4079 if (IDENTIFIER_IMPLICIT_DECL (name)
4080 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4081 TREE_ADDRESSABLE (x) = 1;
4082
4083 /* Warn about mismatches against previous implicit decl. */
4084 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4085 /* If this real decl matches the implicit, don't complain. */
4086 && ! (TREE_CODE (x) == FUNCTION_DECL
4087 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4088 cp_warning
4089 ("`%D' was previously implicitly declared to return `int'", x);
4090
4091 /* If new decl is `static' and an `extern' was seen previously,
4092 warn about it. */
4093 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4094 warn_extern_redeclared_static (x, t);
4095 }
4096 else
4097 {
4098 /* Here to install a non-global value. */
4099 tree oldlocal = IDENTIFIER_VALUE (name);
4100 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4101
4102 if (need_new_binding)
4103 {
4104 push_local_binding (name, x, 0);
4105 /* Because push_local_binding will hook X on to the
4106 current_binding_level's name list, we don't want to
4107 do that again below. */
4108 need_new_binding = 0;
4109 }
4110
4111 /* If this is a TYPE_DECL, push it into the type value slot. */
4112 if (TREE_CODE (x) == TYPE_DECL)
4113 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
4114 current_binding_level);
4115
4116 /* Clear out any TYPE_DECL shadowed by a namespace so that
4117 we won't think this is a type. The C struct hack doesn't
4118 go through namespaces. */
4119 if (TREE_CODE (x) == NAMESPACE_DECL)
4120 set_identifier_type_value_with_scope (name, NULL_TREE,
4121 current_binding_level);
4122
4123 /* If this is an extern function declaration, see if we
4124 have a global definition or declaration for the function. */
4125 if (oldlocal == NULL_TREE
4126 && DECL_EXTERNAL (x)
4127 && oldglobal != NULL_TREE
4128 && TREE_CODE (x) == FUNCTION_DECL
4129 && TREE_CODE (oldglobal) == FUNCTION_DECL)
4130 {
4131 /* We have one. Their types must agree. */
4132 if (decls_match (x, oldglobal))
4133 /* OK */;
4134 else
4135 {
4136 cp_warning ("extern declaration of `%#D' doesn't match", x);
4137 cp_warning_at ("global declaration `%#D'", oldglobal);
4138 }
4139 }
4140 /* If we have a local external declaration,
4141 and no file-scope declaration has yet been seen,
4142 then if we later have a file-scope decl it must not be static. */
4143 if (oldlocal == NULL_TREE
4144 && oldglobal == NULL_TREE
4145 && DECL_EXTERNAL (x)
4146 && TREE_PUBLIC (x))
4147 TREE_PUBLIC (name) = 1;
4148
4149 if (DECL_FROM_INLINE (x))
4150 /* Inline decls shadow nothing. */;
4151
4152 /* Warn if shadowing an argument at the top level of the body. */
4153 else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4154 && TREE_CODE (oldlocal) == PARM_DECL
4155 /* Don't complain if it's from an enclosing function. */
4156 && DECL_CONTEXT (oldlocal) == current_function_decl
4157 && TREE_CODE (x) != PARM_DECL)
4158 {
4159 /* Go to where the parms should be and see if we
4160 find them there. */
4161 struct binding_level *b = current_binding_level->level_chain;
4162
4163 if (cleanup_label)
4164 b = b->level_chain;
4165
4166 /* ARM $8.3 */
4167 if (b->parm_flag == 1)
4168 cp_error ("declaration of `%#D' shadows a parameter", name);
4169 }
4170 else if (warn_shadow && oldlocal != NULL_TREE
4171 && current_binding_level->is_for_scope
4172 && !DECL_DEAD_FOR_LOCAL (oldlocal))
4173 {
4174 warning ("variable `%s' shadows local",
4175 IDENTIFIER_POINTER (name));
4176 cp_warning_at (" this is the shadowed declaration", oldlocal);
4177 }
4178 /* Maybe warn if shadowing something else. */
4179 else if (warn_shadow && !DECL_EXTERNAL (x)
4180 /* No shadow warnings for internally generated vars. */
4181 && ! DECL_ARTIFICIAL (x)
4182 /* No shadow warnings for vars made for inlining. */
4183 && ! DECL_FROM_INLINE (x))
4184 {
4185 const char *warnstring = NULL;
4186
4187 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4188 warnstring = "declaration of `%s' shadows a parameter";
4189 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4190 && current_class_ptr
4191 && !TREE_STATIC (name))
4192 warnstring = "declaration of `%s' shadows a member of `this'";
4193 else if (oldlocal != NULL_TREE)
4194 warnstring = "declaration of `%s' shadows previous local";
4195 else if (oldglobal != NULL_TREE)
4196 /* XXX shadow warnings in outer-more namespaces */
4197 warnstring = "declaration of `%s' shadows global declaration";
4198
4199 if (warnstring)
4200 warning (warnstring, IDENTIFIER_POINTER (name));
4201 }
4202 }
4203
4204 if (TREE_CODE (x) == FUNCTION_DECL)
4205 check_default_args (x);
4206
4207 /* Keep count of variables in this level with incomplete type. */
4208 if (TREE_CODE (x) == VAR_DECL
4209 && TREE_TYPE (x) != error_mark_node
4210 && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4211 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4212 /* RTTI TD entries are created while defining the type_info. */
4213 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4214 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4215 current_binding_level->incomplete
4216 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4217 }
4218
4219 if (need_new_binding)
4220 add_decl_to_level (x, current_binding_level);
4221
4222 return x;
4223 }
4224
4225 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4226 caller to set DECL_CONTEXT properly. */
4227
4228 static tree
4229 pushdecl_with_scope (x, level)
4230 tree x;
4231 struct binding_level *level;
4232 {
4233 register struct binding_level *b;
4234 tree function_decl = current_function_decl;
4235
4236 current_function_decl = NULL_TREE;
4237 if (level->parm_flag == 2)
4238 {
4239 b = class_binding_level;
4240 class_binding_level = level;
4241 pushdecl_class_level (x);
4242 class_binding_level = b;
4243 }
4244 else
4245 {
4246 b = current_binding_level;
4247 current_binding_level = level;
4248 x = pushdecl (x);
4249 current_binding_level = b;
4250 }
4251 current_function_decl = function_decl;
4252 return x;
4253 }
4254
4255 /* Like pushdecl, only it places X in the current namespace,
4256 if appropriate. */
4257
4258 tree
4259 pushdecl_namespace_level (x)
4260 tree x;
4261 {
4262 register struct binding_level *b = current_binding_level;
4263 register tree t;
4264
4265 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4266
4267 /* Now, the type_shadowed stack may screw us. Munge it so it does
4268 what we want. */
4269 if (TREE_CODE (x) == TYPE_DECL)
4270 {
4271 tree name = DECL_NAME (x);
4272 tree newval;
4273 tree *ptr = (tree *)0;
4274 for (; b != global_binding_level; b = b->level_chain)
4275 {
4276 tree shadowed = b->type_shadowed;
4277 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4278 if (TREE_PURPOSE (shadowed) == name)
4279 {
4280 ptr = &TREE_VALUE (shadowed);
4281 /* Can't break out of the loop here because sometimes
4282 a binding level will have duplicate bindings for
4283 PT names. It's gross, but I haven't time to fix it. */
4284 }
4285 }
4286 newval = TREE_TYPE (x);
4287 if (ptr == (tree *)0)
4288 {
4289 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4290 up here if this is changed to an assertion. --KR */
4291 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4292 }
4293 else
4294 {
4295 *ptr = newval;
4296 }
4297 }
4298 return t;
4299 }
4300
4301 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4302 if appropriate. */
4303
4304 tree
4305 pushdecl_top_level (x)
4306 tree x;
4307 {
4308 tree cur_namespace = current_namespace;
4309 current_namespace = global_namespace;
4310 x = pushdecl_namespace_level (x);
4311 current_namespace = cur_namespace;
4312 return x;
4313 }
4314
4315 /* Make the declaration of X appear in CLASS scope. */
4316
4317 void
4318 pushdecl_class_level (x)
4319 tree x;
4320 {
4321 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4322 scope looks for the pre-mangled name. */
4323 register tree name;
4324
4325 if (TREE_CODE (x) == OVERLOAD)
4326 x = OVL_CURRENT (x);
4327 name = DECL_NAME (x);
4328
4329 if (name)
4330 {
4331 push_class_level_binding (name, x);
4332 if (TREE_CODE (x) == TYPE_DECL)
4333 set_identifier_type_value (name, TREE_TYPE (x));
4334 }
4335 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4336 {
4337 tree f;
4338
4339 for (f = TYPE_FIELDS (TREE_TYPE (x));
4340 f;
4341 f = TREE_CHAIN (f))
4342 pushdecl_class_level (f);
4343 }
4344 }
4345
4346 /* Enter DECL into the symbol table, if that's appropriate. Returns
4347 DECL, or a modified version thereof. */
4348
4349 tree
4350 maybe_push_decl (decl)
4351 tree decl;
4352 {
4353 tree type = TREE_TYPE (decl);
4354
4355 /* Add this decl to the current binding level, but not if it comes
4356 from another scope, e.g. a static member variable. TEM may equal
4357 DECL or it may be a previous decl of the same name. */
4358 if ((TREE_CODE (decl) != PARM_DECL
4359 && DECL_CONTEXT (decl) != NULL_TREE
4360 /* Definitions of namespace members outside their namespace are
4361 possible. */
4362 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4363 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4364 || TREE_CODE (type) == UNKNOWN_TYPE
4365 /* The declaration of a template specialization does not affect
4366 the functions available for overload resolution, so we do not
4367 call pushdecl. */
4368 || (TREE_CODE (decl) == FUNCTION_DECL
4369 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4370 return decl;
4371 else
4372 return pushdecl (decl);
4373 }
4374
4375 #if 0
4376 /* This function is used to push the mangled decls for nested types into
4377 the appropriate scope. Previously pushdecl_top_level was used, but that
4378 is incorrect for members of local classes. */
4379
4380 void
4381 pushdecl_nonclass_level (x)
4382 tree x;
4383 {
4384 struct binding_level *b = current_binding_level;
4385
4386 my_friendly_assert (b->parm_flag != 2, 180);
4387
4388 #if 0
4389 /* Get out of template binding levels */
4390 while (b->pseudo_global)
4391 b = b->level_chain;
4392 #endif
4393
4394 pushdecl_with_scope (x, b);
4395 }
4396 #endif
4397
4398 /* Make the declaration(s) of X appear in CLASS scope
4399 under the name NAME. */
4400
4401 void
4402 push_class_level_binding (name, x)
4403 tree name;
4404 tree x;
4405 {
4406 tree binding;
4407 /* The class_binding_level will be NULL if x is a template
4408 parameter name in a member template. */
4409 if (!class_binding_level)
4410 return;
4411
4412 /* Make sure that this new member does not have the same name
4413 as a template parameter. */
4414 if (TYPE_BEING_DEFINED (current_class_type))
4415 check_template_shadow (x);
4416
4417 /* If this declaration shadows a declaration from an enclosing
4418 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4419 we leave this class. Record the shadowed declaration here. */
4420 binding = IDENTIFIER_BINDING (name);
4421 if (binding
4422 && ((TREE_CODE (x) == OVERLOAD
4423 && BINDING_VALUE (binding)
4424 && is_overloaded_fn (BINDING_VALUE (binding)))
4425 || INHERITED_VALUE_BINDING_P (binding)))
4426 {
4427 tree shadow;
4428 tree old_decl;
4429
4430 /* If the old binding was from a base class, and was for a tag
4431 name, slide it over to make room for the new binding. The
4432 old binding is still visible if explicitly qualified with a
4433 class-key. */
4434 if (INHERITED_VALUE_BINDING_P (binding)
4435 && BINDING_VALUE (binding)
4436 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4437 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4438 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4439 {
4440 old_decl = BINDING_TYPE (binding);
4441 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4442 BINDING_VALUE (binding) = NULL_TREE;
4443 INHERITED_VALUE_BINDING_P (binding) = 0;
4444 }
4445 else
4446 old_decl = BINDING_VALUE (binding);
4447
4448 /* There was already a binding for X containing fewer
4449 functions than are named in X. Find the previous
4450 declaration of X on the class-shadowed list, and update it. */
4451 for (shadow = class_binding_level->class_shadowed;
4452 shadow;
4453 shadow = TREE_CHAIN (shadow))
4454 if (TREE_PURPOSE (shadow) == name
4455 && TREE_TYPE (shadow) == old_decl)
4456 {
4457 BINDING_VALUE (binding) = x;
4458 INHERITED_VALUE_BINDING_P (binding) = 0;
4459 TREE_TYPE (shadow) = x;
4460 return;
4461 }
4462 }
4463
4464 /* If we didn't replace an existing binding, put the binding on the
4465 stack of bindings for the identifier, and update
4466 IDENTIFIER_CLASS_VALUE. */
4467 if (push_class_binding (name, x))
4468 {
4469 push_cache_obstack ();
4470 class_binding_level->class_shadowed
4471 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4472 class_binding_level->class_shadowed);
4473 pop_obstacks ();
4474 /* Record the value we are binding NAME to so that we can know
4475 what to pop later. */
4476 TREE_TYPE (class_binding_level->class_shadowed) = x;
4477 }
4478 }
4479
4480 /* Insert another USING_DECL into the current binding level,
4481 returning this declaration. If this is a redeclaration,
4482 do nothing and return NULL_TREE. */
4483
4484 tree
4485 push_using_decl (scope, name)
4486 tree scope;
4487 tree name;
4488 {
4489 tree decl;
4490
4491 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4492 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4493 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4494 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4495 break;
4496 if (decl)
4497 return NULL_TREE;
4498 decl = build_lang_decl (USING_DECL, name, void_type_node);
4499 DECL_INITIAL (decl) = scope;
4500 TREE_CHAIN (decl) = current_binding_level->usings;
4501 current_binding_level->usings = decl;
4502 return decl;
4503 }
4504
4505 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4506 changed (i.e. there was already a directive), or the fresh
4507 TREE_LIST otherwise. */
4508
4509 tree
4510 push_using_directive (used)
4511 tree used;
4512 {
4513 tree ud = current_binding_level->using_directives;
4514 tree iter, ancestor;
4515
4516 /* Check if we already have this. */
4517 if (purpose_member (used, ud) != NULL_TREE)
4518 return NULL_TREE;
4519
4520 /* Recursively add all namespaces used. */
4521 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4522 push_using_directive (TREE_PURPOSE (iter));
4523
4524 ancestor = namespace_ancestor (current_decl_namespace (), used);
4525 ud = current_binding_level->using_directives;
4526 ud = perm_tree_cons (used, ancestor, ud);
4527 current_binding_level->using_directives = ud;
4528 return ud;
4529 }
4530
4531 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4532 other definitions already in place. We get around this by making
4533 the value of the identifier point to a list of all the things that
4534 want to be referenced by that name. It is then up to the users of
4535 that name to decide what to do with that list.
4536
4537 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4538 slot. It is dealt with the same way.
4539
4540 FLAGS is a bitwise-or of the following values:
4541 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4542 namespace scope.
4543 PUSH_USING: DECL is being pushed as the result of a using
4544 declaration.
4545
4546 The value returned may be a previous declaration if we guessed wrong
4547 about what language DECL should belong to (C or C++). Otherwise,
4548 it's always DECL (and never something that's not a _DECL). */
4549
4550 tree
4551 push_overloaded_decl (decl, flags)
4552 tree decl;
4553 int flags;
4554 {
4555 tree name = DECL_NAME (decl);
4556 tree old;
4557 tree new_binding;
4558 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4559
4560 if (doing_global)
4561 old = namespace_binding (name, DECL_CONTEXT (decl));
4562 else
4563 old = lookup_name_current_level (name);
4564
4565 if (old)
4566 {
4567 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4568 {
4569 tree t = TREE_TYPE (old);
4570 if (IS_AGGR_TYPE (t) && warn_shadow
4571 && (! DECL_IN_SYSTEM_HEADER (decl)
4572 || ! DECL_IN_SYSTEM_HEADER (old)))
4573 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4574 old = NULL_TREE;
4575 }
4576 else if (is_overloaded_fn (old))
4577 {
4578 tree tmp;
4579
4580 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4581 {
4582 tree fn = OVL_CURRENT (tmp);
4583
4584 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4585 && !(flags & PUSH_USING)
4586 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4587 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4588 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4589 decl, fn);
4590
4591 if (duplicate_decls (decl, fn))
4592 return fn;
4593 }
4594 }
4595 else
4596 {
4597 cp_error_at ("previous non-function declaration `%#D'", old);
4598 cp_error ("conflicts with function declaration `%#D'", decl);
4599 return decl;
4600 }
4601 }
4602
4603 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4604 {
4605 if (old && TREE_CODE (old) != OVERLOAD)
4606 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4607 else
4608 new_binding = ovl_cons (decl, old);
4609 if (flags & PUSH_USING)
4610 OVL_USED (new_binding) = 1;
4611 }
4612 else
4613 /* NAME is not ambiguous. */
4614 new_binding = decl;
4615
4616 if (doing_global)
4617 set_namespace_binding (name, current_namespace, new_binding);
4618 else
4619 {
4620 /* We only create an OVERLOAD if there was a previous binding at
4621 this level, or if decl is a template. In the former case, we
4622 need to remove the old binding and replace it with the new
4623 binding. We must also run through the NAMES on the binding
4624 level where the name was bound to update the chain. */
4625
4626 if (TREE_CODE (new_binding) == OVERLOAD && old)
4627 {
4628 tree *d;
4629
4630 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4631 *d;
4632 d = &TREE_CHAIN (*d))
4633 if (*d == old
4634 || (TREE_CODE (*d) == TREE_LIST
4635 && TREE_VALUE (*d) == old))
4636 {
4637 if (TREE_CODE (*d) == TREE_LIST)
4638 /* Just replace the old binding with the new. */
4639 TREE_VALUE (*d) = new_binding;
4640 else
4641 /* Build a TREE_LIST to wrap the OVERLOAD. */
4642 *d = build_tree_list (NULL_TREE, new_binding);
4643
4644 /* And update the CPLUS_BINDING node. */
4645 BINDING_VALUE (IDENTIFIER_BINDING (name))
4646 = new_binding;
4647 return decl;
4648 }
4649
4650 /* We should always find a previous binding in this case. */
4651 my_friendly_abort (0);
4652 }
4653
4654 /* Install the new binding. */
4655 push_local_binding (name, new_binding, flags);
4656 }
4657
4658 return decl;
4659 }
4660 \f
4661 /* Generate an implicit declaration for identifier FUNCTIONID
4662 as a function of type int (). Print a warning if appropriate. */
4663
4664 tree
4665 implicitly_declare (functionid)
4666 tree functionid;
4667 {
4668 register tree decl;
4669 int temp = allocation_temporary_p ();
4670
4671 push_obstacks_nochange ();
4672
4673 /* Save the decl permanently so we can warn if definition follows.
4674 In ANSI C, warn_implicit is usually false, so the saves little space.
4675 But in C++, it's usually true, hence the extra code. */
4676 if (temp && (! warn_implicit || toplevel_bindings_p ()))
4677 end_temporary_allocation ();
4678
4679 /* We used to reuse an old implicit decl here,
4680 but this loses with inline functions because it can clobber
4681 the saved decl chains. */
4682 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4683
4684 DECL_EXTERNAL (decl) = 1;
4685 TREE_PUBLIC (decl) = 1;
4686
4687 /* ANSI standard says implicit declarations are in the innermost block.
4688 So we record the decl in the standard fashion. */
4689 pushdecl (decl);
4690 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4691
4692 if (warn_implicit
4693 /* Only one warning per identifier. */
4694 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4695 {
4696 cp_pedwarn ("implicit declaration of function `%#D'", decl);
4697 }
4698
4699 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4700
4701 pop_obstacks ();
4702
4703 return decl;
4704 }
4705
4706 /* Return zero if the declaration NEWDECL is valid
4707 when the declaration OLDDECL (assumed to be for the same name)
4708 has already been seen.
4709 Otherwise return an error message format string with a %s
4710 where the identifier should go. */
4711
4712 static const char *
4713 redeclaration_error_message (newdecl, olddecl)
4714 tree newdecl, olddecl;
4715 {
4716 if (TREE_CODE (newdecl) == TYPE_DECL)
4717 {
4718 /* Because C++ can put things into name space for free,
4719 constructs like "typedef struct foo { ... } foo"
4720 would look like an erroneous redeclaration. */
4721 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4722 return 0;
4723 else
4724 return "redefinition of `%#D'";
4725 }
4726 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4727 {
4728 /* If this is a pure function, its olddecl will actually be
4729 the original initialization to `0' (which we force to call
4730 abort()). Don't complain about redefinition in this case. */
4731 if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4732 return 0;
4733
4734 /* If both functions come from different namespaces, this is not
4735 a redeclaration - this is a conflict with a used function. */
4736 if (DECL_NAMESPACE_SCOPE_P (olddecl)
4737 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4738 return "`%D' conflicts with used function";
4739
4740 /* We'll complain about linkage mismatches in
4741 warn_extern_redeclared_static. */
4742
4743 /* Defining the same name twice is no good. */
4744 if (DECL_INITIAL (olddecl) != NULL_TREE
4745 && DECL_INITIAL (newdecl) != NULL_TREE)
4746 {
4747 if (DECL_NAME (olddecl) == NULL_TREE)
4748 return "`%#D' not declared in class";
4749 else
4750 return "redefinition of `%#D'";
4751 }
4752 return 0;
4753 }
4754 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4755 {
4756 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4757 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4758 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4759 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4760 && TYPE_SIZE (TREE_TYPE (newdecl))
4761 && TYPE_SIZE (TREE_TYPE (olddecl))))
4762 return "redefinition of `%#D'";
4763 return 0;
4764 }
4765 else if (toplevel_bindings_p ())
4766 {
4767 /* Objects declared at top level: */
4768 /* If at least one is a reference, it's ok. */
4769 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4770 return 0;
4771 /* Reject two definitions. */
4772 return "redefinition of `%#D'";
4773 }
4774 else
4775 {
4776 /* Objects declared with block scope: */
4777 /* Reject two definitions, and reject a definition
4778 together with an external reference. */
4779 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4780 return "redeclaration of `%#D'";
4781 return 0;
4782 }
4783 }
4784 \f
4785 /* Create a new label, named ID. */
4786
4787 static tree
4788 make_label_decl (id, local_p)
4789 tree id;
4790 int local_p;
4791 {
4792 tree decl;
4793
4794 if (building_stmt_tree ())
4795 push_permanent_obstack ();
4796 decl = build_decl (LABEL_DECL, id, void_type_node);
4797 if (building_stmt_tree ())
4798 pop_obstacks ();
4799 else
4800 /* Make sure every label has an rtx. */
4801 label_rtx (decl);
4802
4803 DECL_CONTEXT (decl) = current_function_decl;
4804 DECL_MODE (decl) = VOIDmode;
4805 C_DECLARED_LABEL_FLAG (decl) = local_p;
4806
4807 /* Say where one reference is to the label, for the sake of the
4808 error if it is not defined. */
4809 DECL_SOURCE_LINE (decl) = lineno;
4810 DECL_SOURCE_FILE (decl) = input_filename;
4811
4812 /* Record the fact that this identifier is bound to this label. */
4813 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4814
4815 /* Record this label on the list of used labels so that we can check
4816 at the end of the function to see whether or not the label was
4817 actually defined. */
4818 if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4819 && (named_label_uses == NULL
4820 || named_label_uses->names_in_scope != current_binding_level->names
4821 || named_label_uses->label_decl != decl))
4822 {
4823 struct named_label_list *new_ent;
4824 new_ent
4825 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4826 new_ent->label_decl = decl;
4827 new_ent->names_in_scope = current_binding_level->names;
4828 new_ent->binding_level = current_binding_level;
4829 new_ent->lineno_o_goto = lineno;
4830 new_ent->filename_o_goto = input_filename;
4831 new_ent->next = named_label_uses;
4832 named_label_uses = new_ent;
4833 }
4834
4835 return decl;
4836 }
4837
4838 /* Look for a label named ID in the current function. If one cannot
4839 be found, create one. (We keep track of used, but undefined,
4840 labels, and complain about them at the end of a function.) */
4841
4842 tree
4843 lookup_label (id)
4844 tree id;
4845 {
4846 tree decl;
4847
4848 /* You can't use labels at global scope. */
4849 if (current_function_decl == NULL_TREE)
4850 {
4851 error ("label `%s' referenced outside of any function",
4852 IDENTIFIER_POINTER (id));
4853 return NULL_TREE;
4854 }
4855
4856 /* See if we've already got this label. */
4857 decl = IDENTIFIER_LABEL_VALUE (id);
4858 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4859 return decl;
4860
4861 /* Record this label on the list of labels used in this function.
4862 We do this before calling make_label_decl so that we get the
4863 IDENTIFIER_LABEL_VALUE before the new label is declared. */
4864 named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4865 named_labels);
4866 /* We need a new label. */
4867 decl = make_label_decl (id, /*local_p=*/0);
4868 /* Now fill in the information we didn't have before. */
4869 TREE_VALUE (named_labels) = decl;
4870
4871 return decl;
4872 }
4873
4874 /* Declare a local label named ID. */
4875
4876 tree
4877 declare_local_label (id)
4878 tree id;
4879 {
4880 tree decl;
4881
4882 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4883 this scope we can restore the old value of
4884 IDENTIFIER_TYPE_VALUE. */
4885 current_binding_level->shadowed_labels
4886 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4887 current_binding_level->shadowed_labels);
4888 /* Look for the label. */
4889 decl = make_label_decl (id, /*local_p=*/1);
4890 /* Now fill in the information we didn't have before. */
4891 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4892
4893 return decl;
4894 }
4895
4896 /* Define a label, specifying the location in the source file.
4897 Return the LABEL_DECL node for the label, if the definition is valid.
4898 Otherwise return 0. */
4899
4900 tree
4901 define_label (filename, line, name)
4902 char *filename;
4903 int line;
4904 tree name;
4905 {
4906 tree decl = lookup_label (name);
4907
4908 /* After labels, make any new cleanups go into their
4909 own new (temporary) binding contour. */
4910 current_binding_level->more_cleanups_ok = 0;
4911
4912 if (name == get_identifier ("wchar_t"))
4913 cp_pedwarn ("label named wchar_t");
4914
4915 if (DECL_INITIAL (decl) != NULL_TREE)
4916 {
4917 cp_error ("duplicate label `%D'", decl);
4918 return 0;
4919 }
4920 else
4921 {
4922 struct named_label_list *uses, *prev;
4923 int identified = 0;
4924 int saw_eh = 0;
4925
4926 /* Mark label as having been defined. */
4927 DECL_INITIAL (decl) = error_mark_node;
4928 /* Say where in the source. */
4929 DECL_SOURCE_FILE (decl) = filename;
4930 DECL_SOURCE_LINE (decl) = line;
4931
4932 prev = NULL;
4933 uses = named_label_uses;
4934 while (uses != NULL)
4935 if (uses->label_decl == decl)
4936 {
4937 struct binding_level *b = current_binding_level;
4938 while (b)
4939 {
4940 tree new_decls = b->names;
4941 tree old_decls = (b == uses->binding_level)
4942 ? uses->names_in_scope : NULL_TREE;
4943 while (new_decls != old_decls)
4944 {
4945 if (TREE_CODE (new_decls) == VAR_DECL
4946 /* Don't complain about crossing initialization
4947 of internal entities. They can't be accessed,
4948 and they should be cleaned up
4949 by the time we get to the label. */
4950 && ! DECL_ARTIFICIAL (new_decls)
4951 && !(DECL_INITIAL (new_decls) == NULL_TREE
4952 && pod_type_p (TREE_TYPE (new_decls))))
4953 {
4954 /* This is really only important if we're crossing
4955 an initialization. The POD stuff is just
4956 pedantry; why should it matter if the class
4957 contains a field of pointer to member type? */
4958 int problem = (DECL_INITIAL (new_decls)
4959 || (TYPE_NEEDS_CONSTRUCTING
4960 (TREE_TYPE (new_decls))));
4961
4962 if (! identified)
4963 {
4964 if (problem)
4965 {
4966 cp_error ("jump to label `%D'", decl);
4967 error_with_file_and_line
4968 (uses->filename_o_goto,
4969 uses->lineno_o_goto, " from here");
4970 }
4971 else
4972 {
4973 cp_pedwarn ("jump to label `%D'", decl);
4974 pedwarn_with_file_and_line
4975 (uses->filename_o_goto,
4976 uses->lineno_o_goto, " from here");
4977 }
4978 identified = 1;
4979 }
4980
4981 if (problem)
4982 cp_error_at (" crosses initialization of `%#D'",
4983 new_decls);
4984 else
4985 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4986 new_decls);
4987 }
4988 new_decls = TREE_CHAIN (new_decls);
4989 }
4990 if (b == uses->binding_level)
4991 break;
4992 if (b->eh_region && ! saw_eh)
4993 {
4994 if (! identified)
4995 {
4996 cp_error ("jump to label `%D'", decl);
4997 error_with_file_and_line
4998 (uses->filename_o_goto,
4999 uses->lineno_o_goto, " from here");
5000 identified = 1;
5001 }
5002 error (" enters exception handling block");
5003 saw_eh = 1;
5004 }
5005 b = b->level_chain;
5006 }
5007
5008 if (prev != NULL)
5009 prev->next = uses->next;
5010 else
5011 named_label_uses = uses->next;
5012
5013 uses = uses->next;
5014 }
5015 else
5016 {
5017 prev = uses;
5018 uses = uses->next;
5019 }
5020 current_function_return_value = NULL_TREE;
5021 return decl;
5022 }
5023 }
5024
5025 struct cp_switch
5026 {
5027 struct binding_level *level;
5028 struct cp_switch *next;
5029 };
5030
5031 static struct cp_switch *switch_stack;
5032
5033 void
5034 push_switch ()
5035 {
5036 struct cp_switch *p
5037 = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
5038 p->level = current_binding_level;
5039 p->next = switch_stack;
5040 switch_stack = p;
5041 }
5042
5043 void
5044 pop_switch ()
5045 {
5046 switch_stack = switch_stack->next;
5047 }
5048
5049 /* Same, but for CASE labels. If DECL is NULL_TREE, it's the default. */
5050 /* XXX Note decl is never actually used. (bpk) */
5051
5052 void
5053 define_case_label ()
5054 {
5055 tree cleanup = last_cleanup_this_contour ();
5056 struct binding_level *b = current_binding_level;
5057 int identified = 0;
5058
5059 if (cleanup)
5060 {
5061 static int explained = 0;
5062 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
5063 warning ("where case label appears here");
5064 if (!explained)
5065 {
5066 warning ("(enclose actions of previous case statements requiring");
5067 warning ("destructors in their own binding contours.)");
5068 explained = 1;
5069 }
5070 }
5071
5072 for (; b && b != switch_stack->level; b = b->level_chain)
5073 {
5074 tree new_decls = b->names;
5075 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
5076 {
5077 if (TREE_CODE (new_decls) == VAR_DECL
5078 /* Don't complain about crossing initialization
5079 of internal entities. They can't be accessed,
5080 and they should be cleaned up
5081 by the time we get to the label. */
5082 && ! DECL_ARTIFICIAL (new_decls)
5083 && ((DECL_INITIAL (new_decls) != NULL_TREE
5084 && DECL_INITIAL (new_decls) != error_mark_node)
5085 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
5086 {
5087 if (! identified)
5088 error ("jump to case label");
5089 identified = 1;
5090 cp_error_at (" crosses initialization of `%#D'",
5091 new_decls);
5092 }
5093 }
5094 }
5095
5096 /* After labels, make any new cleanups go into their
5097 own new (temporary) binding contour. */
5098
5099 current_binding_level->more_cleanups_ok = 0;
5100 current_function_return_value = NULL_TREE;
5101 }
5102 \f
5103 /* Return the list of declarations of the current level.
5104 Note that this list is in reverse order unless/until
5105 you nreverse it; and when you do nreverse it, you must
5106 store the result back using `storedecls' or you will lose. */
5107
5108 tree
5109 getdecls ()
5110 {
5111 return current_binding_level->names;
5112 }
5113
5114 /* Return the list of type-tags (for structs, etc) of the current level. */
5115
5116 tree
5117 gettags ()
5118 {
5119 return current_binding_level->tags;
5120 }
5121
5122 /* Store the list of declarations of the current level.
5123 This is done for the parameter declarations of a function being defined,
5124 after they are modified in the light of any missing parameters. */
5125
5126 static void
5127 storedecls (decls)
5128 tree decls;
5129 {
5130 current_binding_level->names = decls;
5131 }
5132
5133 /* Similarly, store the list of tags of the current level. */
5134
5135 void
5136 storetags (tags)
5137 tree tags;
5138 {
5139 current_binding_level->tags = tags;
5140 }
5141 \f
5142 /* Given NAME, an IDENTIFIER_NODE,
5143 return the structure (or union or enum) definition for that name.
5144 Searches binding levels from BINDING_LEVEL up to the global level.
5145 If THISLEVEL_ONLY is nonzero, searches only the specified context
5146 (but skips any tag-transparent contexts to find one that is
5147 meaningful for tags).
5148 FORM says which kind of type the caller wants;
5149 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5150 If the wrong kind of type is found, and it's not a template, an error is
5151 reported. */
5152
5153 static tree
5154 lookup_tag (form, name, binding_level, thislevel_only)
5155 enum tree_code form;
5156 tree name;
5157 struct binding_level *binding_level;
5158 int thislevel_only;
5159 {
5160 register struct binding_level *level;
5161 /* Non-zero if, we should look past a pseudo-global level, even if
5162 THISLEVEL_ONLY. */
5163 int allow_pseudo_global = 1;
5164
5165 for (level = binding_level; level; level = level->level_chain)
5166 {
5167 register tree tail;
5168 if (ANON_AGGRNAME_P (name))
5169 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5170 {
5171 /* There's no need for error checking here, because
5172 anon names are unique throughout the compilation. */
5173 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5174 return TREE_VALUE (tail);
5175 }
5176 else if (level->namespace_p)
5177 /* Do namespace lookup. */
5178 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5179 {
5180 tree old = binding_for_name (name, tail);
5181
5182 /* If we just skipped past a pseudo global level, even
5183 though THISLEVEL_ONLY, and we find a template class
5184 declaration, then we use the _TYPE node for the
5185 template. See the example below. */
5186 if (thislevel_only && !allow_pseudo_global
5187 && old && BINDING_VALUE (old)
5188 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5189 old = TREE_TYPE (BINDING_VALUE (old));
5190 else
5191 old = BINDING_TYPE (old);
5192
5193 /* If it has an original type, it is a typedef, and we
5194 should not return it. */
5195 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5196 old = NULL_TREE;
5197 if (old && TREE_CODE (old) != form
5198 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5199 {
5200 cp_error ("`%#D' redeclared as %C", old, form);
5201 return NULL_TREE;
5202 }
5203 if (old)
5204 return old;
5205 if (thislevel_only || tail == global_namespace)
5206 return NULL_TREE;
5207 }
5208 else
5209 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5210 {
5211 if (TREE_PURPOSE (tail) == name)
5212 {
5213 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5214 /* Should tighten this up; it'll probably permit
5215 UNION_TYPE and a struct template, for example. */
5216 if (code != form
5217 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5218 {
5219 /* Definition isn't the kind we were looking for. */
5220 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5221 form);
5222 return NULL_TREE;
5223 }
5224 return TREE_VALUE (tail);
5225 }
5226 }
5227 if (thislevel_only && ! level->tag_transparent)
5228 {
5229 if (level->pseudo_global && allow_pseudo_global)
5230 {
5231 /* We must deal with cases like this:
5232
5233 template <class T> struct S;
5234 template <class T> struct S {};
5235
5236 When looking up `S', for the second declaration, we
5237 would like to find the first declaration. But, we
5238 are in the pseudo-global level created for the
5239 template parameters, rather than the (surrounding)
5240 namespace level. Thus, we keep going one more level,
5241 even though THISLEVEL_ONLY is non-zero. */
5242 allow_pseudo_global = 0;
5243 continue;
5244 }
5245 else
5246 return NULL_TREE;
5247 }
5248 }
5249 return NULL_TREE;
5250 }
5251
5252 #if 0
5253 void
5254 set_current_level_tags_transparency (tags_transparent)
5255 int tags_transparent;
5256 {
5257 current_binding_level->tag_transparent = tags_transparent;
5258 }
5259 #endif
5260
5261 /* Given a type, find the tag that was defined for it and return the tag name.
5262 Otherwise return 0. However, the value can never be 0
5263 in the cases in which this is used.
5264
5265 C++: If NAME is non-zero, this is the new name to install. This is
5266 done when replacing anonymous tags with real tag names. */
5267
5268 static tree
5269 lookup_tag_reverse (type, name)
5270 tree type;
5271 tree name;
5272 {
5273 register struct binding_level *level;
5274
5275 for (level = current_binding_level; level; level = level->level_chain)
5276 {
5277 register tree tail;
5278 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5279 {
5280 if (TREE_VALUE (tail) == type)
5281 {
5282 if (name)
5283 TREE_PURPOSE (tail) = name;
5284 return TREE_PURPOSE (tail);
5285 }
5286 }
5287 }
5288 return NULL_TREE;
5289 }
5290 \f
5291 /* Look up NAME in the NAMESPACE. */
5292
5293 tree
5294 lookup_namespace_name (namespace, name)
5295 tree namespace, name;
5296 {
5297 struct tree_binding _b;
5298 tree val;
5299 tree template_id = NULL_TREE;
5300
5301 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5302
5303 if (TREE_CODE (name) == NAMESPACE_DECL)
5304 /* This happens for A::B<int> when B is a namespace. */
5305 return name;
5306 else if (TREE_CODE (name) == TEMPLATE_DECL)
5307 {
5308 /* This happens for A::B where B is a template, and there are no
5309 template arguments. */
5310 cp_error ("invalid use of `%D'", name);
5311 return error_mark_node;
5312 }
5313
5314 namespace = ORIGINAL_NAMESPACE (namespace);
5315
5316 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5317 {
5318 template_id = name;
5319 name = TREE_OPERAND (name, 0);
5320 if (TREE_CODE (name) == OVERLOAD)
5321 name = DECL_NAME (OVL_CURRENT (name));
5322 else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5323 name = DECL_NAME (name);
5324 }
5325
5326 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5327
5328 val = binding_init (&_b);
5329 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5330 return error_mark_node;
5331
5332 if (BINDING_VALUE (val))
5333 {
5334 val = BINDING_VALUE (val);
5335
5336 if (template_id)
5337 {
5338 if (DECL_CLASS_TEMPLATE_P (val))
5339 val = lookup_template_class (val,
5340 TREE_OPERAND (template_id, 1),
5341 /*in_decl=*/NULL_TREE,
5342 /*context=*/NULL_TREE,
5343 /*entering_scope=*/0);
5344 else if (DECL_FUNCTION_TEMPLATE_P (val)
5345 || TREE_CODE (val) == OVERLOAD)
5346 val = lookup_template_function (val,
5347 TREE_OPERAND (template_id, 1));
5348 else
5349 {
5350 cp_error ("`%D::%D' is not a template",
5351 namespace, name);
5352 return error_mark_node;
5353 }
5354 }
5355
5356 /* If we have a single function from a using decl, pull it out. */
5357 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5358 val = OVL_FUNCTION (val);
5359 return val;
5360 }
5361
5362 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5363 return error_mark_node;
5364 }
5365
5366 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5367
5368 static unsigned long
5369 typename_hash (k)
5370 hash_table_key k;
5371 {
5372 unsigned long hash;
5373 tree t;
5374
5375 t = (tree) k;
5376 hash = (((unsigned long) TYPE_CONTEXT (t))
5377 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5378
5379 return hash;
5380 }
5381
5382 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5383
5384 static boolean
5385 typename_compare (k1, k2)
5386 hash_table_key k1;
5387 hash_table_key k2;
5388 {
5389 tree t1;
5390 tree t2;
5391 tree d1;
5392 tree d2;
5393
5394 t1 = (tree) k1;
5395 t2 = (tree) k2;
5396 d1 = TYPE_NAME (t1);
5397 d2 = TYPE_NAME (t2);
5398
5399 return (DECL_NAME (d1) == DECL_NAME (d2)
5400 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5401 && ((TREE_TYPE (t1) != NULL_TREE)
5402 == (TREE_TYPE (t2) != NULL_TREE))
5403 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5404 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5405 }
5406
5407 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5408 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5409 is non-NULL, this type is being created by the implicit typename
5410 extension, and BASE_TYPE is a type named `t' in some base class of
5411 `T' which depends on template parameters.
5412
5413 Returns the new TYPENAME_TYPE. */
5414
5415 tree
5416 build_typename_type (context, name, fullname, base_type)
5417 tree context;
5418 tree name;
5419 tree fullname;
5420 tree base_type;
5421 {
5422 tree t;
5423 tree d;
5424 struct hash_entry* e;
5425
5426 static struct hash_table ht;
5427
5428 push_obstacks (&permanent_obstack, &permanent_obstack);
5429
5430 if (!ht.table
5431 && !hash_table_init (&ht, &hash_newfunc, &typename_hash,
5432 &typename_compare))
5433 fatal ("virtual memory exhausted");
5434
5435 /* The FULLNAME needs to exist for the life of the hash table, i.e.,
5436 for the entire compilation. */
5437 if (!TREE_PERMANENT (fullname))
5438 fullname = copy_to_permanent (fullname);
5439
5440 /* Build the TYPENAME_TYPE. */
5441 t = make_lang_type (TYPENAME_TYPE);
5442 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5443 TYPENAME_TYPE_FULLNAME (t) = fullname;
5444 TREE_TYPE (t) = base_type;
5445
5446 /* Build the corresponding TYPE_DECL. */
5447 d = build_decl (TYPE_DECL, name, t);
5448 TYPE_NAME (TREE_TYPE (d)) = d;
5449 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5450 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5451 DECL_ARTIFICIAL (d) = 1;
5452
5453 /* See if we already have this type. */
5454 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5455 if (e)
5456 {
5457 /* This will free not only TREE_TYPE, but the lang-specific data
5458 and the TYPE_DECL as well. */
5459 obstack_free (&permanent_obstack, t);
5460 t = (tree) e->key;
5461 }
5462 else
5463 /* Insert the type into the table. */
5464 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5465
5466 pop_obstacks ();
5467
5468 return t;
5469 }
5470
5471 tree
5472 make_typename_type (context, name)
5473 tree context, name;
5474 {
5475 tree fullname;
5476
5477 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5478 {
5479 if (!(TYPE_LANG_SPECIFIC (name)
5480 && (CLASSTYPE_IS_TEMPLATE (name)
5481 || CLASSTYPE_USE_TEMPLATE (name))))
5482 name = TYPE_IDENTIFIER (name);
5483 else
5484 /* Create a TEMPLATE_ID_EXPR for the type. */
5485 name = build_nt (TEMPLATE_ID_EXPR,
5486 CLASSTYPE_TI_TEMPLATE (name),
5487 CLASSTYPE_TI_ARGS (name));
5488 }
5489 else if (TREE_CODE (name) == TYPE_DECL)
5490 name = DECL_NAME (name);
5491
5492 fullname = name;
5493
5494 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5495 {
5496 name = TREE_OPERAND (name, 0);
5497 if (TREE_CODE (name) == TEMPLATE_DECL)
5498 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5499 }
5500 if (TREE_CODE (name) != IDENTIFIER_NODE)
5501 my_friendly_abort (2000);
5502
5503 if (TREE_CODE (context) == NAMESPACE_DECL)
5504 {
5505 /* We can get here from typename_sub0 in the explicit_template_type
5506 expansion. Just fail. */
5507 cp_error ("no class template named `%#T' in `%#T'",
5508 name, context);
5509 return error_mark_node;
5510 }
5511
5512 if (! uses_template_parms (context)
5513 || currently_open_class (context))
5514 {
5515 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5516 {
5517 tree tmpl = NULL_TREE;
5518 if (IS_AGGR_TYPE (context))
5519 tmpl = lookup_field (context, name, 0, 0);
5520 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5521 {
5522 cp_error ("no class template named `%#T' in `%#T'",
5523 name, context);
5524 return error_mark_node;
5525 }
5526
5527 return lookup_template_class (tmpl,
5528 TREE_OPERAND (fullname, 1),
5529 NULL_TREE, context,
5530 /*entering_scope=*/0);
5531 }
5532 else
5533 {
5534 tree t;
5535
5536 if (!IS_AGGR_TYPE (context))
5537 {
5538 cp_error ("no type named `%#T' in `%#T'", name, context);
5539 return error_mark_node;
5540 }
5541
5542 t = lookup_field (context, name, 0, 1);
5543 if (t)
5544 return TREE_TYPE (t);
5545 }
5546 }
5547
5548 /* If the CONTEXT is not a template type, then either the field is
5549 there now or its never going to be. */
5550 if (!uses_template_parms (context))
5551 {
5552 cp_error ("no type named `%#T' in `%#T'", name, context);
5553 return error_mark_node;
5554 }
5555
5556
5557 return build_typename_type (context, name, fullname, NULL_TREE);
5558 }
5559
5560 /* Select the right _DECL from multiple choices. */
5561
5562 static tree
5563 select_decl (binding, flags)
5564 tree binding;
5565 int flags;
5566 {
5567 tree val;
5568 val = BINDING_VALUE (binding);
5569 if (LOOKUP_NAMESPACES_ONLY (flags))
5570 {
5571 /* We are not interested in types. */
5572 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5573 return val;
5574 return NULL_TREE;
5575 }
5576
5577 /* If we could have a type and
5578 we have nothing or we need a type and have none. */
5579 if (BINDING_TYPE (binding)
5580 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5581 && TREE_CODE (val) != TYPE_DECL)))
5582 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5583 /* Don't return non-types if we really prefer types. */
5584 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
5585 && (TREE_CODE (val) != TEMPLATE_DECL
5586 || !DECL_CLASS_TEMPLATE_P (val)))
5587 val = NULL_TREE;
5588
5589 return val;
5590 }
5591
5592 /* Unscoped lookup of a global: iterate over current namespaces,
5593 considering using-directives. If SPACESP is non-NULL, store a list
5594 of the namespaces we've considered in it. */
5595
5596 tree
5597 unqualified_namespace_lookup (name, flags, spacesp)
5598 tree name;
5599 int flags;
5600 tree *spacesp;
5601 {
5602 struct tree_binding _binding;
5603 tree b = binding_init (&_binding);
5604 tree initial = current_decl_namespace();
5605 tree scope = initial;
5606 tree siter;
5607 struct binding_level *level;
5608 tree val = NULL_TREE;
5609
5610 if (spacesp)
5611 *spacesp = NULL_TREE;
5612
5613 for (; !val; scope = CP_DECL_CONTEXT (scope))
5614 {
5615 if (spacesp)
5616 *spacesp = scratch_tree_cons (scope, NULL_TREE, *spacesp);
5617 val = binding_for_name (name, scope);
5618
5619 /* Initialize binding for this context. */
5620 BINDING_VALUE (b) = BINDING_VALUE (val);
5621 BINDING_TYPE (b) = BINDING_TYPE (val);
5622
5623 /* Add all _DECLs seen through local using-directives. */
5624 for (level = current_binding_level;
5625 !level->namespace_p;
5626 level = level->level_chain)
5627 if (!lookup_using_namespace (name, b, level->using_directives,
5628 scope, flags, spacesp))
5629 /* Give up because of error. */
5630 return error_mark_node;
5631
5632 /* Add all _DECLs seen through global using-directives. */
5633 /* XXX local and global using lists should work equally. */
5634 siter = initial;
5635 while (1)
5636 {
5637 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5638 scope, flags, spacesp))
5639 /* Give up because of error. */
5640 return error_mark_node;
5641 if (siter == scope) break;
5642 siter = CP_DECL_CONTEXT (siter);
5643 }
5644
5645 val = select_decl (b, flags);
5646 if (scope == global_namespace)
5647 break;
5648 }
5649 return val;
5650 }
5651
5652 /* Combine prefer_type and namespaces_only into flags. */
5653
5654 static int
5655 lookup_flags (prefer_type, namespaces_only)
5656 int prefer_type, namespaces_only;
5657 {
5658 if (namespaces_only)
5659 return LOOKUP_PREFER_NAMESPACES;
5660 if (prefer_type > 1)
5661 return LOOKUP_PREFER_TYPES;
5662 if (prefer_type > 0)
5663 return LOOKUP_PREFER_BOTH;
5664 return 0;
5665 }
5666
5667 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5668 ignore it or not. Subroutine of lookup_name_real. */
5669
5670 static tree
5671 qualify_lookup (val, flags)
5672 tree val;
5673 int flags;
5674 {
5675 if (val == NULL_TREE)
5676 return val;
5677 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5678 return val;
5679 if ((flags & LOOKUP_PREFER_TYPES)
5680 && (TREE_CODE (val) == TYPE_DECL
5681 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5682 && DECL_CLASS_TEMPLATE_P (val))))
5683 return val;
5684 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5685 return NULL_TREE;
5686 return val;
5687 }
5688
5689 /* Any other BINDING overrides an implicit TYPENAME. Warn about
5690 that. */
5691
5692 static void
5693 warn_about_implicit_typename_lookup (typename, binding)
5694 tree typename;
5695 tree binding;
5696 {
5697 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5698 tree name = DECL_NAME (typename);
5699
5700 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5701 && CLASSTYPE_TEMPLATE_INFO (subtype)
5702 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5703 && ! (TREE_CODE (binding) == TYPE_DECL
5704 && same_type_p (TREE_TYPE (binding), subtype)))
5705 {
5706 cp_warning ("lookup of `%D' finds `%#D'",
5707 name, binding);
5708 cp_warning (" instead of `%D' from dependent base class",
5709 typename);
5710 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5711 constructor_name (current_class_type), name);
5712 }
5713 }
5714
5715 /* Look up NAME in the current binding level and its superiors in the
5716 namespace of variables, functions and typedefs. Return a ..._DECL
5717 node of some kind representing its definition if there is only one
5718 such declaration, or return a TREE_LIST with all the overloaded
5719 definitions if there are many, or return 0 if it is undefined.
5720
5721 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5722 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5723 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5724 Otherwise we prefer non-TYPE_DECLs.
5725
5726 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5727 using IDENTIFIER_CLASS_VALUE. */
5728
5729 static tree
5730 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5731 tree name;
5732 int prefer_type, nonclass, namespaces_only;
5733 {
5734 tree t;
5735 tree val = NULL_TREE;
5736 int yylex = 0;
5737 tree from_obj = NULL_TREE;
5738 int flags;
5739 int val_is_implicit_typename = 0;
5740
5741 /* Hack: copy flag set by parser, if set. */
5742 if (only_namespace_names)
5743 namespaces_only = 1;
5744
5745 if (prefer_type == -2)
5746 {
5747 extern int looking_for_typename;
5748 tree type = NULL_TREE;
5749
5750 yylex = 1;
5751 prefer_type = looking_for_typename;
5752
5753 flags = lookup_flags (prefer_type, namespaces_only);
5754 /* If the next thing is '<', class templates are types. */
5755 if (looking_for_template)
5756 flags |= LOOKUP_TEMPLATES_EXPECTED;
5757
5758 /* std:: becomes :: for now. */
5759 if (got_scope == std_node)
5760 got_scope = void_type_node;
5761
5762 if (got_scope)
5763 type = got_scope;
5764 else if (got_object != error_mark_node)
5765 type = got_object;
5766
5767 if (type)
5768 {
5769 if (type == error_mark_node)
5770 return error_mark_node;
5771 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5772 type = TREE_TYPE (type);
5773
5774 if (TYPE_P (type))
5775 type = complete_type (type);
5776
5777 if (TREE_CODE (type) == VOID_TYPE)
5778 type = global_namespace;
5779 if (TREE_CODE (type) == NAMESPACE_DECL)
5780 {
5781 struct tree_binding b;
5782 val = binding_init (&b);
5783 flags |= LOOKUP_COMPLAIN;
5784 if (!qualified_lookup_using_namespace (name, type, val, flags))
5785 return NULL_TREE;
5786 val = select_decl (val, flags);
5787 }
5788 else if (! IS_AGGR_TYPE (type)
5789 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5790 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5791 || TREE_CODE (type) == TYPENAME_TYPE)
5792 /* Someone else will give an error about this if needed. */
5793 val = NULL_TREE;
5794 else if (type == current_class_type)
5795 val = IDENTIFIER_CLASS_VALUE (name);
5796 else
5797 val = lookup_member (type, name, 0, prefer_type);
5798 }
5799 else
5800 val = NULL_TREE;
5801
5802 if (got_scope)
5803 goto done;
5804 else if (got_object && val)
5805 from_obj = val;
5806 }
5807 else
5808 {
5809 flags = lookup_flags (prefer_type, namespaces_only);
5810 /* If we're not parsing, we need to complain. */
5811 flags |= LOOKUP_COMPLAIN;
5812 }
5813
5814 /* First, look in non-namespace scopes. */
5815
5816 if (current_class_type == NULL_TREE)
5817 nonclass = 1;
5818
5819 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5820 {
5821 tree binding;
5822
5823 if (!LOCAL_BINDING_P (t) && nonclass)
5824 /* We're not looking for class-scoped bindings, so keep going. */
5825 continue;
5826
5827 /* If this is the kind of thing we're looking for, we're done. */
5828 if (qualify_lookup (BINDING_VALUE (t), flags))
5829 binding = BINDING_VALUE (t);
5830 else if ((flags & LOOKUP_PREFER_TYPES)
5831 && qualify_lookup (BINDING_TYPE (t), flags))
5832 binding = BINDING_TYPE (t);
5833 else
5834 binding = NULL_TREE;
5835
5836 if (binding
5837 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5838 {
5839 if (val_is_implicit_typename && !yylex)
5840 warn_about_implicit_typename_lookup (val, binding);
5841 val = binding;
5842 val_is_implicit_typename
5843 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5844 if (!val_is_implicit_typename)
5845 break;
5846 }
5847 }
5848
5849 /* Now lookup in namespace scopes. */
5850 if (!val || val_is_implicit_typename)
5851 {
5852 t = unqualified_namespace_lookup (name, flags, 0);
5853 if (t)
5854 {
5855 if (val_is_implicit_typename && !yylex)
5856 warn_about_implicit_typename_lookup (val, t);
5857 val = t;
5858 }
5859 }
5860
5861 done:
5862 if (val)
5863 {
5864 /* This should only warn about types used in qualified-ids. */
5865 if (from_obj && from_obj != val)
5866 {
5867 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5868 && TREE_CODE (val) == TYPE_DECL
5869 && TREE_TYPE (from_obj) != TREE_TYPE (val))
5870 {
5871 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5872 name, got_object, TREE_TYPE (from_obj));
5873 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
5874 TREE_TYPE (val));
5875 }
5876
5877 /* We don't change val to from_obj if got_object depends on
5878 template parms because that breaks implicit typename for
5879 destructor calls. */
5880 if (! uses_template_parms (got_object))
5881 val = from_obj;
5882 }
5883
5884 /* If we have a single function from a using decl, pull it out. */
5885 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5886 val = OVL_FUNCTION (val);
5887 }
5888 else if (from_obj)
5889 val = from_obj;
5890
5891 return val;
5892 }
5893
5894 tree
5895 lookup_name_nonclass (name)
5896 tree name;
5897 {
5898 return lookup_name_real (name, 0, 1, 0);
5899 }
5900
5901 tree
5902 lookup_function_nonclass (name, args)
5903 tree name;
5904 tree args;
5905 {
5906 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5907 }
5908
5909 tree
5910 lookup_name_namespace_only (name)
5911 tree name;
5912 {
5913 /* type-or-namespace, nonclass, namespace_only */
5914 return lookup_name_real (name, 1, 1, 1);
5915 }
5916
5917 tree
5918 lookup_name (name, prefer_type)
5919 tree name;
5920 int prefer_type;
5921 {
5922 return lookup_name_real (name, prefer_type, 0, 0);
5923 }
5924
5925 /* Similar to `lookup_name' but look only in the innermost non-class
5926 binding level. */
5927
5928 tree
5929 lookup_name_current_level (name)
5930 tree name;
5931 {
5932 struct binding_level *b;
5933 tree t = NULL_TREE;
5934
5935 b = current_binding_level;
5936 while (b->parm_flag == 2)
5937 b = b->level_chain;
5938
5939 if (b->namespace_p)
5940 {
5941 t = IDENTIFIER_NAMESPACE_VALUE (name);
5942
5943 /* extern "C" function() */
5944 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5945 t = TREE_VALUE (t);
5946 }
5947 else if (IDENTIFIER_BINDING (name)
5948 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5949 {
5950 while (1)
5951 {
5952 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5953 return IDENTIFIER_VALUE (name);
5954
5955 if (b->keep == 2)
5956 b = b->level_chain;
5957 else
5958 break;
5959 }
5960 }
5961
5962 return t;
5963 }
5964
5965 /* Like lookup_name_current_level, but for types. */
5966
5967 tree
5968 lookup_type_current_level (name)
5969 tree name;
5970 {
5971 register tree t = NULL_TREE;
5972
5973 my_friendly_assert (! current_binding_level->namespace_p, 980716);
5974
5975 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5976 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5977 {
5978 struct binding_level *b = current_binding_level;
5979 while (1)
5980 {
5981 if (purpose_member (name, b->type_shadowed))
5982 return REAL_IDENTIFIER_TYPE_VALUE (name);
5983 if (b->keep == 2)
5984 b = b->level_chain;
5985 else
5986 break;
5987 }
5988 }
5989
5990 return t;
5991 }
5992
5993 void
5994 begin_only_namespace_names ()
5995 {
5996 only_namespace_names = 1;
5997 }
5998
5999 void
6000 end_only_namespace_names ()
6001 {
6002 only_namespace_names = 0;
6003 }
6004 \f
6005 /* Arrange for the user to get a source line number, even when the
6006 compiler is going down in flames, so that she at least has a
6007 chance of working around problems in the compiler. We used to
6008 call error(), but that let the segmentation fault continue
6009 through; now, it's much more passive by asking them to send the
6010 maintainers mail about the problem. */
6011
6012 static void
6013 signal_catch (sig)
6014 int sig ATTRIBUTE_UNUSED;
6015 {
6016 signal (SIGSEGV, SIG_DFL);
6017 #ifdef SIGIOT
6018 signal (SIGIOT, SIG_DFL);
6019 #endif
6020 #ifdef SIGILL
6021 signal (SIGILL, SIG_DFL);
6022 #endif
6023 #ifdef SIGABRT
6024 signal (SIGABRT, SIG_DFL);
6025 #endif
6026 #ifdef SIGBUS
6027 signal (SIGBUS, SIG_DFL);
6028 #endif
6029 my_friendly_abort (0);
6030 }
6031
6032 #if 0
6033 /* Unused -- brendan 970107 */
6034 /* Array for holding types considered "built-in". These types
6035 are output in the module in which `main' is defined. */
6036 static tree *builtin_type_tdescs_arr;
6037 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
6038 #endif
6039
6040 /* Push the declarations of builtin types into the namespace.
6041 RID_INDEX, if < RID_MAX is the index of the builtin type
6042 in the array RID_POINTERS. NAME is the name used when looking
6043 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6044
6045 static void
6046 record_builtin_type (rid_index, name, type)
6047 enum rid rid_index;
6048 const char *name;
6049 tree type;
6050 {
6051 tree rname = NULL_TREE, tname = NULL_TREE;
6052 tree tdecl = NULL_TREE;
6053
6054 if ((int) rid_index < (int) RID_MAX)
6055 rname = ridpointers[(int) rid_index];
6056 if (name)
6057 tname = get_identifier (name);
6058
6059 TYPE_BUILT_IN (type) = 1;
6060
6061 if (tname)
6062 {
6063 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
6064 set_identifier_type_value (tname, NULL_TREE);
6065 if ((int) rid_index < (int) RID_MAX)
6066 /* Built-in types live in the global namespace. */
6067 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
6068 }
6069 if (rname != NULL_TREE)
6070 {
6071 if (tname != NULL_TREE)
6072 {
6073 set_identifier_type_value (rname, NULL_TREE);
6074 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
6075 }
6076 else
6077 {
6078 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
6079 set_identifier_type_value (rname, NULL_TREE);
6080 }
6081 }
6082 }
6083
6084 /* Record one of the standard Java types.
6085 * Declare it as having the given NAME.
6086 * If SIZE > 0, it is the size of one of the integral types;
6087 * otherwise it is the negative of the size of one of the other types. */
6088
6089 static tree
6090 record_builtin_java_type (name, size)
6091 const char *name;
6092 int size;
6093 {
6094 tree type, decl;
6095 if (size > 0)
6096 type = make_signed_type (size);
6097 else if (size > -32)
6098 { /* "__java_char" or ""__java_boolean". */
6099 type = make_unsigned_type (-size);
6100 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6101 }
6102 else
6103 { /* "__java_float" or ""__java_double". */
6104 type = make_node (REAL_TYPE);
6105 TYPE_PRECISION (type) = - size;
6106 layout_type (type);
6107 }
6108 record_builtin_type (RID_MAX, name, type);
6109 decl = TYPE_NAME (type);
6110
6111 /* Suppress generate debug symbol entries for these types,
6112 since for normal C++ they are just clutter.
6113 However, push_lang_context undoes this if extern "Java" is seen. */
6114 DECL_IGNORED_P (decl) = 1;
6115
6116 TYPE_FOR_JAVA (type) = 1;
6117 return type;
6118 }
6119
6120 /* Push a type into the namespace so that the back-ends ignore it. */
6121
6122 static void
6123 record_unknown_type (type, name)
6124 tree type;
6125 const char *name;
6126 {
6127 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6128 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6129 DECL_IGNORED_P (decl) = 1;
6130 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6131 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6132 TYPE_ALIGN (type) = 1;
6133 TYPE_MODE (type) = TYPE_MODE (void_type_node);
6134 }
6135
6136 /* Push overloaded decl, in global scope, with one argument so it
6137 can be used as a callback from define_function. */
6138
6139 static void
6140 push_overloaded_decl_1 (x)
6141 tree x;
6142 {
6143 push_overloaded_decl (x, PUSH_GLOBAL);
6144 }
6145
6146 #ifdef __GNUC__
6147 __inline
6148 #endif
6149 tree
6150 auto_function (name, type, code)
6151 tree name, type;
6152 enum built_in_function code;
6153 {
6154 return define_function
6155 (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
6156 IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
6157 0)));
6158 }
6159
6160 /* Create the predefined scalar types of C,
6161 and some nodes representing standard constants (0, 1, (void *)0).
6162 Initialize the global binding level.
6163 Make definitions for built-in primitive functions. */
6164
6165 void
6166 init_decl_processing ()
6167 {
6168 tree fields[20];
6169 int wchar_type_size;
6170 tree array_domain_type;
6171
6172 /* Have to make these distinct before we try using them. */
6173 lang_name_cplusplus = get_identifier ("C++");
6174 lang_name_c = get_identifier ("C");
6175 lang_name_java = get_identifier ("Java");
6176
6177 /* Let the back-end now how to save and restore language-specific
6178 per-function globals. */
6179 save_lang_status = &push_cp_function_context;
6180 restore_lang_status = &pop_cp_function_context;
6181
6182 /* Create the global per-function variables. */
6183 push_function_context_to (NULL_TREE);
6184
6185 /* Enter the global namespace. */
6186 my_friendly_assert (global_namespace == NULL_TREE, 375);
6187 my_friendly_assert (current_lang_name == NULL_TREE, 375);
6188 current_lang_name = lang_name_cplusplus;
6189 push_namespace (get_identifier ("::"));
6190 global_namespace = current_namespace;
6191 current_lang_name = NULL_TREE;
6192
6193 if (flag_strict_prototype == 2)
6194 flag_strict_prototype = pedantic;
6195 if (! flag_permissive && ! pedantic)
6196 flag_pedantic_errors = 1;
6197
6198 strict_prototypes_lang_c = flag_strict_prototype;
6199
6200 /* Initially, C. */
6201 current_lang_name = lang_name_c;
6202
6203 current_function_decl = NULL_TREE;
6204 named_labels = NULL_TREE;
6205 named_label_uses = NULL;
6206 current_binding_level = NULL_BINDING_LEVEL;
6207 free_binding_level = NULL_BINDING_LEVEL;
6208
6209 /* Because most segmentation signals can be traced back into user
6210 code, catch them and at least give the user a chance of working
6211 around compiler bugs. */
6212 signal (SIGSEGV, signal_catch);
6213
6214 /* We will also catch aborts in the back-end through signal_catch and
6215 give the user a chance to see where the error might be, and to defeat
6216 aborts in the back-end when there have been errors previously in their
6217 code. */
6218 #ifdef SIGIOT
6219 signal (SIGIOT, signal_catch);
6220 #endif
6221 #ifdef SIGILL
6222 signal (SIGILL, signal_catch);
6223 #endif
6224 #ifdef SIGABRT
6225 signal (SIGABRT, signal_catch);
6226 #endif
6227 #ifdef SIGBUS
6228 signal (SIGBUS, signal_catch);
6229 #endif
6230
6231 gcc_obstack_init (&decl_obstack);
6232
6233 /* Must lay these out before anything else gets laid out. */
6234 error_mark_node = make_node (ERROR_MARK);
6235 TREE_PERMANENT (error_mark_node) = 1;
6236 TREE_TYPE (error_mark_node) = error_mark_node;
6237 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6238 TREE_TYPE (error_mark_list) = error_mark_node;
6239
6240 /* Make the binding_level structure for global names. */
6241 pushlevel (0);
6242 global_binding_level = current_binding_level;
6243 /* The global level is the namespace level of ::. */
6244 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6245 declare_namespace_level ();
6246
6247 this_identifier = get_identifier (THIS_NAME);
6248 in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6249 ctor_identifier = get_identifier (CTOR_NAME);
6250 dtor_identifier = get_identifier (DTOR_NAME);
6251 pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6252 index_identifier = get_identifier (VTABLE_INDEX_NAME);
6253 delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6254 delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6255 pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6256
6257 /* Define `int' and `char' first so that dbx will output them first. */
6258
6259 integer_type_node = make_signed_type (INT_TYPE_SIZE);
6260 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6261
6262 /* Define `char', which is like either `signed char' or `unsigned char'
6263 but not the same as either. */
6264
6265 char_type_node
6266 = (flag_signed_char
6267 ? make_signed_type (CHAR_TYPE_SIZE)
6268 : make_unsigned_type (CHAR_TYPE_SIZE));
6269 record_builtin_type (RID_CHAR, "char", char_type_node);
6270
6271 /* `signed' is the same as `int' */
6272 record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6273
6274 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6275 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6276
6277 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6278 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6279
6280 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6281 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6282 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6283
6284 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6285 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6286
6287 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6288 record_builtin_type (RID_MAX, "long long unsigned int",
6289 long_long_unsigned_type_node);
6290 record_builtin_type (RID_MAX, "long long unsigned",
6291 long_long_unsigned_type_node);
6292
6293 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6294 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6295 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6296 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6297 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6298
6299 /* `unsigned long' is the standard type for sizeof.
6300 Note that stddef.h uses `unsigned long',
6301 and this must agree, even if long and int are the same size. */
6302 set_sizetype
6303 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6304
6305 ptrdiff_type_node
6306 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6307
6308 /* Define both `signed char' and `unsigned char'. */
6309 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6310 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6311 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6312 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6313
6314 /* Create the widest literal types. */
6315 widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6316 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6317 widest_integer_literal_type_node));
6318
6319 widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6320 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6321 widest_unsigned_literal_type_node));
6322
6323 /* These are types that type_for_size and type_for_mode use. */
6324 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6325 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6326 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6327 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6328 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6329 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6330 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6331 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6332 #if HOST_BITS_PER_WIDE_INT >= 64
6333 intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6334 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6335 #endif
6336 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6337 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6338 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6339 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6340 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6341 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6342 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6343 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6344 #if HOST_BITS_PER_WIDE_INT >= 64
6345 unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6346 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6347 #endif
6348
6349 float_type_node = make_node (REAL_TYPE);
6350 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6351 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6352 layout_type (float_type_node);
6353
6354 double_type_node = make_node (REAL_TYPE);
6355 if (flag_short_double)
6356 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6357 else
6358 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6359 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6360 layout_type (double_type_node);
6361
6362 long_double_type_node = make_node (REAL_TYPE);
6363 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6364 record_builtin_type (RID_MAX, "long double", long_double_type_node);
6365 layout_type (long_double_type_node);
6366
6367 complex_integer_type_node = make_node (COMPLEX_TYPE);
6368 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6369 complex_integer_type_node));
6370 TREE_TYPE (complex_integer_type_node) = integer_type_node;
6371 layout_type (complex_integer_type_node);
6372
6373 complex_float_type_node = make_node (COMPLEX_TYPE);
6374 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6375 complex_float_type_node));
6376 TREE_TYPE (complex_float_type_node) = float_type_node;
6377 layout_type (complex_float_type_node);
6378
6379 complex_double_type_node = make_node (COMPLEX_TYPE);
6380 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6381 complex_double_type_node));
6382 TREE_TYPE (complex_double_type_node) = double_type_node;
6383 layout_type (complex_double_type_node);
6384
6385 complex_long_double_type_node = make_node (COMPLEX_TYPE);
6386 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6387 complex_long_double_type_node));
6388 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6389 layout_type (complex_long_double_type_node);
6390
6391 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6392 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6393 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6394 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6395 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6396 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6397 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6398 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6399
6400 integer_zero_node = build_int_2 (0, 0);
6401 TREE_TYPE (integer_zero_node) = integer_type_node;
6402 integer_one_node = build_int_2 (1, 0);
6403 TREE_TYPE (integer_one_node) = integer_type_node;
6404 integer_two_node = build_int_2 (2, 0);
6405 TREE_TYPE (integer_two_node) = integer_type_node;
6406 integer_three_node = build_int_2 (3, 0);
6407 TREE_TYPE (integer_three_node) = integer_type_node;
6408
6409 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6410 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6411 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6412 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6413 TYPE_PRECISION (boolean_type_node) = 1;
6414 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6415 boolean_false_node = build_int_2 (0, 0);
6416 TREE_TYPE (boolean_false_node) = boolean_type_node;
6417 boolean_true_node = build_int_2 (1, 0);
6418 TREE_TYPE (boolean_true_node) = boolean_type_node;
6419
6420 /* These are needed by stor-layout.c. */
6421 size_zero_node = size_int (0);
6422 size_one_node = size_int (1);
6423
6424 signed_size_zero_node = build_int_2 (0, 0);
6425 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6426
6427 void_type_node = make_node (VOID_TYPE);
6428 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6429 layout_type (void_type_node); /* Uses integer_zero_node. */
6430 void_list_node = build_tree_list (NULL_TREE, void_type_node);
6431 TREE_PARMLIST (void_list_node) = 1;
6432
6433 null_pointer_node = build_int_2 (0, 0);
6434 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6435 layout_type (TREE_TYPE (null_pointer_node));
6436
6437 /* Used for expressions that do nothing, but are not errors. */
6438 void_zero_node = build_int_2 (0, 0);
6439 TREE_TYPE (void_zero_node) = void_type_node;
6440
6441 string_type_node = build_pointer_type (char_type_node);
6442 const_string_type_node
6443 = build_pointer_type (build_qualified_type (char_type_node,
6444 TYPE_QUAL_CONST));
6445 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6446 #if 0
6447 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6448 #endif
6449
6450 /* Make a type to be the domain of a few array types
6451 whose domains don't really matter.
6452 200 is small enough that it always fits in size_t
6453 and large enough that it can hold most function names for the
6454 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
6455 array_domain_type = build_index_type (build_int_2 (200, 0));
6456
6457 /* Make a type for arrays of characters.
6458 With luck nothing will ever really depend on the length of this
6459 array type. */
6460 char_array_type_node
6461 = build_array_type (char_type_node, array_domain_type);
6462 /* Likewise for arrays of ints. */
6463 int_array_type_node
6464 = build_array_type (integer_type_node, array_domain_type);
6465
6466 /* This is just some anonymous class type. Nobody should ever
6467 need to look inside this envelope. */
6468 class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6469
6470 if (flag_huge_objects)
6471 delta_type_node = long_integer_type_node;
6472 else
6473 delta_type_node = short_integer_type_node;
6474
6475 default_function_type
6476 = build_function_type (integer_type_node, NULL_TREE);
6477
6478 ptr_type_node = build_pointer_type (void_type_node);
6479 const_ptr_type_node
6480 = build_pointer_type (build_qualified_type (void_type_node,
6481 TYPE_QUAL_CONST));
6482 c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6483
6484 void_ftype_ptr
6485 = build_exception_variant (void_ftype_ptr, empty_except_spec);
6486
6487 /* C++ extensions */
6488
6489 unknown_type_node = make_node (UNKNOWN_TYPE);
6490 record_unknown_type (unknown_type_node, "unknown type");
6491
6492 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6493 TREE_TYPE (unknown_type_node) = unknown_type_node;
6494
6495 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6496
6497 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6498 result. */
6499 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6500 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6501
6502 /* This is special for C++ so functions can be overloaded. */
6503 wchar_type_node
6504 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6505 wchar_type_size = TYPE_PRECISION (wchar_type_node);
6506 signed_wchar_type_node = make_signed_type (wchar_type_size);
6507 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6508 wchar_type_node
6509 = TREE_UNSIGNED (wchar_type_node)
6510 ? unsigned_wchar_type_node
6511 : signed_wchar_type_node;
6512 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6513
6514 /* Artificial declaration of wchar_t -- can be bashed */
6515 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6516 wchar_type_node);
6517 pushdecl (wchar_decl_node);
6518
6519 /* This is for wide string constants. */
6520 wchar_array_type_node
6521 = build_array_type (wchar_type_node, array_domain_type);
6522
6523 if (flag_vtable_thunks)
6524 {
6525 /* Make sure we get a unique function type, so we can give
6526 its pointer type a name. (This wins for gdb.) */
6527 tree vfunc_type = make_node (FUNCTION_TYPE);
6528 TREE_TYPE (vfunc_type) = integer_type_node;
6529 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6530 layout_type (vfunc_type);
6531
6532 vtable_entry_type = build_pointer_type (vfunc_type);
6533 }
6534 else
6535 {
6536 vtable_entry_type = make_lang_type (RECORD_TYPE);
6537 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6538 delta_type_node);
6539 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6540 delta_type_node);
6541 fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6542 ptr_type_node);
6543 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6544 double_type_node);
6545
6546 /* Make this part of an invisible union. */
6547 fields[3] = copy_node (fields[2]);
6548 TREE_TYPE (fields[3]) = delta_type_node;
6549 DECL_NAME (fields[3]) = delta2_identifier;
6550 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6551 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6552 TREE_UNSIGNED (fields[3]) = 0;
6553 TREE_CHAIN (fields[2]) = fields[3];
6554 vtable_entry_type = build_qualified_type (vtable_entry_type,
6555 TYPE_QUAL_CONST);
6556 }
6557 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6558
6559 vtbl_type_node
6560 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6561 layout_type (vtbl_type_node);
6562 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6563 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6564 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6565 layout_type (vtbl_ptr_type_node);
6566 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6567
6568 std_node = build_decl (NAMESPACE_DECL,
6569 get_identifier (flag_honor_std ? "fake std":"std"),
6570 void_type_node);
6571 pushdecl (std_node);
6572
6573 global_type_node = make_node (LANG_TYPE);
6574 record_unknown_type (global_type_node, "global type");
6575
6576 /* Now, C++. */
6577 current_lang_name = lang_name_cplusplus;
6578
6579 {
6580 tree bad_alloc_type_node, newtype, deltype;
6581 if (flag_honor_std)
6582 push_namespace (get_identifier ("std"));
6583 bad_alloc_type_node = xref_tag
6584 (class_type_node, get_identifier ("bad_alloc"), 1);
6585 if (flag_honor_std)
6586 pop_namespace ();
6587 newtype = build_exception_variant
6588 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6589 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6590 auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6591 auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6592 global_delete_fndecl
6593 = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6594 auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6595 }
6596
6597 abort_fndecl
6598 = define_function ("__pure_virtual", void_ftype,
6599 NOT_BUILT_IN, 0, 0);
6600
6601 /* Perform other language dependent initializations. */
6602 init_class_processing ();
6603 init_init_processing ();
6604 init_search_processing ();
6605 if (flag_rtti)
6606 init_rtti_processing ();
6607
6608 if (flag_exceptions)
6609 init_exception_processing ();
6610 if (flag_no_inline)
6611 {
6612 flag_inline_functions = 0;
6613 }
6614
6615 if (! supports_one_only ())
6616 flag_weak = 0;
6617
6618 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
6619 declare_function_name ();
6620
6621 /* Prepare to check format strings against argument lists. */
6622 init_function_format_info ();
6623
6624 /* Show we use EH for cleanups. */
6625 using_eh_for_cleanups ();
6626
6627 print_error_function = lang_print_error_function;
6628 lang_get_alias_set = &c_get_alias_set;
6629 valid_lang_attribute = cp_valid_lang_attribute;
6630
6631 /* Maintain consistency. Perhaps we should just complain if they
6632 say -fwritable-strings? */
6633 if (flag_writable_strings)
6634 flag_const_strings = 0;
6635 }
6636
6637 /* Function to print any language-specific context for an error message. */
6638
6639 static void
6640 lang_print_error_function (file)
6641 const char *file;
6642 {
6643 default_print_error_function (file);
6644 maybe_print_template_context ();
6645 }
6646
6647 /* Make a definition for a builtin function named NAME and whose data type
6648 is TYPE. TYPE should be a function type with argument types.
6649 FUNCTION_CODE tells later passes how to compile calls to this function.
6650 See tree.h for its possible values.
6651
6652 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6653 the name to be called if we can't opencode the function. */
6654
6655 tree
6656 define_function (name, type, function_code, pfn, library_name)
6657 const char *name;
6658 tree type;
6659 enum built_in_function function_code;
6660 void (*pfn) PROTO((tree));
6661 const char *library_name;
6662 {
6663 tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6664 DECL_EXTERNAL (decl) = 1;
6665 TREE_PUBLIC (decl) = 1;
6666 DECL_ARTIFICIAL (decl) = 1;
6667
6668 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6669 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6670
6671 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6672 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6673 function in the namespace. */
6674 if (pfn) (*pfn) (decl);
6675 if (library_name)
6676 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6677 make_function_rtl (decl);
6678 if (function_code != NOT_BUILT_IN)
6679 {
6680 DECL_BUILT_IN (decl) = 1;
6681 DECL_FUNCTION_CODE (decl) = function_code;
6682 }
6683 return decl;
6684 }
6685
6686 tree
6687 builtin_function (name, type, code, libname)
6688 const char *name;
6689 tree type;
6690 enum built_in_function code;
6691 const char *libname;
6692 {
6693 return define_function (name, type, code, (void (*) PROTO((tree)))pushdecl, libname);
6694 }
6695 \f
6696 /* When we call finish_struct for an anonymous union, we create
6697 default copy constructors and such. But, an anonymous union
6698 shouldn't have such things; this function undoes the damage to the
6699 anonymous union type T.
6700
6701 (The reason that we create the synthesized methods is that we don't
6702 distinguish `union { int i; }' from `typedef union { int i; } U'.
6703 The first is an anonymous union; the second is just an ordinary
6704 union type.) */
6705
6706 void
6707 fixup_anonymous_aggr (t)
6708 tree t;
6709 {
6710 tree *q;
6711
6712 /* Wipe out memory of synthesized methods */
6713 TYPE_HAS_CONSTRUCTOR (t) = 0;
6714 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6715 TYPE_HAS_INIT_REF (t) = 0;
6716 TYPE_HAS_CONST_INIT_REF (t) = 0;
6717 TYPE_HAS_ASSIGN_REF (t) = 0;
6718 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6719
6720 /* Splice the implicitly generated functions out of the TYPE_METHODS
6721 list. */
6722 q = &TYPE_METHODS (t);
6723 while (*q)
6724 {
6725 if (DECL_ARTIFICIAL (*q))
6726 *q = TREE_CHAIN (*q);
6727 else
6728 q = &TREE_CHAIN (*q);
6729 }
6730
6731 /* ANSI C++ June 5 1992 WP 9.5.3. Anonymous unions may not have
6732 function members. */
6733 if (TYPE_METHODS (t))
6734 error ("an anonymous union cannot have function members");
6735 }
6736
6737 /* Make sure that a declaration with no declarator is well-formed, i.e.
6738 just defines a tagged type or anonymous union.
6739
6740 Returns the type defined, if any. */
6741
6742 tree
6743 check_tag_decl (declspecs)
6744 tree declspecs;
6745 {
6746 int found_type = 0;
6747 tree ob_modifier = NULL_TREE;
6748 register tree link;
6749 register tree t = NULL_TREE;
6750
6751 for (link = declspecs; link; link = TREE_CHAIN (link))
6752 {
6753 register tree value = TREE_VALUE (link);
6754
6755 if (TYPE_P (value))
6756 {
6757 ++found_type;
6758
6759 if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6760 {
6761 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6762 t = value;
6763 }
6764 }
6765 else if (value == ridpointers[(int) RID_FRIEND])
6766 {
6767 if (current_class_type == NULL_TREE
6768 || current_scope () != current_class_type)
6769 ob_modifier = value;
6770 }
6771 else if (value == ridpointers[(int) RID_STATIC]
6772 || value == ridpointers[(int) RID_EXTERN]
6773 || value == ridpointers[(int) RID_AUTO]
6774 || value == ridpointers[(int) RID_REGISTER]
6775 || value == ridpointers[(int) RID_INLINE]
6776 || value == ridpointers[(int) RID_VIRTUAL]
6777 || value == ridpointers[(int) RID_CONST]
6778 || value == ridpointers[(int) RID_VOLATILE]
6779 || value == ridpointers[(int) RID_EXPLICIT])
6780 ob_modifier = value;
6781 }
6782
6783 if (found_type > 1)
6784 error ("multiple types in one declaration");
6785
6786 /* Inside a class, we might be in a friend or access declaration.
6787 Until we have a good way of detecting the latter, don't warn. */
6788 if (t == NULL_TREE && ! current_class_type)
6789 pedwarn ("declaration does not declare anything");
6790
6791 /* Check for an anonymous union. We're careful
6792 accessing TYPE_IDENTIFIER because some built-in types, like
6793 pointer-to-member types, do not have TYPE_NAME. */
6794 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6795 && TYPE_NAME (t)
6796 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6797 {
6798 /* Anonymous unions are objects, so they can have specifiers. */;
6799 SET_ANON_AGGR_TYPE_P (t);
6800
6801 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6802 pedwarn ("ISO C++ prohibits anonymous structs");
6803 }
6804
6805 else if (ob_modifier)
6806 {
6807 if (ob_modifier == ridpointers[(int) RID_INLINE]
6808 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6809 cp_error ("`%D' can only be specified for functions", ob_modifier);
6810 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6811 cp_error ("`%D' can only be specified inside a class", ob_modifier);
6812 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6813 cp_error ("`%D' can only be specified for constructors",
6814 ob_modifier);
6815 else
6816 cp_error ("`%D' can only be specified for objects and functions",
6817 ob_modifier);
6818 }
6819
6820 return t;
6821 }
6822
6823 /* Called when a declaration is seen that contains no names to declare.
6824 If its type is a reference to a structure, union or enum inherited
6825 from a containing scope, shadow that tag name for the current scope
6826 with a forward reference.
6827 If its type defines a new named structure or union
6828 or defines an enum, it is valid but we need not do anything here.
6829 Otherwise, it is an error.
6830
6831 C++: may have to grok the declspecs to learn about static,
6832 complain for anonymous unions. */
6833
6834 void
6835 shadow_tag (declspecs)
6836 tree declspecs;
6837 {
6838 tree t = check_tag_decl (declspecs);
6839
6840 if (t)
6841 maybe_process_partial_specialization (t);
6842
6843 /* This is where the variables in an anonymous union are
6844 declared. An anonymous union declaration looks like:
6845 union { ... } ;
6846 because there is no declarator after the union, the parser
6847 sends that declaration here. */
6848 if (t && ANON_AGGR_TYPE_P (t))
6849 {
6850 fixup_anonymous_aggr (t);
6851
6852 if (TYPE_FIELDS (t))
6853 {
6854 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6855 NULL_TREE);
6856 finish_anon_union (decl);
6857 }
6858 }
6859 }
6860 \f
6861 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
6862
6863 tree
6864 groktypename (typename)
6865 tree typename;
6866 {
6867 if (TREE_CODE (typename) != TREE_LIST)
6868 return typename;
6869 return grokdeclarator (TREE_VALUE (typename),
6870 TREE_PURPOSE (typename),
6871 TYPENAME, 0, NULL_TREE);
6872 }
6873
6874 /* Decode a declarator in an ordinary declaration or data definition.
6875 This is called as soon as the type information and variable name
6876 have been parsed, before parsing the initializer if any.
6877 Here we create the ..._DECL node, fill in its type,
6878 and put it on the list of decls for the current context.
6879 The ..._DECL node is returned as the value.
6880
6881 Exception: for arrays where the length is not specified,
6882 the type is left null, to be filled in by `cp_finish_decl'.
6883
6884 Function definitions do not come here; they go to start_function
6885 instead. However, external and forward declarations of functions
6886 do go through here. Structure field declarations are done by
6887 grokfield and not through here. */
6888
6889 /* Set this to zero to debug not using the temporary obstack
6890 to parse initializers. */
6891 int debug_temp_inits = 1;
6892
6893 tree
6894 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6895 tree declarator, declspecs;
6896 int initialized;
6897 tree attributes, prefix_attributes;
6898 {
6899 register tree decl;
6900 register tree type, tem;
6901 tree context;
6902 extern int have_extern_spec;
6903 extern int used_extern_spec;
6904 tree attrlist;
6905
6906 #if 0
6907 /* See code below that used this. */
6908 int init_written = initialized;
6909 #endif
6910
6911 /* This should only be done once on the top most decl. */
6912 if (have_extern_spec && !used_extern_spec)
6913 {
6914 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6915 declspecs);
6916 used_extern_spec = 1;
6917 }
6918
6919 if (attributes || prefix_attributes)
6920 attrlist = build_scratch_list (attributes, prefix_attributes);
6921 else
6922 attrlist = NULL_TREE;
6923
6924 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6925 attrlist);
6926
6927 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6928 return NULL_TREE;
6929
6930 type = TREE_TYPE (decl);
6931
6932 if (type == error_mark_node)
6933 return NULL_TREE;
6934
6935 /* Don't lose if destructors must be executed at file-level. */
6936 if (! processing_template_decl && TREE_STATIC (decl)
6937 && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6938 && !TREE_PERMANENT (decl))
6939 {
6940 push_obstacks (&permanent_obstack, &permanent_obstack);
6941 decl = copy_node (decl);
6942 if (TREE_CODE (type) == ARRAY_TYPE)
6943 {
6944 tree itype = TYPE_DOMAIN (type);
6945 if (itype && ! TREE_PERMANENT (itype))
6946 {
6947 itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6948 type = build_cplus_array_type (TREE_TYPE (type), itype);
6949 TREE_TYPE (decl) = type;
6950 }
6951 }
6952 pop_obstacks ();
6953 }
6954
6955 context
6956 = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6957 ? DECL_CLASS_CONTEXT (decl)
6958 : DECL_CONTEXT (decl);
6959
6960 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6961 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6962 {
6963 /* When parsing the initializer, lookup should use the object's
6964 namespace. */
6965 push_decl_namespace (context);
6966 }
6967
6968 /* We are only interested in class contexts, later. */
6969 if (context && TREE_CODE (context) == NAMESPACE_DECL)
6970 context = NULL_TREE;
6971
6972 if (initialized)
6973 /* Is it valid for this decl to have an initializer at all?
6974 If not, set INITIALIZED to zero, which will indirectly
6975 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6976 switch (TREE_CODE (decl))
6977 {
6978 case TYPE_DECL:
6979 /* typedef foo = bar means give foo the same type as bar.
6980 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6981 Any other case of an initialization in a TYPE_DECL is an error. */
6982 if (pedantic || list_length (declspecs) > 1)
6983 {
6984 cp_error ("typedef `%D' is initialized", decl);
6985 initialized = 0;
6986 }
6987 break;
6988
6989 case FUNCTION_DECL:
6990 cp_error ("function `%#D' is initialized like a variable", decl);
6991 initialized = 0;
6992 break;
6993
6994 default:
6995 break;
6996 }
6997
6998 if (initialized)
6999 {
7000 if (! toplevel_bindings_p ()
7001 && DECL_EXTERNAL (decl))
7002 cp_warning ("declaration of `%#D' has `extern' and is initialized",
7003 decl);
7004 DECL_EXTERNAL (decl) = 0;
7005 if (toplevel_bindings_p ())
7006 TREE_STATIC (decl) = 1;
7007
7008 /* Tell `pushdecl' this is an initialized decl
7009 even though we don't yet have the initializer expression.
7010 Also tell `cp_finish_decl' it may store the real initializer. */
7011 DECL_INITIAL (decl) = error_mark_node;
7012 }
7013
7014 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7015 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7016 #endif
7017
7018 /* Set attributes here so if duplicate decl, will have proper attributes. */
7019 cplus_decl_attributes (decl, attributes, prefix_attributes);
7020
7021 if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
7022 {
7023 push_nested_class (context, 2);
7024
7025 if (TREE_CODE (decl) == VAR_DECL)
7026 {
7027 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7028 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7029 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7030 else
7031 {
7032 if (DECL_CONTEXT (field) != context)
7033 {
7034 cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
7035 DECL_CONTEXT (field), DECL_NAME (decl),
7036 context, DECL_NAME (decl));
7037 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7038 }
7039 /* Static data member are tricky; an in-class initialization
7040 still doesn't provide a definition, so the in-class
7041 declaration will have DECL_EXTERNAL set, but will have an
7042 initialization. Thus, duplicate_decls won't warn
7043 about this situation, and so we check here. */
7044 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7045 cp_error ("duplicate initialization of %D", decl);
7046 if (duplicate_decls (decl, field))
7047 decl = field;
7048 }
7049 }
7050 else
7051 {
7052 tree field = check_classfn (context, decl);
7053 if (field && duplicate_decls (decl, field))
7054 decl = field;
7055 }
7056
7057 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
7058 DECL_IN_AGGR_P (decl) = 0;
7059 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
7060 || CLASSTYPE_USE_TEMPLATE (context))
7061 {
7062 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7063 /* [temp.expl.spec] An explicit specialization of a static data
7064 member of a template is a definition if the declaration
7065 includes an initializer; otherwise, it is a declaration.
7066
7067 We check for processing_specialization so this only applies
7068 to the new specialization syntax. */
7069 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7070 DECL_EXTERNAL (decl) = 1;
7071 }
7072
7073 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7074 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7075 decl);
7076 }
7077
7078 /* Enter this declaration into the symbol table. */
7079 tem = maybe_push_decl (decl);
7080
7081 if (processing_template_decl)
7082 {
7083 if (at_function_scope_p ())
7084 push_permanent_obstack ();
7085
7086 tem = push_template_decl (tem);
7087 /* In a a local scope, add a representation of this declaration
7088 to the statement tree. */
7089 if (at_function_scope_p ())
7090 {
7091 add_decl_stmt (decl);
7092 pop_obstacks ();
7093 }
7094 }
7095
7096
7097 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7098 /* Tell the back-end to use or not use .common as appropriate. If we say
7099 -fconserve-space, we want this to save .data space, at the expense of
7100 wrong semantics. If we say -fno-conserve-space, we want this to
7101 produce errors about redefs; to do this we force variables into the
7102 data segment. */
7103 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7104 #endif
7105
7106 if (! processing_template_decl)
7107 start_decl_1 (tem);
7108
7109 /* Corresponding pop_obstacks is done in `cp_finish_decl'. */
7110 push_obstacks_nochange ();
7111
7112 return tem;
7113 }
7114
7115 void
7116 start_decl_1 (decl)
7117 tree decl;
7118 {
7119 tree type = TREE_TYPE (decl);
7120 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7121
7122 if (type == error_mark_node)
7123 return;
7124
7125 /* If this type of object needs a cleanup, and control may
7126 jump past it, make a new binding level so that it is cleaned
7127 up only when it is initialized first. */
7128 if (TYPE_NEEDS_DESTRUCTOR (type)
7129 && current_binding_level->more_cleanups_ok == 0)
7130 pushlevel_temporary (1);
7131
7132 if (initialized)
7133 /* Is it valid for this decl to have an initializer at all?
7134 If not, set INITIALIZED to zero, which will indirectly
7135 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
7136 {
7137 /* Don't allow initializations for incomplete types except for
7138 arrays which might be completed by the initialization. */
7139 if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7140 ; /* A complete type is ok. */
7141 else if (TREE_CODE (type) != ARRAY_TYPE)
7142 {
7143 cp_error ("variable `%#D' has initializer but incomplete type",
7144 decl);
7145 initialized = 0;
7146 type = TREE_TYPE (decl) = error_mark_node;
7147 }
7148 else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7149 {
7150 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7151 cp_error ("elements of array `%#D' have incomplete type", decl);
7152 /* else we already gave an error in start_decl. */
7153 initialized = 0;
7154 }
7155 }
7156
7157 if (!initialized
7158 && TREE_CODE (decl) != TYPE_DECL
7159 && TREE_CODE (decl) != TEMPLATE_DECL
7160 && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7161 {
7162 if ((! processing_template_decl || ! uses_template_parms (type))
7163 && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7164 {
7165 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7166 decl);
7167 /* Change the type so that assemble_variable will give
7168 DECL an rtl we can live with: (mem (const_int 0)). */
7169 type = TREE_TYPE (decl) = error_mark_node;
7170 }
7171 else
7172 {
7173 /* If any base type in the hierarchy of TYPE needs a constructor,
7174 then we set initialized to 1. This way any nodes which are
7175 created for the purposes of initializing this aggregate
7176 will live as long as it does. This is necessary for global
7177 aggregates which do not have their initializers processed until
7178 the end of the file. */
7179 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7180 }
7181 }
7182
7183 if (! initialized)
7184 DECL_INITIAL (decl) = NULL_TREE;
7185 }
7186
7187 /* Handle initialization of references.
7188 These three arguments are from `cp_finish_decl', and have the
7189 same meaning here that they do there.
7190
7191 Quotes on semantics can be found in ARM 8.4.3. */
7192
7193 static void
7194 grok_reference_init (decl, type, init)
7195 tree decl, type, init;
7196 {
7197 tree tmp;
7198
7199 if (init == NULL_TREE)
7200 {
7201 if ((DECL_LANG_SPECIFIC (decl) == 0
7202 || DECL_IN_AGGR_P (decl) == 0)
7203 && ! DECL_THIS_EXTERN (decl))
7204 {
7205 cp_error ("`%D' declared as reference but not initialized", decl);
7206 if (TREE_CODE (decl) == VAR_DECL)
7207 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7208 }
7209 return;
7210 }
7211
7212 if (init == error_mark_node)
7213 return;
7214
7215 if (TREE_CODE (type) == REFERENCE_TYPE
7216 && TREE_CODE (init) == CONSTRUCTOR)
7217 {
7218 cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7219 return;
7220 }
7221
7222 if (TREE_CODE (init) == TREE_LIST)
7223 init = build_compound_expr (init);
7224
7225 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7226 init = convert_from_reference (init);
7227
7228 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7229 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7230 {
7231 /* Note: default conversion is only called in very special cases. */
7232 init = default_conversion (init);
7233 }
7234
7235 tmp = convert_to_reference
7236 (type, init, CONV_IMPLICIT,
7237 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7238
7239 if (tmp == error_mark_node)
7240 goto fail;
7241 else if (tmp != NULL_TREE)
7242 {
7243 init = tmp;
7244 DECL_INITIAL (decl) = save_expr (init);
7245 }
7246 else
7247 {
7248 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7249 goto fail;
7250 }
7251
7252 /* ?? Can this be optimized in some cases to
7253 hand back the DECL_INITIAL slot?? */
7254 if (TYPE_SIZE (TREE_TYPE (type)))
7255 {
7256 init = convert_from_reference (decl);
7257 if (TREE_PERMANENT (decl))
7258 init = copy_to_permanent (init);
7259 SET_DECL_REFERENCE_SLOT (decl, init);
7260 }
7261
7262 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7263 {
7264 expand_static_init (decl, DECL_INITIAL (decl));
7265 DECL_INITIAL (decl) = NULL_TREE;
7266 }
7267 return;
7268
7269 fail:
7270 if (TREE_CODE (decl) == VAR_DECL)
7271 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7272 return;
7273 }
7274
7275 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7276 mucking with forces it does not comprehend (i.e. initialization with a
7277 constructor). If we are at global scope and won't go into COMMON, fill
7278 it in with a dummy CONSTRUCTOR to force the variable into .data;
7279 otherwise we can use error_mark_node. */
7280
7281 static tree
7282 obscure_complex_init (decl, init)
7283 tree decl, init;
7284 {
7285 if (! flag_no_inline && TREE_STATIC (decl))
7286 {
7287 if (extract_init (decl, init))
7288 return NULL_TREE;
7289 }
7290
7291 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7292 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7293 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7294 NULL_TREE);
7295 else
7296 #endif
7297 DECL_INITIAL (decl) = error_mark_node;
7298
7299 return init;
7300 }
7301
7302 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7303 array until we finish parsing the initializer. If that's the
7304 situation we're in, update DECL accordingly. */
7305
7306 static void
7307 maybe_deduce_size_from_array_init (decl, init)
7308 tree decl;
7309 tree init;
7310 {
7311 tree type = TREE_TYPE (decl);
7312
7313 if (TREE_CODE (type) == ARRAY_TYPE
7314 && TYPE_DOMAIN (type) == NULL_TREE
7315 && TREE_CODE (decl) != TYPE_DECL)
7316 {
7317 int do_default
7318 = (TREE_STATIC (decl)
7319 /* Even if pedantic, an external linkage array
7320 may have incomplete type at first. */
7321 ? pedantic && ! DECL_EXTERNAL (decl)
7322 : !DECL_EXTERNAL (decl));
7323 tree initializer = init ? init : DECL_INITIAL (decl);
7324 int failure = complete_array_type (type, initializer, do_default);
7325
7326 if (failure == 1)
7327 cp_error ("initializer fails to determine size of `%D'", decl);
7328
7329 if (failure == 2)
7330 {
7331 if (do_default)
7332 cp_error ("array size missing in `%D'", decl);
7333 /* If a `static' var's size isn't known, make it extern as
7334 well as static, so it does not get allocated. If it's not
7335 `static', then don't mark it extern; finish_incomplete_decl
7336 will give it a default size and it will get allocated. */
7337 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7338 DECL_EXTERNAL (decl) = 1;
7339 }
7340
7341 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7342 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7343 integer_zero_node))
7344 cp_error ("zero-size array `%D'", decl);
7345
7346 layout_decl (decl, 0);
7347 }
7348 }
7349
7350 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7351 any appropriate error messages regarding the layout. INITP is a
7352 pointer to the initializer for DECL; the initializer may be
7353 modified by this function. */
7354
7355 static void
7356 layout_var_decl (decl, initp)
7357 tree decl;
7358 tree *initp;
7359 {
7360 tree ttype = target_type (TREE_TYPE (decl));
7361
7362 if (DECL_SIZE (decl) == NULL_TREE
7363 && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7364 layout_decl (decl, 0);
7365
7366 if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7367 {
7368 /* A static variable with an incomplete type:
7369 that is an error if it is initialized.
7370 Otherwise, let it through, but if it is not `extern'
7371 then it may cause an error message later. */
7372 if (DECL_INITIAL (decl) != NULL_TREE)
7373 cp_error ("storage size of `%D' isn't known", decl);
7374 *initp = NULL_TREE;
7375 }
7376 else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7377 {
7378 /* An automatic variable with an incomplete type: that is an error.
7379 Don't talk about array types here, since we took care of that
7380 message in grokdeclarator. */
7381 cp_error ("storage size of `%D' isn't known", decl);
7382 TREE_TYPE (decl) = error_mark_node;
7383 }
7384 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7385 /* Let debugger know it should output info for this type. */
7386 note_debug_info_needed (ttype);
7387
7388 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7389 note_debug_info_needed (DECL_CONTEXT (decl));
7390
7391 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7392 && DECL_SIZE (decl) != NULL_TREE
7393 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7394 {
7395 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7396 constant_expression_warning (DECL_SIZE (decl));
7397 else
7398 cp_error ("storage size of `%D' isn't constant", decl);
7399 }
7400 }
7401
7402 /* Return a cleanup for DECL, created on whatever obstack is
7403 appropriate. */
7404
7405 static tree
7406 build_cleanup_on_safe_obstack (decl)
7407 tree decl;
7408 {
7409 tree cleanup;
7410 tree type;
7411 int need_pop;
7412
7413 type = TREE_TYPE (decl);
7414
7415 /* Only variables get cleaned up. */
7416 if (TREE_CODE (decl) != VAR_DECL)
7417 return NULL_TREE;
7418
7419 /* And only things with destructors need cleaning up. */
7420 if (!TYPE_NEEDS_DESTRUCTOR (type))
7421 return NULL_TREE;
7422
7423 if (TREE_CODE (decl) == VAR_DECL &&
7424 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7425 /* We don't clean up things that aren't defined in this
7426 translation unit, or that need a static cleanup. The latter
7427 are handled by finish_file. */
7428 return NULL_TREE;
7429
7430 /* Switch to an obstack that will live until the point where the
7431 cleanup code is actually expanded. */
7432 need_pop = suspend_momentary ();
7433
7434 /* Compute the cleanup. */
7435 cleanup = maybe_build_cleanup (decl);
7436
7437 /* Pop back to the obstack we were on before. */
7438 resume_momentary (need_pop);
7439
7440 return cleanup;
7441 }
7442
7443 /* If a local static variable is declared in an inline function, or if
7444 we have a weak definition, we must endeavor to create only one
7445 instance of the variable at link-time. */
7446
7447 static void
7448 maybe_commonize_var (decl)
7449 tree decl;
7450 {
7451 /* Static data in a function with comdat linkage also has comdat
7452 linkage. */
7453 if (TREE_STATIC (decl)
7454 /* Don't mess with __FUNCTION__. */
7455 && ! TREE_ASM_WRITTEN (decl)
7456 && current_function_decl
7457 && DECL_CONTEXT (decl) == current_function_decl
7458 && (DECL_THIS_INLINE (current_function_decl)
7459 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7460 && TREE_PUBLIC (current_function_decl))
7461 {
7462 /* Rather than try to get this right with inlining, we suppress
7463 inlining of such functions. */
7464 current_function_cannot_inline
7465 = "function with static variable cannot be inline";
7466
7467 /* If flag_weak, we don't need to mess with this, as we can just
7468 make the function weak, and let it refer to its unique local
7469 copy. This works because we don't allow the function to be
7470 inlined. */
7471 if (! flag_weak)
7472 {
7473 if (DECL_INTERFACE_KNOWN (current_function_decl))
7474 {
7475 TREE_PUBLIC (decl) = 1;
7476 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7477 }
7478 else if (DECL_INITIAL (decl) == NULL_TREE
7479 || DECL_INITIAL (decl) == error_mark_node)
7480 {
7481 TREE_PUBLIC (decl) = 1;
7482 DECL_COMMON (decl) = 1;
7483 }
7484 /* else we lose. We can only do this if we can use common,
7485 which we can't if it has been initialized. */
7486
7487 if (TREE_PUBLIC (decl))
7488 DECL_ASSEMBLER_NAME (decl)
7489 = build_static_name (current_function_decl, DECL_NAME (decl));
7490 else if (! DECL_ARTIFICIAL (decl))
7491 {
7492 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7493 cp_warning_at (" you can work around this by removing the initializer", decl);
7494 }
7495 }
7496 }
7497 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7498 /* Set it up again; we might have set DECL_INITIAL since the last
7499 time. */
7500 comdat_linkage (decl);
7501 }
7502
7503 /* Issue an error message if DECL is an uninitialized const variable. */
7504
7505 static void
7506 check_for_uninitialized_const_var (decl)
7507 tree decl;
7508 {
7509 tree type = TREE_TYPE (decl);
7510
7511 /* ``Unless explicitly declared extern, a const object does not have
7512 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7513 7.1.6 */
7514 if (TREE_CODE (decl) == VAR_DECL
7515 && TREE_CODE (type) != REFERENCE_TYPE
7516 && CP_TYPE_CONST_P (type)
7517 && !TYPE_NEEDS_CONSTRUCTING (type)
7518 && !DECL_INITIAL (decl))
7519 cp_error ("uninitialized const `%D'", decl);
7520 }
7521
7522 /* Verify INITP (the initializer for DECL), and record the
7523 initialization in DECL_INITIAL, if appropriate. The initializer
7524 may be modified by this function. */
7525
7526 static void
7527 check_initializer (decl, initp)
7528 tree decl;
7529 tree *initp;
7530 {
7531 tree init;
7532 tree type;
7533
7534 if (TREE_CODE (decl) == FIELD_DECL)
7535 return;
7536
7537 type = TREE_TYPE (decl);
7538 init = *initp;
7539
7540 /* If `start_decl' didn't like having an initialization, ignore it now. */
7541 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7542 init = NULL_TREE;
7543 else if (DECL_EXTERNAL (decl))
7544 ;
7545 else if (TREE_CODE (type) == REFERENCE_TYPE)
7546 {
7547 if (TREE_STATIC (decl))
7548 make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7549 grok_reference_init (decl, type, init);
7550 init = NULL_TREE;
7551 }
7552
7553 /* Check for certain invalid initializations. */
7554 if (init)
7555 {
7556 if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7557 {
7558 cp_error ("variable-sized object `%D' may not be initialized", decl);
7559 init = NULL_TREE;
7560 }
7561 if (TREE_CODE (type) == ARRAY_TYPE
7562 && !TYPE_SIZE (complete_type (TREE_TYPE (type))))
7563 {
7564 cp_error ("elements of array `%#D' have incomplete type", decl);
7565 init = NULL_TREE;
7566 }
7567 }
7568
7569 if (TREE_CODE (decl) == CONST_DECL)
7570 {
7571 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7572
7573 DECL_INITIAL (decl) = init;
7574
7575 /* This will keep us from needing to worry about our obstacks. */
7576 my_friendly_assert (init != NULL_TREE, 149);
7577 init = NULL_TREE;
7578 }
7579 else if (init)
7580 {
7581 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7582 {
7583 if (TREE_CODE (type) == ARRAY_TYPE)
7584 init = digest_init (type, init, (tree *) 0);
7585 else if (TREE_CODE (init) == CONSTRUCTOR
7586 && TREE_HAS_CONSTRUCTOR (init))
7587 {
7588 if (TYPE_NON_AGGREGATE_CLASS (type))
7589 {
7590 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7591 decl);
7592 init = error_mark_node;
7593 }
7594 else
7595 goto dont_use_constructor;
7596 }
7597 }
7598 else
7599 {
7600 dont_use_constructor:
7601 if (TREE_CODE (init) != TREE_VEC)
7602 init = store_init_value (decl, init);
7603 }
7604
7605 if (init)
7606 /* We must hide the initializer so that expand_decl
7607 won't try to do something it does not understand. */
7608 init = obscure_complex_init (decl, init);
7609 }
7610 else if (DECL_EXTERNAL (decl))
7611 ;
7612 else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7613 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7614 {
7615 tree core_type = strip_array_types (type);
7616
7617 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7618 {
7619 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7620 cp_error ("structure `%D' with uninitialized const members", decl);
7621 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7622 cp_error ("structure `%D' with uninitialized reference members",
7623 decl);
7624 }
7625
7626 check_for_uninitialized_const_var (decl);
7627
7628 if (TYPE_SIZE (type) != NULL_TREE
7629 && TYPE_NEEDS_CONSTRUCTING (type))
7630 init = obscure_complex_init (decl, NULL_TREE);
7631
7632 }
7633 else
7634 check_for_uninitialized_const_var (decl);
7635
7636 /* Store the modified initializer for our caller. */
7637 *initp = init;
7638 }
7639
7640 /* If DECL is not a local variable, give it RTL. */
7641
7642 static void
7643 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7644 tree decl;
7645 tree init;
7646 const char *asmspec;
7647 {
7648 int toplev;
7649 tree type;
7650
7651 type = TREE_TYPE (decl);
7652 toplev = toplevel_bindings_p ();
7653 push_obstacks_nochange ();
7654 if (TREE_STATIC (decl)
7655 && TYPE_NEEDS_DESTRUCTOR (type)
7656 && allocation_temporary_p ())
7657 end_temporary_allocation ();
7658
7659 if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7660 make_decl_rtl (decl, NULL_PTR, toplev);
7661 else if (TREE_CODE (decl) == VAR_DECL
7662 && TREE_READONLY (decl)
7663 && DECL_INITIAL (decl) != NULL_TREE
7664 && DECL_INITIAL (decl) != error_mark_node
7665 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7666 {
7667 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7668
7669 if (asmspec)
7670 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7671
7672 if (! toplev
7673 && TREE_STATIC (decl)
7674 && ! TREE_SIDE_EFFECTS (decl)
7675 && ! TREE_PUBLIC (decl)
7676 && ! DECL_EXTERNAL (decl)
7677 && ! TYPE_NEEDS_DESTRUCTOR (type)
7678 && DECL_MODE (decl) != BLKmode)
7679 {
7680 /* If this variable is really a constant, then fill its DECL_RTL
7681 slot with something which won't take up storage.
7682 If something later should take its address, we can always give
7683 it legitimate RTL at that time. */
7684 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7685 store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7686 TREE_ASM_WRITTEN (decl) = 1;
7687 }
7688 else if (toplev && ! TREE_PUBLIC (decl))
7689 {
7690 /* If this is a static const, change its apparent linkage
7691 if it belongs to a #pragma interface. */
7692 if (!interface_unknown)
7693 {
7694 TREE_PUBLIC (decl) = 1;
7695 DECL_EXTERNAL (decl) = interface_only;
7696 }
7697 make_decl_rtl (decl, asmspec, toplev);
7698 }
7699 else
7700 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7701 }
7702 else if (TREE_CODE (decl) == VAR_DECL
7703 && DECL_LANG_SPECIFIC (decl)
7704 && DECL_IN_AGGR_P (decl))
7705 {
7706 my_friendly_assert (TREE_STATIC (decl), 19990828);
7707
7708 if (init == NULL_TREE
7709 #ifdef DEFAULT_STATIC_DEFS
7710 /* If this code is dead, then users must
7711 explicitly declare static member variables
7712 outside the class def'n as well. */
7713 && TYPE_NEEDS_CONSTRUCTING (type)
7714 #endif
7715 )
7716 {
7717 DECL_EXTERNAL (decl) = 1;
7718 make_decl_rtl (decl, asmspec, 1);
7719 }
7720 else
7721 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7722 }
7723 else
7724 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7725
7726 pop_obstacks ();
7727 }
7728
7729 /* The old ARM scoping rules injected variables declared in the
7730 initialization statement of a for-statement into the surrounding
7731 scope. We support this usage, in order to be backward-compatible.
7732 DECL is a just-declared VAR_DECL; if necessary inject its
7733 declaration into the surrounding scope. */
7734
7735 void
7736 maybe_inject_for_scope_var (decl)
7737 tree decl;
7738 {
7739 if (current_binding_level->is_for_scope)
7740 {
7741 struct binding_level *outer
7742 = current_binding_level->level_chain;
7743
7744 /* Check to see if the same name is already bound at the outer
7745 level, either because it was directly declared, or because a
7746 dead for-decl got preserved. In either case, the code would
7747 not have been valid under the ARM scope rules, so clear
7748 is_for_scope for the current_binding_level.
7749
7750 Otherwise, we need to preserve the temp slot for decl to last
7751 into the outer binding level. */
7752
7753 tree outer_binding
7754 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7755
7756 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7757 && (TREE_CODE (BINDING_VALUE (outer_binding))
7758 == VAR_DECL)
7759 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7760 {
7761 BINDING_VALUE (outer_binding)
7762 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7763 current_binding_level->is_for_scope = 0;
7764 }
7765 else if (DECL_IN_MEMORY_P (decl))
7766 preserve_temp_slots (DECL_RTL (decl));
7767 }
7768 }
7769
7770 /* Generate code to initialized DECL (a local variable). */
7771
7772 void
7773 initialize_local_var (decl, init, flags)
7774 tree decl;
7775 tree init;
7776 int flags;
7777 {
7778 tree type;
7779 tree cleanup;
7780
7781 type = TREE_TYPE (decl);
7782
7783 cleanup = build_cleanup_on_safe_obstack (decl);
7784
7785 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7786 {
7787 /* If we used it already as memory, it must stay in memory. */
7788 DECL_INITIAL (decl) = NULL_TREE;
7789 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7790 }
7791
7792 if (DECL_RTL (decl))
7793 /* Only a RESULT_DECL should have non-NULL RTL when arriving here.
7794 All other local variables are assigned RTL in this function. */
7795 my_friendly_assert (TREE_CODE (decl) == RESULT_DECL, 19990828);
7796 else
7797 /* Create RTL for this variable. */
7798 expand_decl (decl);
7799
7800 expand_start_target_temps ();
7801
7802 if (DECL_SIZE (decl) && type != error_mark_node)
7803 {
7804 int already_used;
7805
7806 /* Compute and store the initial value. */
7807 already_used = TREE_USED (decl) || TREE_USED (type);
7808
7809 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7810 {
7811 emit_line_note (DECL_SOURCE_FILE (decl),
7812 DECL_SOURCE_LINE (decl));
7813 /* We call push_momentary here so that when
7814 finish_expr_stmt clears the momentary obstack it
7815 doesn't destory any momentary expressions we may
7816 have lying around. Although cp_finish_decl is
7817 usually called at the end of a declaration
7818 statement, it may also be called for a temporary
7819 object in the middle of an expression. */
7820 push_momentary ();
7821 finish_expr_stmt (build_aggr_init (decl, init, flags));
7822 pop_momentary ();
7823 }
7824 else
7825 expand_decl_init (decl);
7826
7827 /* Set this to 0 so we can tell whether an aggregate which was
7828 initialized was ever used. Don't do this if it has a
7829 destructor, so we don't complain about the 'resource
7830 allocation is initialization' idiom. Now set
7831 attribute((unused)) on types so decls of that type will be
7832 marked used. (see TREE_USED, above.) */
7833 if (TYPE_NEEDS_CONSTRUCTING (type)
7834 && ! already_used
7835 && cleanup == NULL_TREE
7836 && DECL_NAME (decl))
7837 TREE_USED (decl) = 0;
7838 else if (already_used)
7839 TREE_USED (decl) = 1;
7840 }
7841
7842 /* Cleanup any temporaries needed for the initial value. */
7843 expand_end_target_temps ();
7844
7845 /* Record the cleanup required for this declaration. */
7846 if (DECL_SIZE (decl)
7847 && type != error_mark_node
7848 && cleanup
7849 && !expand_decl_cleanup (decl, cleanup))
7850 cp_error ("parser lost in parsing declaration of `%D'", decl);
7851 }
7852
7853 /* Finish processing of a declaration;
7854 install its line number and initial value.
7855 If the length of an array type is not known before,
7856 it must be determined now, from the initial value, or it is an error.
7857
7858 Call `pop_obstacks' iff NEED_POP is nonzero.
7859
7860 For C++, `cp_finish_decl' must be fairly evasive: it must keep initializers
7861 for aggregates that have constructors alive on the permanent obstack,
7862 so that the global initializing functions can be written at the end.
7863
7864 INIT0 holds the value of an initializer that should be allowed to escape
7865 the normal rules.
7866
7867 FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7868 if the (init) syntax was used.
7869
7870 For functions that take default parameters, DECL points to its
7871 "maximal" instantiation. `cp_finish_decl' must then also declared its
7872 subsequently lower and lower forms of instantiation, checking for
7873 ambiguity as it goes. This can be sped up later. */
7874
7875 void
7876 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7877 tree decl, init;
7878 tree asmspec_tree;
7879 int need_pop;
7880 int flags;
7881 {
7882 register tree type;
7883 tree ttype = NULL_TREE;
7884 int temporary = allocation_temporary_p ();
7885 const char *asmspec = NULL;
7886 int was_readonly = 0;
7887
7888 /* If this is 0, then we did not change obstacks. */
7889 if (! decl)
7890 {
7891 if (init)
7892 error ("assignment (not initialization) in declaration");
7893 return;
7894 }
7895
7896 /* If a name was specified, get the string. */
7897 if (asmspec_tree)
7898 asmspec = TREE_STRING_POINTER (asmspec_tree);
7899
7900 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7901 {
7902 cp_error ("Cannot initialize `%D' to namespace `%D'",
7903 decl, init);
7904 init = NULL_TREE;
7905 }
7906
7907 if (current_class_type
7908 && DECL_REAL_CONTEXT (decl) == current_class_type
7909 && TYPE_BEING_DEFINED (current_class_type)
7910 && (DECL_INITIAL (decl) || init))
7911 DECL_DEFINED_IN_CLASS_P (decl) = 1;
7912
7913 if (TREE_CODE (decl) == VAR_DECL
7914 && DECL_CONTEXT (decl)
7915 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7916 && DECL_CONTEXT (decl) != current_namespace
7917 && init)
7918 {
7919 /* Leave the namespace of the object. */
7920 pop_decl_namespace ();
7921 }
7922
7923 type = complete_type (TREE_TYPE (decl));
7924
7925 if (type == error_mark_node)
7926 {
7927 if (toplevel_bindings_p () && temporary)
7928 end_temporary_allocation ();
7929
7930 return;
7931 }
7932
7933 if (TYPE_HAS_MUTABLE_P (type))
7934 TREE_READONLY (decl) = 0;
7935
7936 if (processing_template_decl)
7937 {
7938 if (init && DECL_INITIAL (decl))
7939 DECL_INITIAL (decl) = copy_to_permanent (init);
7940 goto finish_end0;
7941 }
7942
7943 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
7944 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7945
7946 /* Take care of TYPE_DECLs up front. */
7947 if (TREE_CODE (decl) == TYPE_DECL)
7948 {
7949 if (init && DECL_INITIAL (decl))
7950 {
7951 /* typedef foo = bar; store the type of bar as the type of foo. */
7952 TREE_TYPE (decl) = type = TREE_TYPE (init);
7953 DECL_INITIAL (decl) = init = NULL_TREE;
7954 }
7955 if (type != error_mark_node
7956 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7957 {
7958 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7959 cp_warning ("shadowing previous type declaration of `%#D'", decl);
7960 set_identifier_type_value (DECL_NAME (decl), type);
7961 CLASSTYPE_GOT_SEMICOLON (type) = 1;
7962 }
7963 GNU_xref_decl (current_function_decl, decl);
7964
7965 /* If we have installed this as the canonical typedef for this
7966 type, and that type has not been defined yet, delay emitting
7967 the debug information for it, as we will emit it later. */
7968 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7969 && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7970 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7971
7972 rest_of_decl_compilation (decl, NULL_PTR,
7973 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7974 goto finish_end;
7975 }
7976
7977 if (TREE_CODE (decl) != FUNCTION_DECL)
7978 ttype = target_type (type);
7979
7980 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7981 && TYPE_NEEDS_CONSTRUCTING (type))
7982 {
7983 /* Currently, GNU C++ puts constants in text space, making them
7984 impossible to initialize. In the future, one would hope for
7985 an operating system which understood the difference between
7986 initialization and the running of a program. */
7987 was_readonly = 1;
7988 TREE_READONLY (decl) = 0;
7989 }
7990
7991 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
7992 {
7993 /* This must override the asm specifier which was placed by
7994 grokclassfn. Lay this out fresh. */
7995 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7996 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7997 make_decl_rtl (decl, asmspec, 0);
7998 }
7999
8000 check_initializer (decl, &init);
8001
8002 GNU_xref_decl (current_function_decl, decl);
8003
8004 /* For top-level declaration, the initial value was read in
8005 the temporary obstack. MAXINDEX, rtl, etc. to be made below
8006 must go in the permanent obstack; but don't discard the
8007 temporary data yet. */
8008
8009 if (toplevel_bindings_p () && temporary)
8010 end_temporary_allocation ();
8011
8012 /* Deduce size of array from initialization, if not already known. */
8013 maybe_deduce_size_from_array_init (decl, init);
8014
8015 if (TREE_CODE (decl) == VAR_DECL)
8016 layout_var_decl (decl, &init);
8017
8018 /* Output the assembler code and/or RTL code for variables and functions,
8019 unless the type is an undefined structure or union.
8020 If not, it will get done when the type is completed. */
8021 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8022 || TREE_CODE (decl) == RESULT_DECL)
8023 {
8024 /* ??? FIXME: What about nested classes? */
8025 int toplev = toplevel_bindings_p ();
8026
8027 if (TREE_CODE (decl) == VAR_DECL)
8028 maybe_commonize_var (decl);
8029
8030 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8031
8032 if (TREE_CODE (type) == FUNCTION_TYPE
8033 || TREE_CODE (type) == METHOD_TYPE)
8034 abstract_virtuals_error (decl,
8035 strip_array_types (TREE_TYPE (type)));
8036 else
8037 abstract_virtuals_error (decl, strip_array_types (type));
8038
8039 if (TREE_CODE (decl) == FUNCTION_DECL)
8040 ;
8041 else if (DECL_EXTERNAL (decl)
8042 && ! (DECL_LANG_SPECIFIC (decl)
8043 && DECL_NOT_REALLY_EXTERN (decl)))
8044 {
8045 if (init)
8046 DECL_INITIAL (decl) = init;
8047 }
8048 else if (TREE_STATIC (decl) && type != error_mark_node)
8049 {
8050 /* Cleanups for static variables are handled by `finish_file'. */
8051 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8052 || TYPE_NEEDS_DESTRUCTOR (type))
8053 expand_static_init (decl, init);
8054 }
8055 else if (! toplev)
8056 {
8057 /* This is a local declaration. */
8058 maybe_inject_for_scope_var (decl);
8059 /* Initialize the local variable. But, if we're building a
8060 statement-tree, we'll do the initialization when we
8061 expand the tree. */
8062 if (!building_stmt_tree ())
8063 initialize_local_var (decl, init, flags);
8064 else if (init || DECL_INITIAL (decl) == error_mark_node)
8065 DECL_INITIAL (decl) = init;
8066 }
8067 finish_end0:
8068
8069 /* Undo call to `pushclass' that was done in `start_decl'
8070 due to initialization of qualified member variable.
8071 I.e., Foo::x = 10; */
8072 {
8073 tree context = DECL_REAL_CONTEXT (decl);
8074 if (context
8075 && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
8076 && (TREE_CODE (decl) == VAR_DECL
8077 /* We also have a pushclass done that we need to undo here
8078 if we're at top level and declare a method. */
8079 || TREE_CODE (decl) == FUNCTION_DECL)
8080 /* If size hasn't been set, we're still defining it,
8081 and therefore inside the class body; don't pop
8082 the binding level.. */
8083 && TYPE_SIZE (context) != NULL_TREE
8084 && context == current_class_type)
8085 pop_nested_class ();
8086 }
8087 }
8088
8089 finish_end:
8090
8091 /* If requested, warn about definitions of large data objects. */
8092
8093 if (warn_larger_than
8094 && ! processing_template_decl
8095 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8096 && !DECL_EXTERNAL (decl))
8097 {
8098 register tree decl_size = DECL_SIZE (decl);
8099
8100 if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8101 {
8102 unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8103
8104 if (units > larger_than_size)
8105 warning_with_decl (decl, "size of `%s' is %u bytes", units);
8106 }
8107 }
8108
8109 if (need_pop)
8110 /* Resume permanent allocation, if not within a function. The
8111 corresponding push_obstacks_nochange is in start_decl,
8112 start_method, groktypename, and in grokfield. */
8113 pop_obstacks ();
8114
8115 if (was_readonly)
8116 TREE_READONLY (decl) = 1;
8117 }
8118
8119 /* This is here for a midend callback from c-common.c */
8120
8121 void
8122 finish_decl (decl, init, asmspec_tree)
8123 tree decl, init;
8124 tree asmspec_tree;
8125 {
8126 cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8127 }
8128
8129 void
8130 expand_static_init (decl, init)
8131 tree decl;
8132 tree init;
8133 {
8134 tree oldstatic = value_member (decl, static_aggregates);
8135
8136 if (oldstatic)
8137 {
8138 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8139 cp_error ("multiple initializations given for `%D'", decl);
8140 }
8141 else if (! toplevel_bindings_p ())
8142 {
8143 /* Emit code to perform this initialization but once. */
8144 tree temp;
8145 tree if_stmt;
8146 tree assignment;
8147 tree temp_init;
8148
8149 /* Remember this information until end of file. */
8150 push_obstacks (&permanent_obstack, &permanent_obstack);
8151
8152 /* Emit code to perform this initialization but once. This code
8153 looks like:
8154
8155 static int temp = 0;
8156 if (!temp) {
8157 // Do initialization.
8158 temp = 1;
8159 // Register variable for destruction at end of program.
8160 }
8161
8162 Note that the `temp' variable is only set to 1 *after* the
8163 initialization is complete. This ensures that an exception,
8164 thrown during the construction, will cause the variable to
8165 reinitialized when we pass through this code again, as per:
8166
8167 [stmt.dcl]
8168
8169 If the initialization exits by throwing an exception, the
8170 initialization is not complete, so it will be tried again
8171 the next time control enters the declaration.
8172
8173 In theory, this process should be thread-safe, too; multiple
8174 threads should not be able to initialize the variable more
8175 than once. We don't yet attempt to ensure thread-safety. */
8176 temp = get_temp_name (integer_type_node, 1);
8177 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8178
8179 /* Begin the conditional initialization. */
8180 if_stmt = begin_if_stmt ();
8181 finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8182 integer_zero_node),
8183 if_stmt);
8184
8185 /* Do the initialization itself. */
8186 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8187 || (init && TREE_CODE (init) == TREE_LIST))
8188 assignment = build_aggr_init (decl, init, 0);
8189 else if (init)
8190 /* The initialization we're doing here is just a bitwise
8191 copy. */
8192 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8193 else
8194 assignment = NULL_TREE;
8195
8196 /* Once the assignment is complete, set TEMP to 1. Since the
8197 construction of the static object is complete at this point,
8198 we want to make sure TEMP is set to 1 even if a temporary
8199 constructed during the initialization throws an exception
8200 when it is destroyed. So, we combine the initialization and
8201 the assignment to TEMP into a single expression, ensuring
8202 that when we call finish_expr_stmt the cleanups will not be
8203 run until after TEMP is set to 1. */
8204 temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8205 if (assignment)
8206 {
8207 assignment = tree_cons (NULL_TREE, assignment,
8208 build_tree_list (NULL_TREE,
8209 temp_init));
8210 assignment = build_compound_expr (assignment);
8211 }
8212 else
8213 assignment = temp_init;
8214 finish_expr_stmt (assignment);
8215
8216 /* Use atexit to register a function for destroying this static
8217 variable. */
8218 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8219 {
8220 tree cleanup, fcall;
8221 static tree Atexit = 0;
8222 int saved_flag_access_control;
8223
8224 if (Atexit == 0)
8225 {
8226 tree atexit_fndecl, PFV, pfvlist;
8227 /* Remember this information until end of file. */
8228 push_obstacks (&permanent_obstack, &permanent_obstack);
8229 PFV = build_pointer_type (build_function_type
8230 (void_type_node, void_list_node));
8231
8232 pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8233
8234 push_lang_context (lang_name_c);
8235 /* Note that we do not call pushdecl for this function;
8236 there's no reason that this declaration should be
8237 accessible to anyone. */
8238 atexit_fndecl
8239 = define_function ("atexit",
8240 build_function_type (void_type_node,
8241 pfvlist),
8242 NOT_BUILT_IN,
8243 /*pfn=*/0,
8244 NULL_PTR);
8245 mark_used (atexit_fndecl);
8246 Atexit = default_conversion (atexit_fndecl);
8247 pop_lang_context ();
8248 pop_obstacks ();
8249 }
8250
8251 /* Call build_cleanup before we enter the anonymous function
8252 so that any access checks will be done relative to the
8253 current scope, rather than the scope of the anonymous
8254 function. */
8255 build_cleanup (decl);
8256
8257 /* Now start the function. */
8258 cleanup = start_anon_func ();
8259
8260 /* Now, recompute the cleanup. It may contain SAVE_EXPRs
8261 that refer to the original function, rather than the
8262 anonymous one. That will make the back-end think that
8263 nested functions are in use, which causes confusion. */
8264 saved_flag_access_control = flag_access_control;
8265 flag_access_control = 0;
8266 fcall = build_cleanup (decl);
8267 flag_access_control = saved_flag_access_control;
8268
8269 /* Finish off the function. */
8270 expand_expr_stmt (fcall);
8271 end_anon_func ();
8272
8273 /* Call atexit with the cleanup function. */
8274 mark_addressable (cleanup);
8275 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8276 fcall = build_function_call (Atexit,
8277 expr_tree_cons (NULL_TREE,
8278 cleanup,
8279 NULL_TREE));
8280 finish_expr_stmt (fcall);
8281 }
8282
8283 finish_then_clause (if_stmt);
8284 finish_if_stmt ();
8285
8286 /* Resume old (possibly temporary) allocation. */
8287 pop_obstacks ();
8288 }
8289 else
8290 {
8291 /* This code takes into account memory allocation policy of
8292 `start_decl'. Namely, if TYPE_NEEDS_CONSTRUCTING does not
8293 hold for this object, then we must make permanent the storage
8294 currently in the temporary obstack. */
8295 if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8296 preserve_initializer ();
8297 static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8298 }
8299 }
8300
8301 /* Finish the declaration of a catch-parameter. */
8302
8303 void
8304 start_handler_parms (declspecs, declarator)
8305 tree declspecs;
8306 tree declarator;
8307 {
8308 tree decl;
8309 if (declspecs)
8310 {
8311 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8312 1, NULL_TREE);
8313 if (decl == NULL_TREE)
8314 error ("invalid catch parameter");
8315 }
8316 else
8317 decl = NULL_TREE;
8318 expand_start_catch_block (decl);
8319 }
8320
8321 \f
8322 /* Make TYPE a complete type based on INITIAL_VALUE.
8323 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8324 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8325
8326 int
8327 complete_array_type (type, initial_value, do_default)
8328 tree type, initial_value;
8329 int do_default;
8330 {
8331 register tree maxindex = NULL_TREE;
8332 int value = 0;
8333
8334 /* Allocate on the same obstack as TYPE. */
8335 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8336
8337 if (initial_value)
8338 {
8339 /* Note MAXINDEX is really the maximum index,
8340 one less than the size. */
8341 if (TREE_CODE (initial_value) == STRING_CST)
8342 {
8343 int eltsize
8344 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8345 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8346 / eltsize) - 1, 0);
8347 }
8348 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8349 {
8350 tree elts = CONSTRUCTOR_ELTS (initial_value);
8351 maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8352 for (; elts; elts = TREE_CHAIN (elts))
8353 {
8354 if (TREE_PURPOSE (elts))
8355 maxindex = TREE_PURPOSE (elts);
8356 else
8357 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8358 }
8359 maxindex = copy_node (maxindex);
8360 }
8361 else
8362 {
8363 /* Make an error message unless that happened already. */
8364 if (initial_value != error_mark_node)
8365 value = 1;
8366 else
8367 initial_value = NULL_TREE;
8368
8369 /* Prevent further error messages. */
8370 maxindex = build_int_2 (0, 0);
8371 }
8372 }
8373
8374 if (!maxindex)
8375 {
8376 if (do_default)
8377 maxindex = build_int_2 (0, 0);
8378 value = 2;
8379 }
8380
8381 if (maxindex)
8382 {
8383 tree itype;
8384 tree domain;
8385
8386 domain = build_index_type (maxindex);
8387 TYPE_DOMAIN (type) = domain;
8388
8389 if (! TREE_TYPE (maxindex))
8390 TREE_TYPE (maxindex) = domain;
8391 if (initial_value)
8392 itype = TREE_TYPE (initial_value);
8393 else
8394 itype = NULL;
8395 if (itype && !TYPE_DOMAIN (itype))
8396 TYPE_DOMAIN (itype) = domain;
8397 /* The type of the main variant should never be used for arrays
8398 of different sizes. It should only ever be completed with the
8399 size of the array. */
8400 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8401 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8402 }
8403
8404 pop_obstacks();
8405
8406 /* Lay out the type now that we can get the real answer. */
8407
8408 layout_type (type);
8409
8410 return value;
8411 }
8412 \f
8413 /* Return zero if something is declared to be a member of type
8414 CTYPE when in the context of CUR_TYPE. STRING is the error
8415 message to print in that case. Otherwise, quietly return 1. */
8416
8417 static int
8418 member_function_or_else (ctype, cur_type, string)
8419 tree ctype, cur_type;
8420 const char *string;
8421 {
8422 if (ctype && ctype != cur_type)
8423 {
8424 error (string, TYPE_NAME_STRING (ctype));
8425 return 0;
8426 }
8427 return 1;
8428 }
8429 \f
8430 /* Subroutine of `grokdeclarator'. */
8431
8432 /* Generate errors possibly applicable for a given set of specifiers.
8433 This is for ARM $7.1.2. */
8434
8435 static void
8436 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8437 tree object;
8438 const char *type;
8439 int virtualp, quals, friendp, raises, inlinep;
8440 {
8441 if (virtualp)
8442 cp_error ("`%D' declared as a `virtual' %s", object, type);
8443 if (inlinep)
8444 cp_error ("`%D' declared as an `inline' %s", object, type);
8445 if (quals)
8446 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8447 object, type);
8448 if (friendp)
8449 cp_error_at ("`%D' declared as a friend", object);
8450 if (raises)
8451 cp_error_at ("`%D' declared with an exception specification", object);
8452 }
8453
8454 /* CTYPE is class type, or null if non-class.
8455 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8456 or METHOD_TYPE.
8457 DECLARATOR is the function's name.
8458 VIRTUALP is truthvalue of whether the function is virtual or not.
8459 FLAGS are to be passed through to `grokclassfn'.
8460 QUALS are qualifiers indicating whether the function is `const'
8461 or `volatile'.
8462 RAISES is a list of exceptions that this function can raise.
8463 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8464 not look, and -1 if we should not call `grokclassfn' at all.
8465
8466 Returns `NULL_TREE' if something goes wrong, after issuing
8467 applicable error messages. */
8468
8469 static tree
8470 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8471 raises, check, friendp, publicp, inlinep, funcdef_flag,
8472 template_count, in_namespace)
8473 tree ctype, type;
8474 tree declarator;
8475 tree orig_declarator;
8476 int virtualp;
8477 enum overload_flags flags;
8478 tree quals, raises;
8479 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8480 tree in_namespace;
8481 {
8482 tree cname, decl;
8483 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8484 int has_default_arg = 0;
8485 tree t;
8486
8487 if (ctype)
8488 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8489 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8490 else
8491 cname = NULL_TREE;
8492
8493 if (raises)
8494 {
8495 type = build_exception_variant (type, raises);
8496 }
8497
8498 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8499 /* Propagate volatile out from type to decl. */
8500 if (TYPE_VOLATILE (type))
8501 TREE_THIS_VOLATILE (decl) = 1;
8502
8503 /* If this decl has namespace scope, set that up. */
8504 if (in_namespace)
8505 set_decl_namespace (decl, in_namespace, friendp);
8506 else if (publicp && ! ctype)
8507 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8508
8509 /* `main' and builtins have implicit 'C' linkage. */
8510 if ((MAIN_NAME_P (declarator)
8511 || (IDENTIFIER_LENGTH (declarator) > 10
8512 && IDENTIFIER_POINTER (declarator)[0] == '_'
8513 && IDENTIFIER_POINTER (declarator)[1] == '_'
8514 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8515 && current_lang_name == lang_name_cplusplus
8516 && ctype == NULL_TREE
8517 /* NULL_TREE means global namespace. */
8518 && DECL_CONTEXT (decl) == NULL_TREE)
8519 DECL_LANGUAGE (decl) = lang_c;
8520
8521 /* Should probably propagate const out from type to decl I bet (mrs). */
8522 if (staticp)
8523 {
8524 DECL_STATIC_FUNCTION_P (decl) = 1;
8525 DECL_CONTEXT (decl) = ctype;
8526 }
8527
8528 if (ctype)
8529 DECL_CLASS_CONTEXT (decl) = ctype;
8530
8531 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8532 {
8533 if (processing_template_decl)
8534 error ("cannot declare `main' to be a template");
8535 if (inlinep)
8536 error ("cannot declare `main' to be inline");
8537 else if (! publicp)
8538 error ("cannot declare `main' to be static");
8539 inlinep = 0;
8540 publicp = 1;
8541 }
8542
8543 /* Members of anonymous types and local classes have no linkage; make
8544 them internal. */
8545 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8546 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8547 publicp = 0;
8548
8549 if (publicp)
8550 {
8551 /* [basic.link]: A name with no linkage (notably, the name of a class
8552 or enumeration declared in a local scope) shall not be used to
8553 declare an entity with linkage.
8554
8555 Only check this for public decls for now. */
8556 t = no_linkage_check (TREE_TYPE (decl));
8557 if (t)
8558 {
8559 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8560 {
8561 if (DECL_LANGUAGE (decl) == lang_c)
8562 /* Allow this; it's pretty common in C. */;
8563 else
8564 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8565 decl);
8566 }
8567 else
8568 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8569 decl, t);
8570 }
8571 }
8572
8573 TREE_PUBLIC (decl) = publicp;
8574 if (! publicp)
8575 {
8576 DECL_INTERFACE_KNOWN (decl) = 1;
8577 DECL_NOT_REALLY_EXTERN (decl) = 1;
8578 }
8579
8580 if (inlinep)
8581 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8582
8583 DECL_EXTERNAL (decl) = 1;
8584 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8585 {
8586 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8587 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8588 quals = NULL_TREE;
8589 }
8590
8591 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8592 grok_op_properties (decl, virtualp, check < 0);
8593
8594 if (ctype && hack_decl_function_context (decl))
8595 DECL_NO_STATIC_CHAIN (decl) = 1;
8596
8597 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8598 if (TREE_PURPOSE (t)
8599 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8600 {
8601 has_default_arg = 1;
8602 break;
8603 }
8604
8605 if (friendp
8606 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8607 {
8608 if (funcdef_flag)
8609 cp_error
8610 ("defining explicit specialization `%D' in friend declaration",
8611 orig_declarator);
8612 else
8613 {
8614 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8615 {
8616 /* Something like `template <class T> friend void f<T>()'. */
8617 cp_error ("template-id `%D' in declaration of primary template",
8618 orig_declarator);
8619 return NULL_TREE;
8620 }
8621
8622
8623 /* A friend declaration of the form friend void f<>(). Record
8624 the information in the TEMPLATE_ID_EXPR. */
8625 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8626 DECL_TEMPLATE_INFO (decl)
8627 = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8628 TREE_OPERAND (orig_declarator, 1),
8629 NULL_TREE);
8630
8631 if (has_default_arg)
8632 {
8633 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8634 decl);
8635 return NULL_TREE;
8636 }
8637
8638 if (inlinep)
8639 {
8640 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
8641 decl);
8642 return NULL_TREE;
8643 }
8644 }
8645 }
8646
8647 if (has_default_arg)
8648 add_defarg_fn (decl);
8649
8650 /* Plain overloading: will not be grok'd by grokclassfn. */
8651 if (! ctype && ! processing_template_decl
8652 && DECL_LANGUAGE (decl) != lang_c
8653 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8654 set_mangled_name_for_decl (decl);
8655
8656 if (funcdef_flag)
8657 /* Make the init_value nonzero so pushdecl knows this is not
8658 tentative. error_mark_node is replaced later with the BLOCK. */
8659 DECL_INITIAL (decl) = error_mark_node;
8660
8661 /* Caller will do the rest of this. */
8662 if (check < 0)
8663 return decl;
8664
8665 if (check && funcdef_flag)
8666 DECL_INITIAL (decl) = error_mark_node;
8667
8668 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8669 {
8670 tree tmp;
8671 /* Just handle constructors here. We could do this
8672 inside the following if stmt, but I think
8673 that the code is more legible by breaking this
8674 case out. See comments below for what each of
8675 the following calls is supposed to do. */
8676 DECL_CONSTRUCTOR_P (decl) = 1;
8677
8678 grokclassfn (ctype, decl, flags, quals);
8679
8680 decl = check_explicit_specialization (orig_declarator, decl,
8681 template_count,
8682 2 * (funcdef_flag != 0) +
8683 4 * (friendp != 0));
8684 if (decl == error_mark_node)
8685 return NULL_TREE;
8686
8687 if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8688 && check)
8689 {
8690 tmp = check_classfn (ctype, decl);
8691
8692 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8693 tmp = DECL_TEMPLATE_RESULT(tmp);
8694
8695 if (tmp && DECL_ARTIFICIAL (tmp))
8696 cp_error ("definition of implicitly-declared `%D'", tmp);
8697 if (tmp && duplicate_decls (decl, tmp))
8698 return tmp;
8699 }
8700 if (! grok_ctor_properties (ctype, decl))
8701 return NULL_TREE;
8702 }
8703 else
8704 {
8705 tree tmp;
8706
8707 /* Function gets the ugly name, field gets the nice one.
8708 This call may change the type of the function (because
8709 of default parameters)! */
8710 if (ctype != NULL_TREE)
8711 grokclassfn (ctype, decl, flags, quals);
8712
8713 decl = check_explicit_specialization (orig_declarator, decl,
8714 template_count,
8715 2 * (funcdef_flag != 0) +
8716 4 * (friendp != 0));
8717 if (decl == error_mark_node)
8718 return NULL_TREE;
8719
8720 if (ctype != NULL_TREE
8721 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8722 && check)
8723 {
8724 tmp = check_classfn (ctype, decl);
8725
8726 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8727 tmp = DECL_TEMPLATE_RESULT (tmp);
8728
8729 if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8730 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8731 {
8732 /* Remove the `this' parm added by grokclassfn.
8733 XXX Isn't this done in start_function, too? */
8734 revert_static_member_fn (&decl, NULL, NULL);
8735 last_function_parms = TREE_CHAIN (last_function_parms);
8736 }
8737 if (tmp && DECL_ARTIFICIAL (tmp))
8738 cp_error ("definition of implicitly-declared `%D'", tmp);
8739 if (tmp)
8740 {
8741 /* Attempt to merge the declarations. This can fail, in
8742 the case of some illegal specialization declarations. */
8743 if (!duplicate_decls (decl, tmp))
8744 cp_error ("no `%#D' member function declared in class `%T'",
8745 decl, ctype);
8746 return tmp;
8747 }
8748 }
8749
8750 if (ctype == NULL_TREE || check)
8751 return decl;
8752
8753 if (virtualp)
8754 {
8755 DECL_VIRTUAL_P (decl) = 1;
8756 if (DECL_VINDEX (decl) == NULL_TREE)
8757 DECL_VINDEX (decl) = error_mark_node;
8758 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8759 }
8760 }
8761 return decl;
8762 }
8763
8764 static tree
8765 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8766 tree type;
8767 tree declarator;
8768 RID_BIT_TYPE *specbits_in;
8769 int initialized;
8770 int constp;
8771 tree in_namespace;
8772 {
8773 tree decl;
8774 RID_BIT_TYPE specbits;
8775
8776 specbits = *specbits_in;
8777
8778 if (TREE_CODE (type) == OFFSET_TYPE)
8779 {
8780 /* If you declare a static member so that it
8781 can be initialized, the code will reach here. */
8782 tree basetype = TYPE_OFFSET_BASETYPE (type);
8783 type = TREE_TYPE (type);
8784 decl = build_lang_decl (VAR_DECL, declarator, type);
8785 DECL_CONTEXT (decl) = basetype;
8786 DECL_CLASS_CONTEXT (decl) = basetype;
8787 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8788 }
8789 else
8790 {
8791 tree context;
8792
8793 if (in_namespace)
8794 context = in_namespace;
8795 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8796 context = current_namespace;
8797 else
8798 context = NULL_TREE;
8799
8800 if (processing_template_decl)
8801 {
8802 /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8803 we can call push_template_decl. */
8804 push_permanent_obstack ();
8805 decl = build_lang_decl (VAR_DECL, declarator,
8806 complete_type (type));
8807 pop_obstacks ();
8808 }
8809 else
8810 decl = build_decl (VAR_DECL, declarator, complete_type (type));
8811
8812 if (context)
8813 set_decl_namespace (decl, context, 0);
8814
8815 context = DECL_CONTEXT (decl);
8816 if (declarator && context && current_lang_name != lang_name_c)
8817 DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8818 }
8819
8820 if (in_namespace)
8821 set_decl_namespace (decl, in_namespace, 0);
8822
8823 if (RIDBIT_SETP (RID_EXTERN, specbits))
8824 {
8825 DECL_THIS_EXTERN (decl) = 1;
8826 DECL_EXTERNAL (decl) = !initialized;
8827 }
8828
8829 /* In class context, static means one per class,
8830 public access, and static storage. */
8831 if (DECL_CLASS_SCOPE_P (decl))
8832 {
8833 TREE_PUBLIC (decl) = 1;
8834 TREE_STATIC (decl) = 1;
8835 DECL_EXTERNAL (decl) = 0;
8836 }
8837 /* At top level, either `static' or no s.c. makes a definition
8838 (perhaps tentative), and absence of `static' makes it public. */
8839 else if (toplevel_bindings_p ())
8840 {
8841 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8842 && (DECL_THIS_EXTERN (decl) || ! constp));
8843 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8844 }
8845 /* Not at top level, only `static' makes a static definition. */
8846 else
8847 {
8848 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8849 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8850 }
8851
8852 if (TREE_PUBLIC (decl))
8853 {
8854 /* [basic.link]: A name with no linkage (notably, the name of a class
8855 or enumeration declared in a local scope) shall not be used to
8856 declare an entity with linkage.
8857
8858 Only check this for public decls for now. */
8859 tree t = no_linkage_check (TREE_TYPE (decl));
8860 if (t)
8861 {
8862 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8863 /* Ignore for now; `enum { foo } e' is pretty common. */;
8864 else
8865 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8866 decl, t);
8867 }
8868 }
8869
8870 return decl;
8871 }
8872
8873 /* Create and return a canonical pointer to member function type, for
8874 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8875
8876 tree
8877 build_ptrmemfunc_type (type)
8878 tree type;
8879 {
8880 tree fields[4];
8881 tree t;
8882 tree u;
8883 tree unqualified_variant = NULL_TREE;
8884
8885 /* If a canonical type already exists for this type, use it. We use
8886 this method instead of type_hash_canon, because it only does a
8887 simple equality check on the list of field members. */
8888
8889 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8890 return t;
8891
8892 /* Make sure that we always have the unqualified pointer-to-member
8893 type first. */
8894 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8895 unqualified_variant
8896 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8897
8898 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8899
8900 u = make_lang_type (UNION_TYPE);
8901 SET_IS_AGGR_TYPE (u, 0);
8902 fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
8903 fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
8904 delta_type_node);
8905 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8906 TYPE_NAME (u) = NULL_TREE;
8907
8908 t = make_lang_type (RECORD_TYPE);
8909
8910 /* Let the front-end know this is a pointer to member function... */
8911 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8912 /* ... and not really an aggregate. */
8913 SET_IS_AGGR_TYPE (t, 0);
8914
8915 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
8916 delta_type_node);
8917 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
8918 delta_type_node);
8919 fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8920 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8921
8922 pop_obstacks ();
8923
8924 /* Zap out the name so that the back-end will give us the debugging
8925 information for this anonymous RECORD_TYPE. */
8926 TYPE_NAME (t) = NULL_TREE;
8927
8928 /* If this is not the unqualified form of this pointer-to-member
8929 type, set the TYPE_MAIN_VARIANT for this type to be the
8930 unqualified type. Since they are actually RECORD_TYPEs that are
8931 not variants of each other, we must do this manually. */
8932 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8933 {
8934 t = build_qualified_type (t, CP_TYPE_QUALS (type));
8935 TYPE_MAIN_VARIANT (t) = unqualified_variant;
8936 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8937 TYPE_NEXT_VARIANT (unqualified_variant) = t;
8938 }
8939
8940 /* Cache this pointer-to-member type so that we can find it again
8941 later. */
8942 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8943
8944 /* Seems to be wanted. */
8945 CLASSTYPE_GOT_SEMICOLON (t) = 1;
8946
8947 return t;
8948 }
8949
8950 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8951 Check to see that the definition is valid. Issue appropriate error
8952 messages. Return 1 if the definition is particularly bad, or 0
8953 otherwise. */
8954
8955 int
8956 check_static_variable_definition (decl, type)
8957 tree decl;
8958 tree type;
8959 {
8960 /* Motion 10 at San Diego: If a static const integral data member is
8961 initialized with an integral constant expression, the initializer
8962 may appear either in the declaration (within the class), or in
8963 the definition, but not both. If it appears in the class, the
8964 member is a member constant. The file-scope definition is always
8965 required. */
8966 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8967 {
8968 cp_error ("in-class initialization of static data member of non-integral type `%T'",
8969 type);
8970 /* If we just return the declaration, crashes will sometimes
8971 occur. We therefore return void_type_node, as if this was a
8972 friend declaration, to cause callers to completely ignore
8973 this declaration. */
8974 return 1;
8975 }
8976 else if (!CP_TYPE_CONST_P (type))
8977 cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8978 decl);
8979 else if (pedantic && !INTEGRAL_TYPE_P (type))
8980 cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8981
8982 return 0;
8983 }
8984
8985 /* Given declspecs and a declarator,
8986 determine the name and type of the object declared
8987 and construct a ..._DECL node for it.
8988 (In one case we can return a ..._TYPE node instead.
8989 For invalid input we sometimes return 0.)
8990
8991 DECLSPECS is a chain of tree_list nodes whose value fields
8992 are the storage classes and type specifiers.
8993
8994 DECL_CONTEXT says which syntactic context this declaration is in:
8995 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8996 FUNCDEF for a function definition. Like NORMAL but a few different
8997 error messages in each case. Return value may be zero meaning
8998 this definition is too screwy to try to parse.
8999 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9000 handle member functions (which have FIELD context).
9001 Return value may be zero meaning this definition is too screwy to
9002 try to parse.
9003 PARM for a parameter declaration (either within a function prototype
9004 or before a function body). Make a PARM_DECL, or return void_type_node.
9005 CATCHPARM for a parameter declaration before a catch clause.
9006 TYPENAME if for a typename (in a cast or sizeof).
9007 Don't make a DECL node; just return the ..._TYPE node.
9008 FIELD for a struct or union field; make a FIELD_DECL.
9009 BITFIELD for a field with specified width.
9010 INITIALIZED is 1 if the decl has an initializer.
9011
9012 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9013 normal attributes in TREE_PURPOSE, or NULL_TREE.
9014
9015 In the TYPENAME case, DECLARATOR is really an absolute declarator.
9016 It may also be so in the PARM case, for a prototype where the
9017 argument type is specified but not the name.
9018
9019 This function is where the complicated C meanings of `static'
9020 and `extern' are interpreted.
9021
9022 For C++, if there is any monkey business to do, the function which
9023 calls this one must do it, i.e., prepending instance variables,
9024 renaming overloaded function names, etc.
9025
9026 Note that for this C++, it is an error to define a method within a class
9027 which does not belong to that class.
9028
9029 Except in the case where SCOPE_REFs are implicitly known (such as
9030 methods within a class being redundantly qualified),
9031 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9032 (class_name::decl_name). The caller must also deal with this.
9033
9034 If a constructor or destructor is seen, and the context is FIELD,
9035 then the type gains the attribute TREE_HAS_x. If such a declaration
9036 is erroneous, NULL_TREE is returned.
9037
9038 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
9039 function, these are the qualifiers to give to the `this' pointer.
9040
9041 May return void_type_node if the declarator turned out to be a friend.
9042 See grokfield for details. */
9043
9044 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
9045
9046 tree
9047 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9048 tree declspecs;
9049 tree declarator;
9050 enum decl_context decl_context;
9051 int initialized;
9052 tree attrlist;
9053 {
9054 RID_BIT_TYPE specbits;
9055 int nclasses = 0;
9056 tree spec;
9057 tree type = NULL_TREE;
9058 int longlong = 0;
9059 int constp;
9060 int restrictp;
9061 int volatilep;
9062 int type_quals;
9063 int virtualp, explicitp, friendp, inlinep, staticp;
9064 int explicit_int = 0;
9065 int explicit_char = 0;
9066 int defaulted_int = 0;
9067 tree typedef_decl = NULL_TREE;
9068 const char *name;
9069 tree typedef_type = NULL_TREE;
9070 int funcdef_flag = 0;
9071 enum tree_code innermost_code = ERROR_MARK;
9072 int bitfield = 0;
9073 #if 0
9074 /* See the code below that used this. */
9075 tree decl_machine_attr = NULL_TREE;
9076 #endif
9077 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9078 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9079 tree init = NULL_TREE;
9080
9081 /* Keep track of what sort of function is being processed
9082 so that we can warn about default return values, or explicit
9083 return values which do not match prescribed defaults. */
9084 enum return_types return_type = return_normal;
9085
9086 tree dname = NULL_TREE;
9087 tree ctype = current_class_type;
9088 tree ctor_return_type = NULL_TREE;
9089 enum overload_flags flags = NO_SPECIAL;
9090 tree quals = NULL_TREE;
9091 tree raises = NULL_TREE;
9092 int template_count = 0;
9093 tree in_namespace = NULL_TREE;
9094 tree inner_attrs;
9095 int ignore_attrs;
9096
9097 RIDBIT_RESET_ALL (specbits);
9098 if (decl_context == FUNCDEF)
9099 funcdef_flag = 1, decl_context = NORMAL;
9100 else if (decl_context == MEMFUNCDEF)
9101 funcdef_flag = -1, decl_context = FIELD;
9102 else if (decl_context == BITFIELD)
9103 bitfield = 1, decl_context = FIELD;
9104
9105 /* Look inside a declarator for the name being declared
9106 and get it as a string, for an error message. */
9107 {
9108 tree *next = &declarator;
9109 register tree decl;
9110 name = NULL;
9111
9112 while (next && *next)
9113 {
9114 decl = *next;
9115 switch (TREE_CODE (decl))
9116 {
9117 case TREE_LIST:
9118 /* For attributes. */
9119 next = &TREE_VALUE (decl);
9120 break;
9121
9122 case COND_EXPR:
9123 ctype = NULL_TREE;
9124 next = &TREE_OPERAND (decl, 0);
9125 break;
9126
9127 case BIT_NOT_EXPR: /* For C++ destructors! */
9128 {
9129 tree name = TREE_OPERAND (decl, 0);
9130 tree rename = NULL_TREE;
9131
9132 my_friendly_assert (flags == NO_SPECIAL, 152);
9133 flags = DTOR_FLAG;
9134 return_type = return_dtor;
9135 if (TREE_CODE (name) == TYPE_DECL)
9136 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9137 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9138 if (ctype == NULL_TREE)
9139 {
9140 if (current_class_type == NULL_TREE)
9141 {
9142 error ("destructors must be member functions");
9143 flags = NO_SPECIAL;
9144 }
9145 else
9146 {
9147 tree t = constructor_name (current_class_name);
9148 if (t != name)
9149 rename = t;
9150 }
9151 }
9152 else
9153 {
9154 tree t = constructor_name (ctype);
9155 if (t != name)
9156 rename = t;
9157 }
9158
9159 if (rename)
9160 {
9161 cp_error ("destructor `%T' must match class name `%T'",
9162 name, rename);
9163 TREE_OPERAND (decl, 0) = rename;
9164 }
9165 next = &name;
9166 }
9167 break;
9168
9169 case ADDR_EXPR: /* C++ reference declaration */
9170 /* Fall through. */
9171 case ARRAY_REF:
9172 case INDIRECT_REF:
9173 ctype = NULL_TREE;
9174 innermost_code = TREE_CODE (decl);
9175 next = &TREE_OPERAND (decl, 0);
9176 break;
9177
9178 case CALL_EXPR:
9179 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
9180 {
9181 /* This is actually a variable declaration using
9182 constructor syntax. We need to call start_decl and
9183 cp_finish_decl so we can get the variable
9184 initialized... */
9185
9186 tree attributes, prefix_attributes;
9187
9188 *next = TREE_OPERAND (decl, 0);
9189 init = CALL_DECLARATOR_PARMS (decl);
9190
9191 if (attrlist)
9192 {
9193 attributes = TREE_PURPOSE (attrlist);
9194 prefix_attributes = TREE_VALUE (attrlist);
9195 }
9196 else
9197 {
9198 attributes = NULL_TREE;
9199 prefix_attributes = NULL_TREE;
9200 }
9201
9202 decl = start_decl (declarator, declspecs, 1,
9203 attributes, prefix_attributes);
9204 if (decl)
9205 {
9206 /* Look for __unused__ attribute */
9207 if (TREE_USED (TREE_TYPE (decl)))
9208 TREE_USED (decl) = 1;
9209 finish_decl (decl, init, NULL_TREE);
9210 }
9211 else
9212 cp_error ("invalid declarator");
9213 return 0;
9214 }
9215 innermost_code = TREE_CODE (decl);
9216 if (decl_context == FIELD && ctype == NULL_TREE)
9217 ctype = current_class_type;
9218 if (ctype
9219 && TREE_OPERAND (decl, 0)
9220 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9221 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9222 == constructor_name_full (ctype))
9223 || (DECL_NAME (TREE_OPERAND (decl, 0))
9224 == constructor_name (ctype)))))
9225 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9226 next = &TREE_OPERAND (decl, 0);
9227 decl = *next;
9228 if (ctype != NULL_TREE
9229 && decl != NULL_TREE && flags != DTOR_FLAG
9230 && decl == constructor_name (ctype))
9231 {
9232 return_type = return_ctor;
9233 ctor_return_type = ctype;
9234 }
9235 ctype = NULL_TREE;
9236 break;
9237
9238 case TEMPLATE_ID_EXPR:
9239 {
9240 tree fns = TREE_OPERAND (decl, 0);
9241
9242 if (TREE_CODE (fns) == LOOKUP_EXPR)
9243 fns = TREE_OPERAND (fns, 0);
9244
9245 dname = fns;
9246 if (TREE_CODE (dname) == COMPONENT_REF)
9247 dname = TREE_OPERAND (dname, 1);
9248 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9249 {
9250 my_friendly_assert (is_overloaded_fn (dname),
9251 19990331);
9252 dname = DECL_NAME (get_first_fn (dname));
9253 }
9254 }
9255 /* Fall through. */
9256
9257 case IDENTIFIER_NODE:
9258 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9259 dname = decl;
9260
9261 next = 0;
9262
9263 if (is_rid (dname))
9264 {
9265 cp_error ("declarator-id missing; using reserved word `%D'",
9266 dname);
9267 name = IDENTIFIER_POINTER (dname);
9268 }
9269 if (! IDENTIFIER_OPNAME_P (dname)
9270 /* GNU/Linux headers use '__op'. Arrgh. */
9271 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9272 name = IDENTIFIER_POINTER (dname);
9273 else
9274 {
9275 if (IDENTIFIER_TYPENAME_P (dname))
9276 {
9277 my_friendly_assert (flags == NO_SPECIAL, 154);
9278 flags = TYPENAME_FLAG;
9279 ctor_return_type = TREE_TYPE (dname);
9280 return_type = return_conversion;
9281 }
9282 name = operator_name_string (dname);
9283 }
9284 break;
9285
9286 /* C++ extension */
9287 case SCOPE_REF:
9288 {
9289 /* Perform error checking, and decide on a ctype. */
9290 tree cname = TREE_OPERAND (decl, 0);
9291 if (cname == NULL_TREE)
9292 ctype = NULL_TREE;
9293 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9294 {
9295 ctype = NULL_TREE;
9296 in_namespace = TREE_OPERAND (decl, 0);
9297 TREE_OPERAND (decl, 0) = NULL_TREE;
9298 }
9299 else if (! is_aggr_type (cname, 1))
9300 TREE_OPERAND (decl, 0) = NULL_TREE;
9301 /* Must test TREE_OPERAND (decl, 1), in case user gives
9302 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9303 else if (TREE_OPERAND (decl, 1)
9304 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9305 ctype = cname;
9306 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9307 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9308 {
9309 cp_error ("`%T::%D' is not a valid declarator", cname,
9310 TREE_OPERAND (decl, 1));
9311 cp_error (" perhaps you want `typename %T::%D' to make it a type",
9312 cname, TREE_OPERAND (decl, 1));
9313 return void_type_node;
9314 }
9315 else if (ctype == NULL_TREE)
9316 ctype = cname;
9317 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9318 TREE_OPERAND (decl, 0) = ctype;
9319 else
9320 {
9321 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9322 {
9323 cp_error ("type `%T' is not derived from type `%T'",
9324 cname, ctype);
9325 TREE_OPERAND (decl, 0) = NULL_TREE;
9326 }
9327 else
9328 ctype = cname;
9329 }
9330
9331 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9332 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9333 == constructor_name_full (ctype))
9334 || (DECL_NAME (TREE_OPERAND (decl, 1))
9335 == constructor_name (ctype))))
9336 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9337 next = &TREE_OPERAND (decl, 1);
9338 decl = *next;
9339 if (ctype)
9340 {
9341 if (TREE_CODE (decl) == IDENTIFIER_NODE
9342 && constructor_name (ctype) == decl)
9343 {
9344 return_type = return_ctor;
9345 ctor_return_type = ctype;
9346 }
9347 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9348 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9349 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9350 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9351 {
9352 return_type = return_dtor;
9353 ctor_return_type = ctype;
9354 flags = DTOR_FLAG;
9355 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9356 next = &TREE_OPERAND (decl, 0);
9357 }
9358 }
9359 }
9360 break;
9361
9362 case ERROR_MARK:
9363 next = 0;
9364 break;
9365
9366 case TYPE_DECL:
9367 /* Parse error puts this typespec where
9368 a declarator should go. */
9369 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9370 if (TREE_TYPE (decl) == current_class_type)
9371 cp_error (" perhaps you want `%T' for a constructor",
9372 current_class_name);
9373 dname = DECL_NAME (decl);
9374 name = IDENTIFIER_POINTER (dname);
9375
9376 /* Avoid giving two errors for this. */
9377 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9378
9379 declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9380 declspecs);
9381 *next = dname;
9382 next = 0;
9383 break;
9384
9385 default:
9386 cp_compiler_error ("`%D' as declarator", decl);
9387 return 0; /* We used to do a 155 abort here. */
9388 }
9389 }
9390 if (name == NULL)
9391 name = "type name";
9392 }
9393
9394 /* A function definition's declarator must have the form of
9395 a function declarator. */
9396
9397 if (funcdef_flag && innermost_code != CALL_EXPR)
9398 return 0;
9399
9400 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9401 && innermost_code != CALL_EXPR
9402 && ! (ctype && declspecs == NULL_TREE))
9403 {
9404 cp_error ("declaration of `%D' as non-function", dname);
9405 return void_type_node;
9406 }
9407
9408 /* Anything declared one level down from the top level
9409 must be one of the parameters of a function
9410 (because the body is at least two levels down). */
9411
9412 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9413 by not allowing C++ class definitions to specify their parameters
9414 with xdecls (must be spec.d in the parmlist).
9415
9416 Since we now wait to push a class scope until we are sure that
9417 we are in a legitimate method context, we must set oldcname
9418 explicitly (since current_class_name is not yet alive).
9419
9420 We also want to avoid calling this a PARM if it is in a namespace. */
9421
9422 if (decl_context == NORMAL && !toplevel_bindings_p ())
9423 {
9424 struct binding_level *b = current_binding_level;
9425 current_binding_level = b->level_chain;
9426 if (current_binding_level != 0 && toplevel_bindings_p ())
9427 decl_context = PARM;
9428 current_binding_level = b;
9429 }
9430
9431 /* Look through the decl specs and record which ones appear.
9432 Some typespecs are defined as built-in typenames.
9433 Others, the ones that are modifiers of other types,
9434 are represented by bits in SPECBITS: set the bits for
9435 the modifiers that appear. Storage class keywords are also in SPECBITS.
9436
9437 If there is a typedef name or a type, store the type in TYPE.
9438 This includes builtin typedefs such as `int'.
9439
9440 Set EXPLICIT_INT if the type is `int' or `char' and did not
9441 come from a user typedef.
9442
9443 Set LONGLONG if `long' is mentioned twice.
9444
9445 For C++, constructors and destructors have their own fast treatment. */
9446
9447 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9448 {
9449 register int i;
9450 register tree id;
9451
9452 /* Certain parse errors slip through. For example,
9453 `int class;' is not caught by the parser. Try
9454 weakly to recover here. */
9455 if (TREE_CODE (spec) != TREE_LIST)
9456 return 0;
9457
9458 id = TREE_VALUE (spec);
9459
9460 if (TREE_CODE (id) == IDENTIFIER_NODE)
9461 {
9462 if (id == ridpointers[(int) RID_INT]
9463 || id == ridpointers[(int) RID_CHAR]
9464 || id == ridpointers[(int) RID_BOOL]
9465 || id == ridpointers[(int) RID_WCHAR])
9466 {
9467 if (type)
9468 {
9469 if (id == ridpointers[(int) RID_BOOL])
9470 error ("`bool' is now a keyword");
9471 else
9472 cp_error ("extraneous `%T' ignored", id);
9473 }
9474 else
9475 {
9476 if (id == ridpointers[(int) RID_INT])
9477 explicit_int = 1;
9478 else if (id == ridpointers[(int) RID_CHAR])
9479 explicit_char = 1;
9480 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9481 }
9482 goto found;
9483 }
9484 /* C++ aggregate types. */
9485 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9486 {
9487 if (type)
9488 cp_error ("multiple declarations `%T' and `%T'", type, id);
9489 else
9490 type = IDENTIFIER_TYPE_VALUE (id);
9491 goto found;
9492 }
9493
9494 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9495 {
9496 if (ridpointers[i] == id)
9497 {
9498 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9499 {
9500 if (pedantic && ! in_system_header && warn_long_long)
9501 pedwarn ("ANSI C++ does not support `long long'");
9502 if (longlong)
9503 error ("`long long long' is too long for GCC");
9504 else
9505 longlong = 1;
9506 }
9507 else if (RIDBIT_SETP (i, specbits))
9508 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9509 RIDBIT_SET (i, specbits);
9510 goto found;
9511 }
9512 }
9513 }
9514 /* C++ aggregate types. */
9515 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9516 {
9517 if (type)
9518 cp_error ("multiple declarations `%T' and `%T'", type,
9519 TREE_TYPE (id));
9520 else
9521 {
9522 type = TREE_TYPE (id);
9523 TREE_VALUE (spec) = type;
9524 }
9525 goto found;
9526 }
9527 if (type)
9528 error ("two or more data types in declaration of `%s'", name);
9529 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9530 {
9531 register tree t = lookup_name (id, 1);
9532 if (!t || TREE_CODE (t) != TYPE_DECL)
9533 error ("`%s' fails to be a typedef or built in type",
9534 IDENTIFIER_POINTER (id));
9535 else
9536 {
9537 type = TREE_TYPE (t);
9538 #if 0
9539 /* See the code below that used this. */
9540 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9541 #endif
9542 typedef_decl = t;
9543 }
9544 }
9545 else if (id != error_mark_node)
9546 /* Can't change CLASS nodes into RECORD nodes here! */
9547 type = id;
9548
9549 found: ;
9550 }
9551
9552 typedef_type = type;
9553
9554 /* No type at all: default to `int', and set DEFAULTED_INT
9555 because it was not a user-defined typedef. */
9556
9557 if (type == NULL_TREE
9558 && (RIDBIT_SETP (RID_SIGNED, specbits)
9559 || RIDBIT_SETP (RID_UNSIGNED, specbits)
9560 || RIDBIT_SETP (RID_LONG, specbits)
9561 || RIDBIT_SETP (RID_SHORT, specbits)))
9562 {
9563 /* These imply 'int'. */
9564 type = integer_type_node;
9565 defaulted_int = 1;
9566 }
9567
9568 if (type == NULL_TREE)
9569 {
9570 explicit_int = -1;
9571 if (return_type == return_dtor)
9572 type = void_type_node;
9573 else if (return_type == return_ctor)
9574 type = build_pointer_type (ctor_return_type);
9575 else if (return_type == return_conversion)
9576 type = ctor_return_type;
9577 else
9578 {
9579 /* We handle `main' specially here, because 'main () { }' is so
9580 common. With no options, it is allowed. With -Wreturn-type,
9581 it is a warning. It is only an error with -pedantic-errors. */
9582 int is_main = (funcdef_flag
9583 && MAIN_NAME_P (dname)
9584 && ctype == NULL_TREE
9585 && in_namespace == NULL_TREE
9586 && current_namespace == global_namespace);
9587
9588 if (in_system_header || flag_ms_extensions)
9589 /* Allow it, sigh. */;
9590 else if (pedantic || ! is_main)
9591 cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9592 dname);
9593 else if (warn_return_type)
9594 cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9595 dname);
9596
9597 type = integer_type_node;
9598 }
9599 }
9600 else if (return_type == return_dtor)
9601 {
9602 error ("return type specification for destructor invalid");
9603 type = void_type_node;
9604 }
9605 else if (return_type == return_ctor)
9606 {
9607 error ("return type specification for constructor invalid");
9608 type = build_pointer_type (ctor_return_type);
9609 }
9610 else if (return_type == return_conversion)
9611 {
9612 if (!same_type_p (type, ctor_return_type))
9613 cp_error ("operator `%T' declared to return `%T'",
9614 ctor_return_type, type);
9615 else
9616 cp_pedwarn ("return type specified for `operator %T'",
9617 ctor_return_type);
9618
9619 type = ctor_return_type;
9620 }
9621
9622 ctype = NULL_TREE;
9623
9624 /* Now process the modifiers that were specified
9625 and check for invalid combinations. */
9626
9627 /* Long double is a special combination. */
9628
9629 if (RIDBIT_SETP (RID_LONG, specbits)
9630 && TYPE_MAIN_VARIANT (type) == double_type_node)
9631 {
9632 RIDBIT_RESET (RID_LONG, specbits);
9633 type = build_qualified_type (long_double_type_node,
9634 CP_TYPE_QUALS (type));
9635 }
9636
9637 /* Check all other uses of type modifiers. */
9638
9639 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9640 || RIDBIT_SETP (RID_SIGNED, specbits)
9641 || RIDBIT_SETP (RID_LONG, specbits)
9642 || RIDBIT_SETP (RID_SHORT, specbits))
9643 {
9644 int ok = 0;
9645
9646 if (TREE_CODE (type) == REAL_TYPE)
9647 error ("short, signed or unsigned invalid for `%s'", name);
9648 else if (TREE_CODE (type) != INTEGER_TYPE)
9649 error ("long, short, signed or unsigned invalid for `%s'", name);
9650 else if (RIDBIT_SETP (RID_LONG, specbits)
9651 && RIDBIT_SETP (RID_SHORT, specbits))
9652 error ("long and short specified together for `%s'", name);
9653 else if ((RIDBIT_SETP (RID_LONG, specbits)
9654 || RIDBIT_SETP (RID_SHORT, specbits))
9655 && explicit_char)
9656 error ("long or short specified with char for `%s'", name);
9657 else if ((RIDBIT_SETP (RID_LONG, specbits)
9658 || RIDBIT_SETP (RID_SHORT, specbits))
9659 && TREE_CODE (type) == REAL_TYPE)
9660 error ("long or short specified with floating type for `%s'", name);
9661 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9662 && RIDBIT_SETP (RID_UNSIGNED, specbits))
9663 error ("signed and unsigned given together for `%s'", name);
9664 else
9665 {
9666 ok = 1;
9667 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9668 {
9669 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9670 name);
9671 if (flag_pedantic_errors)
9672 ok = 0;
9673 }
9674 }
9675
9676 /* Discard the type modifiers if they are invalid. */
9677 if (! ok)
9678 {
9679 RIDBIT_RESET (RID_UNSIGNED, specbits);
9680 RIDBIT_RESET (RID_SIGNED, specbits);
9681 RIDBIT_RESET (RID_LONG, specbits);
9682 RIDBIT_RESET (RID_SHORT, specbits);
9683 longlong = 0;
9684 }
9685 }
9686
9687 if (RIDBIT_SETP (RID_COMPLEX, specbits)
9688 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9689 {
9690 error ("complex invalid for `%s'", name);
9691 RIDBIT_RESET (RID_COMPLEX, specbits);
9692 }
9693
9694 /* Decide whether an integer type is signed or not.
9695 Optionally treat bitfields as signed by default. */
9696 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9697 /* [class.bit]
9698
9699 It is implementation-defined whether a plain (neither
9700 explicitly signed or unsigned) char, short, int, or long
9701 bit-field is signed or unsigned.
9702
9703 Naturally, we extend this to long long as well. Note that
9704 this does not include wchar_t. */
9705 || (bitfield && !flag_signed_bitfields
9706 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9707 /* A typedef for plain `int' without `signed' can be
9708 controlled just like plain `int', but a typedef for
9709 `signed int' cannot be so controlled. */
9710 && !(typedef_decl
9711 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9712 && (TREE_CODE (type) == INTEGER_TYPE
9713 || TREE_CODE (type) == CHAR_TYPE)
9714 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9715 {
9716 if (longlong)
9717 type = long_long_unsigned_type_node;
9718 else if (RIDBIT_SETP (RID_LONG, specbits))
9719 type = long_unsigned_type_node;
9720 else if (RIDBIT_SETP (RID_SHORT, specbits))
9721 type = short_unsigned_type_node;
9722 else if (type == char_type_node)
9723 type = unsigned_char_type_node;
9724 else if (typedef_decl)
9725 type = unsigned_type (type);
9726 else
9727 type = unsigned_type_node;
9728 }
9729 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9730 && type == char_type_node)
9731 type = signed_char_type_node;
9732 else if (longlong)
9733 type = long_long_integer_type_node;
9734 else if (RIDBIT_SETP (RID_LONG, specbits))
9735 type = long_integer_type_node;
9736 else if (RIDBIT_SETP (RID_SHORT, specbits))
9737 type = short_integer_type_node;
9738
9739 if (RIDBIT_SETP (RID_COMPLEX, specbits))
9740 {
9741 /* If we just have "complex", it is equivalent to
9742 "complex double", but if any modifiers at all are specified it is
9743 the complex form of TYPE. E.g, "complex short" is
9744 "complex short int". */
9745
9746 if (defaulted_int && ! longlong
9747 && ! (RIDBIT_SETP (RID_LONG, specbits)
9748 || RIDBIT_SETP (RID_SHORT, specbits)
9749 || RIDBIT_SETP (RID_SIGNED, specbits)
9750 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9751 type = complex_double_type_node;
9752 else if (type == integer_type_node)
9753 type = complex_integer_type_node;
9754 else if (type == float_type_node)
9755 type = complex_float_type_node;
9756 else if (type == double_type_node)
9757 type = complex_double_type_node;
9758 else if (type == long_double_type_node)
9759 type = complex_long_double_type_node;
9760 else
9761 type = build_complex_type (type);
9762 }
9763
9764 if (return_type == return_conversion
9765 && (RIDBIT_SETP (RID_CONST, specbits)
9766 || RIDBIT_SETP (RID_VOLATILE, specbits)
9767 || RIDBIT_SETP (RID_RESTRICT, specbits)))
9768 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9769 ctor_return_type);
9770
9771 /* Set CONSTP if this declaration is `const', whether by
9772 explicit specification or via a typedef.
9773 Likewise for VOLATILEP. */
9774
9775 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9776 restrictp =
9777 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9778 volatilep =
9779 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9780 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9781 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9782 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9783 type = cp_build_qualified_type (type, type_quals);
9784 staticp = 0;
9785 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9786 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9787 RIDBIT_RESET (RID_VIRTUAL, specbits);
9788 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9789 RIDBIT_RESET (RID_EXPLICIT, specbits);
9790
9791 if (RIDBIT_SETP (RID_STATIC, specbits))
9792 staticp = 1 + (decl_context == FIELD);
9793
9794 if (virtualp && staticp == 2)
9795 {
9796 cp_error ("member `%D' cannot be declared both virtual and static",
9797 dname);
9798 staticp = 0;
9799 }
9800 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9801 RIDBIT_RESET (RID_FRIEND, specbits);
9802
9803 /* $7.1.2, Function specifiers */
9804 if (friendp && explicitp)
9805 error ("only declarations of constructors can be `explicit'");
9806
9807 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9808 {
9809 if (decl_context == PARM)
9810 {
9811 error ("non-member `%s' cannot be declared `mutable'", name);
9812 RIDBIT_RESET (RID_MUTABLE, specbits);
9813 }
9814 else if (friendp || decl_context == TYPENAME)
9815 {
9816 error ("non-object member `%s' cannot be declared `mutable'", name);
9817 RIDBIT_RESET (RID_MUTABLE, specbits);
9818 }
9819 }
9820
9821 /* Warn if two storage classes are given. Default to `auto'. */
9822
9823 if (RIDBIT_ANY_SET (specbits))
9824 {
9825 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9826 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9827 if (decl_context == PARM && nclasses > 0)
9828 error ("storage class specifiers invalid in parameter declarations");
9829 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9830 {
9831 if (decl_context == PARM)
9832 error ("typedef declaration invalid in parameter declaration");
9833 nclasses++;
9834 }
9835 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9836 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9837 }
9838
9839 /* Give error if `virtual' is used outside of class declaration. */
9840 if (virtualp
9841 && (current_class_name == NULL_TREE || decl_context != FIELD))
9842 {
9843 error ("virtual outside class declaration");
9844 virtualp = 0;
9845 }
9846 if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9847 {
9848 error ("only members can be declared mutable");
9849 RIDBIT_RESET (RID_MUTABLE, specbits);
9850 }
9851
9852 /* Static anonymous unions are dealt with here. */
9853 if (staticp && decl_context == TYPENAME
9854 && TREE_CODE (declspecs) == TREE_LIST
9855 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9856 decl_context = FIELD;
9857
9858 /* Warn about storage classes that are invalid for certain
9859 kinds of declarations (parameters, typenames, etc.). */
9860
9861 if (nclasses > 1)
9862 error ("multiple storage classes in declaration of `%s'", name);
9863 else if (decl_context != NORMAL && nclasses > 0)
9864 {
9865 if ((decl_context == PARM || decl_context == CATCHPARM)
9866 && (RIDBIT_SETP (RID_REGISTER, specbits)
9867 || RIDBIT_SETP (RID_AUTO, specbits)))
9868 ;
9869 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9870 ;
9871 else if (decl_context == FIELD
9872 /* C++ allows static class elements */
9873 && RIDBIT_SETP (RID_STATIC, specbits))
9874 /* C++ also allows inlines and signed and unsigned elements,
9875 but in those cases we don't come in here. */
9876 ;
9877 else
9878 {
9879 if (decl_context == FIELD)
9880 {
9881 tree tmp = NULL_TREE;
9882 register int op = 0;
9883
9884 if (declarator)
9885 {
9886 /* Avoid trying to get an operand off an identifier node. */
9887 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9888 tmp = declarator;
9889 else
9890 tmp = TREE_OPERAND (declarator, 0);
9891 op = IDENTIFIER_OPNAME_P (tmp);
9892 }
9893 error ("storage class specified for %s `%s'",
9894 op ? "member operator" : "field",
9895 op ? operator_name_string (tmp) : name);
9896 }
9897 else
9898 error (((decl_context == PARM || decl_context == CATCHPARM)
9899 ? "storage class specified for parameter `%s'"
9900 : "storage class specified for typename"), name);
9901 RIDBIT_RESET (RID_REGISTER, specbits);
9902 RIDBIT_RESET (RID_AUTO, specbits);
9903 RIDBIT_RESET (RID_EXTERN, specbits);
9904 }
9905 }
9906 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9907 {
9908 if (toplevel_bindings_p ())
9909 {
9910 /* It's common practice (and completely valid) to have a const
9911 be initialized and declared extern. */
9912 if (!(type_quals & TYPE_QUAL_CONST))
9913 warning ("`%s' initialized and declared `extern'", name);
9914 }
9915 else
9916 error ("`%s' has both `extern' and initializer", name);
9917 }
9918 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9919 && ! toplevel_bindings_p ())
9920 error ("nested function `%s' declared `extern'", name);
9921 else if (toplevel_bindings_p ())
9922 {
9923 if (RIDBIT_SETP (RID_AUTO, specbits))
9924 error ("top-level declaration of `%s' specifies `auto'", name);
9925 }
9926
9927 if (nclasses > 0 && friendp)
9928 error ("storage class specifiers invalid in friend function declarations");
9929
9930 /* Now figure out the structure of the declarator proper.
9931 Descend through it, creating more complex types, until we reach
9932 the declared identifier (or NULL_TREE, in an absolute declarator). */
9933
9934 inner_attrs = NULL_TREE;
9935 ignore_attrs = 0;
9936
9937 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9938 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9939 {
9940 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9941 an INDIRECT_REF (for *...),
9942 a CALL_EXPR (for ...(...)),
9943 an identifier (for the name being declared)
9944 or a null pointer (for the place in an absolute declarator
9945 where the name was omitted).
9946 For the last two cases, we have just exited the loop.
9947
9948 For C++ it could also be
9949 a SCOPE_REF (for class :: ...). In this case, we have converted
9950 sensible names to types, and those are the values we use to
9951 qualify the member name.
9952 an ADDR_EXPR (for &...),
9953 a BIT_NOT_EXPR (for destructors)
9954
9955 At this point, TYPE is the type of elements of an array,
9956 or for a function to return, or for a pointer to point to.
9957 After this sequence of ifs, TYPE is the type of the
9958 array or function or pointer, and DECLARATOR has had its
9959 outermost layer removed. */
9960
9961 if (type == error_mark_node)
9962 {
9963 if (TREE_CODE (declarator) == SCOPE_REF)
9964 declarator = TREE_OPERAND (declarator, 1);
9965 else
9966 declarator = TREE_OPERAND (declarator, 0);
9967 continue;
9968 }
9969 if (quals != NULL_TREE
9970 && (declarator == NULL_TREE
9971 || TREE_CODE (declarator) != SCOPE_REF))
9972 {
9973 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9974 ctype = TYPE_METHOD_BASETYPE (type);
9975 if (ctype != NULL_TREE)
9976 {
9977 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9978 ctype = grok_method_quals (ctype, dummy, quals);
9979 type = TREE_TYPE (dummy);
9980 quals = NULL_TREE;
9981 }
9982 }
9983
9984 /* See the comment for the TREE_LIST case, below. */
9985 if (ignore_attrs)
9986 ignore_attrs = 0;
9987 else if (inner_attrs)
9988 {
9989 decl_attributes (type, inner_attrs, NULL_TREE);
9990 inner_attrs = NULL_TREE;
9991 }
9992
9993 switch (TREE_CODE (declarator))
9994 {
9995 case TREE_LIST:
9996 {
9997 /* We encode a declarator with embedded attributes using
9998 a TREE_LIST. The attributes apply to the declarator
9999 directly inside them, so we have to skip an iteration
10000 before applying them to the type. If the declarator just
10001 inside is the declarator-id, we apply the attrs to the
10002 decl itself. */
10003 inner_attrs = TREE_PURPOSE (declarator);
10004 ignore_attrs = 1;
10005 declarator = TREE_VALUE (declarator);
10006 }
10007 break;
10008
10009 case ARRAY_REF:
10010 {
10011 register tree itype = NULL_TREE;
10012 register tree size = TREE_OPERAND (declarator, 1);
10013 /* The index is a signed object `sizetype' bits wide. */
10014 tree index_type = signed_type (sizetype);
10015
10016 declarator = TREE_OPERAND (declarator, 0);
10017
10018 /* Check for some types that there cannot be arrays of. */
10019
10020 if (TREE_CODE (type) == VOID_TYPE)
10021 {
10022 cp_error ("declaration of `%D' as array of voids", dname);
10023 type = error_mark_node;
10024 }
10025
10026 if (TREE_CODE (type) == FUNCTION_TYPE)
10027 {
10028 cp_error ("declaration of `%D' as array of functions", dname);
10029 type = error_mark_node;
10030 }
10031
10032 /* ARM $8.4.3: Since you can't have a pointer to a reference,
10033 you can't have arrays of references. If we allowed them,
10034 then we'd be saying x[i] is valid for an array x, but
10035 then you'd have to ask: what does `*(x + i)' mean? */
10036 if (TREE_CODE (type) == REFERENCE_TYPE)
10037 {
10038 if (decl_context == TYPENAME)
10039 cp_error ("cannot make arrays of references");
10040 else
10041 cp_error ("declaration of `%D' as array of references",
10042 dname);
10043 type = error_mark_node;
10044 }
10045
10046 if (TREE_CODE (type) == OFFSET_TYPE)
10047 {
10048 cp_error ("declaration of `%D' as array of data members",
10049 dname);
10050 type = error_mark_node;
10051 }
10052
10053 if (TREE_CODE (type) == METHOD_TYPE)
10054 {
10055 cp_error ("declaration of `%D' as array of function members",
10056 dname);
10057 type = error_mark_node;
10058 }
10059
10060 if (size == error_mark_node)
10061 type = error_mark_node;
10062 else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
10063 {
10064 /* [dcl.array]
10065
10066 the constant expressions that specify the bounds of
10067 the arrays can be omitted only for the first member
10068 of the sequence. */
10069 cp_error ("declaration of `%D' as multidimensional array",
10070 dname);
10071 cp_error ("must have bounds for all dimensions except the first");
10072 type = error_mark_node;
10073 }
10074
10075 if (type == error_mark_node)
10076 continue;
10077
10078 /* VC++ spells a zero-sized array with []. */
10079 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10080 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10081 size = integer_zero_node;
10082
10083 if (size)
10084 {
10085 /* Must suspend_momentary here because the index
10086 type may need to live until the end of the function.
10087 For example, it is used in the declaration of a
10088 variable which requires destructing at the end of
10089 the function; then build_vec_delete will need this
10090 value. */
10091 int yes = suspend_momentary ();
10092 /* Might be a cast. */
10093 if (TREE_CODE (size) == NOP_EXPR
10094 && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
10095 size = TREE_OPERAND (size, 0);
10096 if (TREE_READONLY_DECL_P (size))
10097 size = decl_constant_value (size);
10098
10099 /* If this involves a template parameter, it will be a
10100 constant at instantiation time, but we don't know
10101 what the value is yet. Even if no template
10102 parameters are involved, we may an expression that
10103 is not a constant; we don't even simplify `1 + 2'
10104 when processing a template. */
10105 if (processing_template_decl)
10106 {
10107 /* Resolve a qualified reference to an enumerator or
10108 static const data member of ours. */
10109 if (TREE_CODE (size) == SCOPE_REF
10110 && TREE_OPERAND (size, 0) == current_class_type)
10111 {
10112 tree t = lookup_field (current_class_type,
10113 TREE_OPERAND (size, 1), 0, 0);
10114 if (t)
10115 size = t;
10116 }
10117
10118 itype = build_index_type (build_min
10119 (MINUS_EXPR, sizetype, size, integer_one_node));
10120 goto dont_grok_size;
10121 }
10122
10123 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
10124 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
10125 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
10126 {
10127 cp_error ("size of array `%D' has non-integer type",
10128 dname);
10129 size = integer_one_node;
10130 }
10131 if (pedantic && integer_zerop (size))
10132 cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
10133 if (TREE_CONSTANT (size))
10134 {
10135 int old_flag_pedantic_errors = flag_pedantic_errors;
10136 int old_pedantic = pedantic;
10137 pedantic = flag_pedantic_errors = 1;
10138 /* Always give overflow errors on array subscripts. */
10139 constant_expression_warning (size);
10140 pedantic = old_pedantic;
10141 flag_pedantic_errors = old_flag_pedantic_errors;
10142 if (INT_CST_LT (size, integer_zero_node))
10143 {
10144 cp_error ("size of array `%D' is negative", dname);
10145 size = integer_one_node;
10146 }
10147 }
10148 else
10149 {
10150 if (pedantic)
10151 {
10152 if (dname)
10153 cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10154 dname);
10155 else
10156 cp_pedwarn ("ANSI C++ forbids variable-size array");
10157 }
10158 }
10159
10160 itype
10161 = fold (build_binary_op (MINUS_EXPR,
10162 cp_convert (index_type, size),
10163 cp_convert (index_type,
10164 integer_one_node)));
10165 if (! TREE_CONSTANT (itype))
10166 itype = variable_size (itype);
10167 else if (TREE_OVERFLOW (itype))
10168 {
10169 error ("overflow in array dimension");
10170 TREE_OVERFLOW (itype) = 0;
10171 }
10172
10173 /* If we're a parm, we need to have a permanent type so
10174 mangling checks for re-use will work right. If both the
10175 element and index types are permanent, the array type
10176 will be, too. */
10177 if (decl_context == PARM
10178 && allocation_temporary_p () && TREE_PERMANENT (type))
10179 {
10180 push_obstacks (&permanent_obstack, &permanent_obstack);
10181 itype = build_index_type (itype);
10182 pop_obstacks ();
10183 }
10184 else
10185 itype = build_index_type (itype);
10186
10187 dont_grok_size:
10188 resume_momentary (yes);
10189 }
10190
10191 type = build_cplus_array_type (type, itype);
10192 ctype = NULL_TREE;
10193 }
10194 break;
10195
10196 case CALL_EXPR:
10197 {
10198 tree arg_types;
10199 int funcdecl_p;
10200 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
10201 tree inner_decl = TREE_OPERAND (declarator, 0);
10202
10203 /* Declaring a function type.
10204 Make sure we have a valid type for the function to return. */
10205
10206 /* We now know that the TYPE_QUALS don't apply to the
10207 decl, but to its return type. */
10208 type_quals = TYPE_UNQUALIFIED;
10209
10210 /* Warn about some types functions can't return. */
10211
10212 if (TREE_CODE (type) == FUNCTION_TYPE)
10213 {
10214 error ("`%s' declared as function returning a function", name);
10215 type = integer_type_node;
10216 }
10217 if (TREE_CODE (type) == ARRAY_TYPE)
10218 {
10219 error ("`%s' declared as function returning an array", name);
10220 type = integer_type_node;
10221 }
10222
10223 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10224 inner_decl = TREE_OPERAND (inner_decl, 1);
10225
10226 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
10227 inner_decl = dname;
10228
10229 /* Pick up type qualifiers which should be applied to `this'. */
10230 quals = CALL_DECLARATOR_QUALS (declarator);
10231
10232 /* Pick up the exception specifications. */
10233 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
10234
10235 /* Say it's a definition only for the CALL_EXPR
10236 closest to the identifier. */
10237 funcdecl_p
10238 = inner_decl
10239 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10240 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
10241 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10242
10243 if (ctype == NULL_TREE
10244 && decl_context == FIELD
10245 && funcdecl_p
10246 && (friendp == 0 || dname == current_class_name))
10247 ctype = current_class_type;
10248
10249 if (ctype && return_type == return_conversion)
10250 TYPE_HAS_CONVERSION (ctype) = 1;
10251 if (ctype && constructor_name (ctype) == dname)
10252 {
10253 /* We are within a class's scope. If our declarator name
10254 is the same as the class name, and we are defining
10255 a function, then it is a constructor/destructor, and
10256 therefore returns a void type. */
10257
10258 if (flags == DTOR_FLAG)
10259 {
10260 /* ANSI C++ June 5 1992 WP 12.4.1. A destructor may
10261 not be declared const or volatile. A destructor
10262 may not be static. */
10263 if (staticp == 2)
10264 error ("destructor cannot be static member function");
10265 if (quals)
10266 {
10267 cp_error ("destructors may not be `%s'",
10268 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10269 quals = NULL_TREE;
10270 }
10271 if (decl_context == FIELD)
10272 {
10273 if (! member_function_or_else (ctype, current_class_type,
10274 "destructor for alien class `%s' cannot be a member"))
10275 return void_type_node;
10276 }
10277 }
10278 else /* It's a constructor. */
10279 {
10280 if (explicitp == 1)
10281 explicitp = 2;
10282 /* ANSI C++ June 5 1992 WP 12.1.2. A constructor may
10283 not be declared const or volatile. A constructor may
10284 not be virtual. A constructor may not be static. */
10285 if (staticp == 2)
10286 error ("constructor cannot be static member function");
10287 if (virtualp)
10288 {
10289 pedwarn ("constructors cannot be declared virtual");
10290 virtualp = 0;
10291 }
10292 if (quals)
10293 {
10294 cp_error ("constructors may not be `%s'",
10295 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10296 quals = NULL_TREE;
10297 }
10298 {
10299 RID_BIT_TYPE tmp_bits;
10300 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10301 RIDBIT_RESET (RID_INLINE, tmp_bits);
10302 RIDBIT_RESET (RID_STATIC, tmp_bits);
10303 if (RIDBIT_ANY_SET (tmp_bits))
10304 error ("return value type specifier for constructor ignored");
10305 }
10306 type = build_pointer_type (ctype);
10307 if (decl_context == FIELD)
10308 {
10309 if (! member_function_or_else (ctype, current_class_type,
10310 "constructor for alien class `%s' cannot be member"))
10311 return void_type_node;
10312 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10313 if (return_type != return_ctor)
10314 return NULL_TREE;
10315 }
10316 }
10317 if (decl_context == FIELD)
10318 staticp = 0;
10319 }
10320 else if (friendp)
10321 {
10322 if (initialized)
10323 error ("can't initialize friend function `%s'", name);
10324 if (virtualp)
10325 {
10326 /* Cannot be both friend and virtual. */
10327 error ("virtual functions cannot be friends");
10328 RIDBIT_RESET (RID_FRIEND, specbits);
10329 friendp = 0;
10330 }
10331 if (decl_context == NORMAL)
10332 error ("friend declaration not in class definition");
10333 if (current_function_decl && funcdef_flag)
10334 cp_error ("can't define friend function `%s' in a local class definition",
10335 name);
10336 }
10337
10338 /* Construct the function type and go to the next
10339 inner layer of declarator. */
10340
10341 declarator = TREE_OPERAND (declarator, 0);
10342
10343 /* FIXME: This is where default args should be fully
10344 processed. */
10345
10346 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10347
10348 if (declarator && flags == DTOR_FLAG)
10349 {
10350 /* A destructor declared in the body of a class will
10351 be represented as a BIT_NOT_EXPR. But, we just
10352 want the underlying IDENTIFIER. */
10353 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10354 declarator = TREE_OPERAND (declarator, 0);
10355
10356 if (strict_prototype == 0 && arg_types == NULL_TREE)
10357 arg_types = void_list_node;
10358 else if (arg_types == NULL_TREE
10359 || arg_types != void_list_node)
10360 {
10361 cp_error ("destructors may not have parameters");
10362 arg_types = void_list_node;
10363 last_function_parms = NULL_TREE;
10364 }
10365 }
10366
10367 /* ANSI says that `const int foo ();'
10368 does not make the function foo const. */
10369 type = build_function_type (type, arg_types);
10370
10371 {
10372 tree t;
10373 for (t = arg_types; t; t = TREE_CHAIN (t))
10374 if (TREE_PURPOSE (t)
10375 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10376 {
10377 add_defarg_fn (type);
10378 break;
10379 }
10380 }
10381 }
10382 break;
10383
10384 case ADDR_EXPR:
10385 case INDIRECT_REF:
10386 /* Filter out pointers-to-references and references-to-references.
10387 We can get these if a TYPE_DECL is used. */
10388
10389 if (TREE_CODE (type) == REFERENCE_TYPE)
10390 {
10391 error ("cannot declare %s to references",
10392 TREE_CODE (declarator) == ADDR_EXPR
10393 ? "references" : "pointers");
10394 declarator = TREE_OPERAND (declarator, 0);
10395 continue;
10396 }
10397
10398 if (TREE_CODE (type) == OFFSET_TYPE
10399 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10400 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10401 {
10402 cp_error ("cannot declare pointer to `%#T' member",
10403 TREE_TYPE (type));
10404 type = TREE_TYPE (type);
10405 }
10406
10407 /* Merge any constancy or volatility into the target type
10408 for the pointer. */
10409
10410 /* We now know that the TYPE_QUALS don't apply to the decl,
10411 but to the target of the pointer. */
10412 type_quals = TYPE_UNQUALIFIED;
10413
10414 if (TREE_CODE (declarator) == ADDR_EXPR)
10415 {
10416 if (TREE_CODE (type) == VOID_TYPE)
10417 error ("invalid type: `void &'");
10418 else
10419 type = build_reference_type (type);
10420 }
10421 else if (TREE_CODE (type) == METHOD_TYPE)
10422 type = build_ptrmemfunc_type (build_pointer_type (type));
10423 else
10424 type = build_pointer_type (type);
10425
10426 /* Process a list of type modifier keywords (such as
10427 const or volatile) that were given inside the `*' or `&'. */
10428
10429 if (TREE_TYPE (declarator))
10430 {
10431 register tree typemodlist;
10432 int erred = 0;
10433
10434 constp = 0;
10435 volatilep = 0;
10436 restrictp = 0;
10437 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10438 typemodlist = TREE_CHAIN (typemodlist))
10439 {
10440 tree qualifier = TREE_VALUE (typemodlist);
10441
10442 if (qualifier == ridpointers[(int) RID_CONST])
10443 constp++;
10444 else if (qualifier == ridpointers[(int) RID_VOLATILE])
10445 volatilep++;
10446 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10447 restrictp++;
10448 else if (!erred)
10449 {
10450 erred = 1;
10451 error ("invalid type modifier within pointer declarator");
10452 }
10453 }
10454 if (constp > 1)
10455 pedwarn ("duplicate `const'");
10456 if (volatilep > 1)
10457 pedwarn ("duplicate `volatile'");
10458 if (restrictp > 1)
10459 pedwarn ("duplicate `restrict'");
10460
10461 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10462 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10463 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10464 if (TREE_CODE (declarator) == ADDR_EXPR
10465 && (constp || volatilep))
10466 {
10467 if (constp)
10468 pedwarn ("discarding `const' applied to a reference");
10469 if (volatilep)
10470 pedwarn ("discarding `volatile' applied to a reference");
10471 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10472 }
10473 type = cp_build_qualified_type (type, type_quals);
10474 }
10475 declarator = TREE_OPERAND (declarator, 0);
10476 ctype = NULL_TREE;
10477 break;
10478
10479 case SCOPE_REF:
10480 {
10481 /* We have converted type names to NULL_TREE if the
10482 name was bogus, or to a _TYPE node, if not.
10483
10484 The variable CTYPE holds the type we will ultimately
10485 resolve to. The code here just needs to build
10486 up appropriate member types. */
10487 tree sname = TREE_OPERAND (declarator, 1);
10488 tree t;
10489
10490 /* Destructors can have their visibilities changed as well. */
10491 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10492 sname = TREE_OPERAND (sname, 0);
10493
10494 if (TREE_COMPLEXITY (declarator) == 0)
10495 /* This needs to be here, in case we are called
10496 multiple times. */ ;
10497 else if (TREE_COMPLEXITY (declarator) == -1)
10498 /* Namespace member. */
10499 pop_decl_namespace ();
10500 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10501 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10502 else if (! IS_AGGR_TYPE_CODE
10503 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10504 ;
10505 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10506 {
10507 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10508 that refer to ctype. They couldn't be resolved earlier
10509 because we hadn't pushed into the class yet.
10510 Example: resolve 'B<T>::type' in
10511 'B<typename B<T>::type> B<T>::f () { }'. */
10512 if (current_template_parms
10513 && uses_template_parms (type)
10514 && uses_template_parms (current_class_type))
10515 {
10516 tree args = current_template_args ();
10517 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10518 }
10519
10520 /* This pop_nested_class corresponds to the
10521 push_nested_class used to push into class scope for
10522 parsing the argument list of a function decl, in
10523 qualified_id. */
10524 pop_nested_class ();
10525 TREE_COMPLEXITY (declarator) = current_class_depth;
10526 }
10527 else
10528 my_friendly_abort (16);
10529
10530 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10531 {
10532 /* We had a reference to a global decl, or
10533 perhaps we were given a non-aggregate typedef,
10534 in which case we cleared this out, and should just
10535 keep going as though it wasn't there. */
10536 declarator = sname;
10537 continue;
10538 }
10539 ctype = TREE_OPERAND (declarator, 0);
10540
10541 t = ctype;
10542 while (t != NULL_TREE && CLASS_TYPE_P (t))
10543 {
10544 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10545 !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10546 template_count += 1;
10547 t = TYPE_MAIN_DECL (t);
10548 if (DECL_LANG_SPECIFIC (t))
10549 t = DECL_CLASS_CONTEXT (t);
10550 else
10551 t = NULL_TREE;
10552 }
10553
10554 if (sname == NULL_TREE)
10555 goto done_scoping;
10556
10557 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10558 {
10559 /* This is the `standard' use of the scoping operator:
10560 basetype :: member . */
10561
10562 if (ctype == current_class_type)
10563 {
10564 /* class A {
10565 void A::f ();
10566 };
10567
10568 Is this ill-formed? */
10569
10570 if (pedantic)
10571 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10572 ctype, name);
10573 }
10574 else if (TREE_CODE (type) == FUNCTION_TYPE)
10575 {
10576 if (current_class_type == NULL_TREE
10577 || friendp)
10578 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10579 TYPE_ARG_TYPES (type));
10580 else
10581 {
10582 cp_error ("cannot declare member function `%T::%s' within `%T'",
10583 ctype, name, current_class_type);
10584 return void_type_node;
10585 }
10586 }
10587 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10588 || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10589 {
10590 /* Have to move this code elsewhere in this function.
10591 this code is used for i.e., typedef int A::M; M *pm;
10592
10593 It is? How? jason 10/2/94 */
10594
10595 if (current_class_type)
10596 {
10597 cp_error ("cannot declare member `%T::%s' within `%T'",
10598 ctype, name, current_class_type);
10599 return void_type_node;
10600 }
10601 type = build_offset_type (ctype, type);
10602 }
10603 else if (uses_template_parms (ctype))
10604 {
10605 if (TREE_CODE (type) == FUNCTION_TYPE)
10606 type
10607 = build_cplus_method_type (ctype, TREE_TYPE (type),
10608 TYPE_ARG_TYPES (type));
10609 }
10610 else
10611 {
10612 cp_error ("structure `%T' not yet defined", ctype);
10613 return error_mark_node;
10614 }
10615
10616 declarator = sname;
10617 }
10618 else if (TREE_CODE (sname) == SCOPE_REF)
10619 my_friendly_abort (17);
10620 else
10621 {
10622 done_scoping:
10623 declarator = TREE_OPERAND (declarator, 1);
10624 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10625 /* In this case, we will deal with it later. */
10626 ;
10627 else
10628 {
10629 if (TREE_CODE (type) == FUNCTION_TYPE)
10630 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10631 TYPE_ARG_TYPES (type));
10632 else
10633 type = build_offset_type (ctype, type);
10634 }
10635 }
10636 }
10637 break;
10638
10639 case BIT_NOT_EXPR:
10640 declarator = TREE_OPERAND (declarator, 0);
10641 break;
10642
10643 case RECORD_TYPE:
10644 case UNION_TYPE:
10645 case ENUMERAL_TYPE:
10646 declarator = NULL_TREE;
10647 break;
10648
10649 case ERROR_MARK:
10650 declarator = NULL_TREE;
10651 break;
10652
10653 default:
10654 my_friendly_abort (158);
10655 }
10656 }
10657
10658 /* See the comment for the TREE_LIST case, above. */
10659 if (inner_attrs)
10660 {
10661 if (! ignore_attrs)
10662 decl_attributes (type, inner_attrs, NULL_TREE);
10663 else if (attrlist)
10664 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10665 else
10666 attrlist = build_decl_list (NULL_TREE, inner_attrs);
10667 }
10668
10669 /* Now TYPE has the actual type. */
10670
10671 if (explicitp == 1)
10672 {
10673 error ("only constructors can be declared `explicit'");
10674 explicitp = 0;
10675 }
10676
10677 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10678 {
10679 if (type_quals & TYPE_QUAL_CONST)
10680 {
10681 error ("const `%s' cannot be declared `mutable'", name);
10682 RIDBIT_RESET (RID_MUTABLE, specbits);
10683 }
10684 else if (staticp)
10685 {
10686 error ("static `%s' cannot be declared `mutable'", name);
10687 RIDBIT_RESET (RID_MUTABLE, specbits);
10688 }
10689 }
10690
10691 if (declarator == NULL_TREE
10692 || TREE_CODE (declarator) == IDENTIFIER_NODE
10693 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10694 && (TREE_CODE (type) == FUNCTION_TYPE
10695 || TREE_CODE (type) == METHOD_TYPE)))
10696 /* OK */;
10697 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10698 {
10699 cp_error ("template-id `%D' used as a declarator", declarator);
10700 declarator = dname;
10701 }
10702 else
10703 /* Unexpected declarator format. */
10704 my_friendly_abort (990210);
10705
10706 /* If this is declaring a typedef name, return a TYPE_DECL. */
10707
10708 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10709 {
10710 tree decl;
10711
10712 /* Note that the grammar rejects storage classes
10713 in typenames, fields or parameters. */
10714 if (current_lang_name == lang_name_java)
10715 TYPE_FOR_JAVA (type) = 1;
10716
10717 if (decl_context == FIELD)
10718 {
10719 if (declarator == constructor_name (current_class_type))
10720 cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10721 declarator);
10722 decl = build_lang_decl (TYPE_DECL, declarator, type);
10723 }
10724 else
10725 {
10726 /* Make sure this typedef lives as long as its type,
10727 since it might be used as a template parameter. */
10728 if (type != error_mark_node)
10729 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10730 if (processing_template_decl)
10731 decl = build_lang_decl (TYPE_DECL, declarator, type);
10732 else
10733 decl = build_decl (TYPE_DECL, declarator, type);
10734 if (type != error_mark_node)
10735 pop_obstacks ();
10736 }
10737
10738 /* If the user declares "typedef struct {...} foo" then the
10739 struct will have an anonymous name. Fill that name in now.
10740 Nothing can refer to it, so nothing needs know about the name
10741 change. */
10742 if (type != error_mark_node
10743 && TYPE_NAME (type)
10744 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10745 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10746 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10747 {
10748 tree oldname = TYPE_NAME (type);
10749 tree t;
10750
10751 /* Replace the anonymous name with the real name everywhere. */
10752 lookup_tag_reverse (type, declarator);
10753 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10754 if (TYPE_NAME (t) == oldname)
10755 TYPE_NAME (t) = decl;
10756
10757 if (TYPE_LANG_SPECIFIC (type))
10758 TYPE_WAS_ANONYMOUS (type) = 1;
10759
10760 /* If this is a typedef within a template class, the nested
10761 type is a (non-primary) template. The name for the
10762 template needs updating as well. */
10763 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10764 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10765 = TYPE_IDENTIFIER (type);
10766
10767 /* XXX Temporarily set the scope.
10768 When returning, start_decl expects it as NULL_TREE,
10769 and will then then set it using pushdecl. */
10770 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10771 if (current_class_type)
10772 DECL_CONTEXT (decl) = current_class_type;
10773 else
10774 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10775
10776 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10777 DECL_ASSEMBLER_NAME (decl)
10778 = get_identifier (build_overload_name (type, 1, 1));
10779 DECL_CONTEXT (decl) = NULL_TREE;
10780
10781 /* FIXME remangle member functions; member functions of a
10782 type with external linkage have external linkage. */
10783 }
10784
10785 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10786 {
10787 cp_error_at ("typedef name may not be class-qualified", decl);
10788 return NULL_TREE;
10789 }
10790 else if (quals)
10791 {
10792 if (ctype == NULL_TREE)
10793 {
10794 if (TREE_CODE (type) != METHOD_TYPE)
10795 cp_error_at ("invalid type qualifier for non-method type", decl);
10796 else
10797 ctype = TYPE_METHOD_BASETYPE (type);
10798 }
10799 if (ctype != NULL_TREE)
10800 grok_method_quals (ctype, decl, quals);
10801 }
10802
10803 if (RIDBIT_SETP (RID_SIGNED, specbits)
10804 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10805 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10806
10807 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10808 error ("non-object member `%s' cannot be declared mutable", name);
10809
10810 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10811 inlinep, friendp, raises != NULL_TREE);
10812
10813 if (initialized)
10814 error ("typedef declaration includes an initializer");
10815
10816 return decl;
10817 }
10818
10819 /* Detect the case of an array type of unspecified size
10820 which came, as such, direct from a typedef name.
10821 We must copy the type, so that each identifier gets
10822 a distinct type, so that each identifier's size can be
10823 controlled separately by its own initializer. */
10824
10825 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10826 && TYPE_DOMAIN (type) == NULL_TREE)
10827 {
10828 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10829 }
10830
10831 /* If this is a type name (such as, in a cast or sizeof),
10832 compute the type and return it now. */
10833
10834 if (decl_context == TYPENAME)
10835 {
10836 /* Note that the grammar rejects storage classes
10837 in typenames, fields or parameters. */
10838 if (type_quals != TYPE_UNQUALIFIED)
10839 type_quals = TYPE_UNQUALIFIED;
10840
10841 /* Special case: "friend class foo" looks like a TYPENAME context. */
10842 if (friendp)
10843 {
10844 if (type_quals != TYPE_UNQUALIFIED)
10845 {
10846 cp_error ("type qualifiers specified for friend class declaration");
10847 type_quals = TYPE_UNQUALIFIED;
10848 }
10849 if (inlinep)
10850 {
10851 cp_error ("`inline' specified for friend class declaration");
10852 inlinep = 0;
10853 }
10854
10855 /* Only try to do this stuff if we didn't already give up. */
10856 if (type != integer_type_node)
10857 {
10858 /* A friendly class? */
10859 if (current_class_type)
10860 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10861 else
10862 error ("trying to make class `%s' a friend of global scope",
10863 TYPE_NAME_STRING (type));
10864 type = void_type_node;
10865 }
10866 }
10867 else if (quals)
10868 {
10869 tree dummy = build_decl (TYPE_DECL, declarator, type);
10870 if (ctype == NULL_TREE)
10871 {
10872 my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10873 ctype = TYPE_METHOD_BASETYPE (type);
10874 }
10875 grok_method_quals (ctype, dummy, quals);
10876 type = TREE_TYPE (dummy);
10877 }
10878
10879 return type;
10880 }
10881 else if (declarator == NULL_TREE && decl_context != PARM
10882 && decl_context != CATCHPARM
10883 && TREE_CODE (type) != UNION_TYPE
10884 && ! bitfield)
10885 {
10886 cp_error ("abstract declarator `%T' used as declaration", type);
10887 declarator = make_anon_name ();
10888 }
10889
10890 /* `void' at top level (not within pointer)
10891 is allowed only in typedefs or type names.
10892 We don't complain about parms either, but that is because
10893 a better error message can be made later. */
10894
10895 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10896 {
10897 if (! declarator)
10898 error ("unnamed variable or field declared void");
10899 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10900 {
10901 if (IDENTIFIER_OPNAME_P (declarator))
10902 my_friendly_abort (356);
10903 else
10904 error ("variable or field `%s' declared void", name);
10905 }
10906 else
10907 error ("variable or field declared void");
10908 type = integer_type_node;
10909 }
10910
10911 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10912 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10913
10914 if (decl_context == PARM || decl_context == CATCHPARM)
10915 {
10916 if (ctype || in_namespace)
10917 error ("cannot use `::' in parameter declaration");
10918
10919 /* A parameter declared as an array of T is really a pointer to T.
10920 One declared as a function is really a pointer to a function.
10921 One declared as a member is really a pointer to member. */
10922
10923 if (TREE_CODE (type) == ARRAY_TYPE)
10924 {
10925 /* Transfer const-ness of array into that of type pointed to. */
10926 type = build_pointer_type (TREE_TYPE (type));
10927 type_quals = TYPE_UNQUALIFIED;
10928 }
10929 else if (TREE_CODE (type) == FUNCTION_TYPE)
10930 type = build_pointer_type (type);
10931 else if (TREE_CODE (type) == OFFSET_TYPE)
10932 type = build_pointer_type (type);
10933 else if (TREE_CODE (type) == VOID_TYPE && declarator)
10934 {
10935 error ("declaration of `%s' as void", name);
10936 return NULL_TREE;
10937 }
10938 }
10939
10940 {
10941 register tree decl;
10942
10943 if (decl_context == PARM)
10944 {
10945 decl = build_decl (PARM_DECL, declarator, type);
10946
10947 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10948 inlinep, friendp, raises != NULL_TREE);
10949
10950 /* Compute the type actually passed in the parmlist,
10951 for the case where there is no prototype.
10952 (For example, shorts and chars are passed as ints.)
10953 When there is a prototype, this is overridden later. */
10954
10955 DECL_ARG_TYPE (decl) = type_promotes_to (type);
10956 }
10957 else if (decl_context == FIELD)
10958 {
10959 if (type == error_mark_node)
10960 {
10961 /* Happens when declaring arrays of sizes which
10962 are error_mark_node, for example. */
10963 decl = NULL_TREE;
10964 }
10965 else if (in_namespace && !friendp)
10966 {
10967 /* Something like struct S { int N::j; }; */
10968 cp_error ("invalid use of `::'");
10969 decl = NULL_TREE;
10970 }
10971 else if (TREE_CODE (type) == FUNCTION_TYPE)
10972 {
10973 int publicp = 0;
10974 tree function_context;
10975
10976 /* We catch the others as conflicts with the builtin
10977 typedefs. */
10978 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10979 {
10980 cp_error ("function `%D' cannot be declared friend",
10981 declarator);
10982 friendp = 0;
10983 }
10984
10985 if (friendp == 0)
10986 {
10987 if (ctype == NULL_TREE)
10988 ctype = current_class_type;
10989
10990 if (ctype == NULL_TREE)
10991 {
10992 cp_error ("can't make `%D' into a method -- not in a class",
10993 declarator);
10994 return void_type_node;
10995 }
10996
10997 /* ``A union may [ ... ] not [ have ] virtual functions.''
10998 ARM 9.5 */
10999 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11000 {
11001 cp_error ("function `%D' declared virtual inside a union",
11002 declarator);
11003 return void_type_node;
11004 }
11005
11006 if (declarator == ansi_opname[(int) NEW_EXPR]
11007 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11008 || declarator == ansi_opname[(int) DELETE_EXPR]
11009 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11010 {
11011 if (virtualp)
11012 {
11013 cp_error ("`%D' cannot be declared virtual, since it is always static",
11014 declarator);
11015 virtualp = 0;
11016 }
11017 }
11018 else if (staticp < 2)
11019 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11020 TYPE_ARG_TYPES (type));
11021 }
11022
11023 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
11024 function_context = (ctype != NULL_TREE) ?
11025 hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11026 publicp = (! friendp || ! staticp)
11027 && function_context == NULL_TREE;
11028 decl = grokfndecl (ctype, type,
11029 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11030 ? declarator : dname,
11031 declarator,
11032 virtualp, flags, quals, raises,
11033 friendp ? -1 : 0, friendp, publicp, inlinep,
11034 funcdef_flag, template_count, in_namespace);
11035 if (decl == NULL_TREE)
11036 return decl;
11037 #if 0
11038 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11039 /* The decl and setting of decl_machine_attr is also turned off. */
11040 decl = build_decl_attribute_variant (decl, decl_machine_attr);
11041 #endif
11042
11043 /* [class.conv.ctor]
11044
11045 A constructor declared without the function-specifier
11046 explicit that can be called with a single parameter
11047 specifies a conversion from the type of its first
11048 parameter to the type of its class. Such a constructor
11049 is called a converting constructor. */
11050 if (explicitp == 2)
11051 DECL_NONCONVERTING_P (decl) = 1;
11052 else if (DECL_CONSTRUCTOR_P (decl))
11053 {
11054 /* The constructor can be called with exactly one
11055 parameter if there is at least one parameter, and
11056 any subsequent parameters have default arguments.
11057 We don't look at the first parameter, which is
11058 really just the `this' parameter for the new
11059 object. */
11060 tree arg_types =
11061 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11062
11063 /* Skip the `in_chrg' argument too, if present. */
11064 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
11065 arg_types = TREE_CHAIN (arg_types);
11066
11067 if (arg_types == void_list_node
11068 || (arg_types
11069 && TREE_CHAIN (arg_types)
11070 && TREE_CHAIN (arg_types) != void_list_node
11071 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11072 DECL_NONCONVERTING_P (decl) = 1;
11073 }
11074 }
11075 else if (TREE_CODE (type) == METHOD_TYPE)
11076 {
11077 /* We only get here for friend declarations of
11078 members of other classes. */
11079 /* All method decls are public, so tell grokfndecl to set
11080 TREE_PUBLIC, also. */
11081 decl = grokfndecl (ctype, type, declarator, declarator,
11082 virtualp, flags, quals, raises,
11083 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11084 template_count, in_namespace);
11085 if (decl == NULL_TREE)
11086 return NULL_TREE;
11087 }
11088 else if (!staticp && ! processing_template_decl
11089 && TYPE_SIZE (complete_type (type)) == NULL_TREE
11090 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11091 {
11092 if (declarator)
11093 cp_error ("field `%D' has incomplete type", declarator);
11094 else
11095 cp_error ("name `%T' has incomplete type", type);
11096
11097 /* If we're instantiating a template, tell them which
11098 instantiation made the field's type be incomplete. */
11099 if (current_class_type
11100 && TYPE_NAME (current_class_type)
11101 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11102 && declspecs && TREE_VALUE (declspecs)
11103 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11104 cp_error (" in instantiation of template `%T'",
11105 current_class_type);
11106
11107 type = error_mark_node;
11108 decl = NULL_TREE;
11109 }
11110 else
11111 {
11112 if (friendp)
11113 {
11114 error ("`%s' is neither function nor method; cannot be declared friend",
11115 IDENTIFIER_POINTER (declarator));
11116 friendp = 0;
11117 }
11118 decl = NULL_TREE;
11119 }
11120
11121 if (friendp)
11122 {
11123 /* Friends are treated specially. */
11124 if (ctype == current_class_type)
11125 warning ("member functions are implicitly friends of their class");
11126 else
11127 {
11128 tree t = NULL_TREE;
11129 if (decl && DECL_NAME (decl))
11130 {
11131 if (template_class_depth (current_class_type) == 0)
11132 {
11133 decl
11134 = check_explicit_specialization
11135 (declarator, decl,
11136 template_count, 2 * (funcdef_flag != 0) + 4);
11137 if (decl == error_mark_node)
11138 return error_mark_node;
11139 }
11140
11141 t = do_friend (ctype, declarator, decl,
11142 last_function_parms, attrlist, flags, quals,
11143 funcdef_flag);
11144 }
11145 if (t && funcdef_flag)
11146 return t;
11147
11148 return void_type_node;
11149 }
11150 }
11151
11152 /* Structure field. It may not be a function, except for C++ */
11153
11154 if (decl == NULL_TREE)
11155 {
11156 if (initialized)
11157 {
11158 if (!staticp)
11159 {
11160 /* An attempt is being made to initialize a non-static
11161 member. But, from [class.mem]:
11162
11163 4 A member-declarator can contain a
11164 constant-initializer only if it declares a static
11165 member (_class.static_) of integral or enumeration
11166 type, see _class.static.data_.
11167
11168 This used to be relatively common practice, but
11169 the rest of the compiler does not correctly
11170 handle the initialization unless the member is
11171 static so we make it static below. */
11172 cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11173 declarator);
11174 cp_pedwarn ("making `%D' static", declarator);
11175 staticp = 1;
11176 }
11177
11178 if (uses_template_parms (type))
11179 /* We'll check at instantiation time. */
11180 ;
11181 else if (check_static_variable_definition (declarator,
11182 type))
11183 /* If we just return the declaration, crashes
11184 will sometimes occur. We therefore return
11185 void_type_node, as if this was a friend
11186 declaration, to cause callers to completely
11187 ignore this declaration. */
11188 return void_type_node;
11189 }
11190
11191 /* 9.2p13 [class.mem] */
11192 if (declarator == constructor_name (current_class_type)
11193 /* Divergence from the standard: In extern "C", we
11194 allow non-static data members here, because C does
11195 and /usr/include/netinet/in.h uses that. */
11196 && (staticp || ! in_system_header))
11197 cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11198 declarator);
11199
11200 if (staticp)
11201 {
11202 /* C++ allows static class members. All other work
11203 for this is done by grokfield. */
11204 decl = build_lang_decl (VAR_DECL, declarator, type);
11205 TREE_STATIC (decl) = 1;
11206 /* In class context, 'static' means public access. */
11207 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11208 }
11209 else
11210 {
11211 decl = build_lang_decl (FIELD_DECL, declarator, type);
11212 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11213 {
11214 DECL_MUTABLE_P (decl) = 1;
11215 RIDBIT_RESET (RID_MUTABLE, specbits);
11216 }
11217 }
11218
11219 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11220 inlinep, friendp, raises != NULL_TREE);
11221 }
11222 }
11223 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11224 {
11225 tree original_name;
11226 int publicp = 0;
11227
11228 if (! declarator)
11229 return NULL_TREE;
11230
11231 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11232 original_name = dname;
11233 else
11234 original_name = declarator;
11235
11236 if (RIDBIT_SETP (RID_AUTO, specbits))
11237 error ("storage class `auto' invalid for function `%s'", name);
11238 else if (RIDBIT_SETP (RID_REGISTER, specbits))
11239 error ("storage class `register' invalid for function `%s'", name);
11240
11241 /* Function declaration not at top level.
11242 Storage classes other than `extern' are not allowed
11243 and `extern' makes no difference. */
11244 if (! toplevel_bindings_p ()
11245 && (RIDBIT_SETP (RID_STATIC, specbits)
11246 || RIDBIT_SETP (RID_INLINE, specbits))
11247 && pedantic)
11248 {
11249 if (RIDBIT_SETP (RID_STATIC, specbits))
11250 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11251 else
11252 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11253 }
11254
11255 if (ctype == NULL_TREE)
11256 {
11257 if (virtualp)
11258 {
11259 error ("virtual non-class function `%s'", name);
11260 virtualp = 0;
11261 }
11262 }
11263 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11264 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11265 TYPE_ARG_TYPES (type));
11266
11267 /* Record presence of `static'. */
11268 publicp = (ctype != NULL_TREE
11269 || RIDBIT_SETP (RID_EXTERN, specbits)
11270 || !RIDBIT_SETP (RID_STATIC, specbits));
11271
11272 decl = grokfndecl (ctype, type, original_name, declarator,
11273 virtualp, flags, quals, raises,
11274 1, friendp,
11275 publicp, inlinep, funcdef_flag,
11276 template_count, in_namespace);
11277 if (decl == NULL_TREE)
11278 return NULL_TREE;
11279
11280 if (staticp == 1)
11281 {
11282 int illegal_static = 0;
11283
11284 /* Don't allow a static member function in a class, and forbid
11285 declaring main to be static. */
11286 if (TREE_CODE (type) == METHOD_TYPE)
11287 {
11288 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11289 illegal_static = 1;
11290 }
11291 else if (current_function_decl)
11292 {
11293 /* FIXME need arm citation */
11294 error ("cannot declare static function inside another function");
11295 illegal_static = 1;
11296 }
11297
11298 if (illegal_static)
11299 {
11300 staticp = 0;
11301 RIDBIT_RESET (RID_STATIC, specbits);
11302 }
11303 }
11304 }
11305 else
11306 {
11307 /* It's a variable. */
11308
11309 /* An uninitialized decl with `extern' is a reference. */
11310 decl = grokvardecl (type, declarator, &specbits,
11311 initialized,
11312 (type_quals & TYPE_QUAL_CONST) != 0,
11313 in_namespace);
11314 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11315 inlinep, friendp, raises != NULL_TREE);
11316
11317 if (ctype)
11318 {
11319 DECL_CONTEXT (decl) = ctype;
11320 if (staticp == 1)
11321 {
11322 cp_pedwarn ("static member `%D' re-declared as static", decl);
11323 staticp = 0;
11324 RIDBIT_RESET (RID_STATIC, specbits);
11325 }
11326 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11327 {
11328 cp_error ("static member `%D' declared `register'", decl);
11329 RIDBIT_RESET (RID_REGISTER, specbits);
11330 }
11331 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11332 {
11333 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11334 decl);
11335 RIDBIT_RESET (RID_EXTERN, specbits);
11336 }
11337 }
11338 }
11339
11340 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11341 {
11342 error ("`%s' cannot be declared mutable", name);
11343 }
11344
11345 /* Record `register' declaration for warnings on &
11346 and in case doing stupid register allocation. */
11347
11348 if (RIDBIT_SETP (RID_REGISTER, specbits))
11349 DECL_REGISTER (decl) = 1;
11350
11351 if (RIDBIT_SETP (RID_EXTERN, specbits))
11352 DECL_THIS_EXTERN (decl) = 1;
11353
11354 if (RIDBIT_SETP (RID_STATIC, specbits))
11355 DECL_THIS_STATIC (decl) = 1;
11356
11357 /* Record constancy and volatility. There's no need to do this
11358 when processing a template; we'll do this for the instantiated
11359 declaration based on the type of DECL. */
11360 if (!processing_template_decl)
11361 c_apply_type_quals_to_decl (type_quals, decl);
11362
11363 return decl;
11364 }
11365 }
11366 \f
11367 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11368 An empty exprlist is a parmlist. An exprlist which
11369 contains only identifiers at the global level
11370 is a parmlist. Otherwise, it is an exprlist. */
11371
11372 int
11373 parmlist_is_exprlist (exprs)
11374 tree exprs;
11375 {
11376 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11377 return 0;
11378
11379 if (toplevel_bindings_p ())
11380 {
11381 /* At the global level, if these are all identifiers,
11382 then it is a parmlist. */
11383 while (exprs)
11384 {
11385 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11386 return 1;
11387 exprs = TREE_CHAIN (exprs);
11388 }
11389 return 0;
11390 }
11391 return 1;
11392 }
11393
11394 /* Subroutine of start_function. Ensure that each of the parameter
11395 types (as listed in PARMS) is complete, as is required for a
11396 function definition. */
11397
11398 static void
11399 require_complete_types_for_parms (parms)
11400 tree parms;
11401 {
11402 while (parms)
11403 {
11404 tree type = TREE_TYPE (parms);
11405 if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11406 {
11407 if (DECL_NAME (parms))
11408 error ("parameter `%s' has incomplete type",
11409 IDENTIFIER_POINTER (DECL_NAME (parms)));
11410 else
11411 error ("parameter has incomplete type");
11412 TREE_TYPE (parms) = error_mark_node;
11413 }
11414 else
11415 layout_decl (parms, 0);
11416
11417 parms = TREE_CHAIN (parms);
11418 }
11419 }
11420
11421 /* Returns DECL if DECL is a local variable (or parameter). Returns
11422 NULL_TREE otherwise. */
11423
11424 static tree
11425 local_variable_p (t)
11426 tree t;
11427 {
11428 if ((TREE_CODE (t) == VAR_DECL
11429 /* A VAR_DECL with a context that is a _TYPE is a static data
11430 member. */
11431 && !TYPE_P (CP_DECL_CONTEXT (t))
11432 /* Any other non-local variable must be at namespace scope. */
11433 && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11434 || (TREE_CODE (t) == PARM_DECL))
11435 return t;
11436
11437 return NULL_TREE;
11438 }
11439
11440 /* Check that ARG, which is a default-argument expression for a
11441 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11442 something goes wrong. DECL may also be a _TYPE node, rather than a
11443 DECL, if there is no DECL available. */
11444
11445 tree
11446 check_default_argument (decl, arg)
11447 tree decl;
11448 tree arg;
11449 {
11450 tree var;
11451 tree decl_type;
11452
11453 if (TREE_CODE (arg) == DEFAULT_ARG)
11454 /* We get a DEFAULT_ARG when looking at an in-class declaration
11455 with a default argument. Ignore the argument for now; we'll
11456 deal with it after the class is complete. */
11457 return arg;
11458
11459 if (processing_template_decl || uses_template_parms (arg))
11460 /* We don't do anything checking until instantiation-time. Note
11461 that there may be uninstantiated arguments even for an
11462 instantiated function, since default arguments are not
11463 instantiated until they are needed. */
11464 return arg;
11465
11466 if (TYPE_P (decl))
11467 {
11468 decl_type = decl;
11469 decl = NULL_TREE;
11470 }
11471 else
11472 decl_type = TREE_TYPE (decl);
11473
11474 if (arg == error_mark_node
11475 || decl == error_mark_node
11476 || TREE_TYPE (arg) == error_mark_node
11477 || decl_type == error_mark_node)
11478 /* Something already went wrong. There's no need to check
11479 further. */
11480 return error_mark_node;
11481
11482 /* [dcl.fct.default]
11483
11484 A default argument expression is implicitly converted to the
11485 parameter type. */
11486 if (!TREE_TYPE (arg)
11487 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11488 {
11489 if (decl)
11490 cp_error ("default argument for `%#D' has type `%T'",
11491 decl, TREE_TYPE (arg));
11492 else
11493 cp_error ("default argument for parameter of type `%T' has type `%T'",
11494 decl_type, TREE_TYPE (arg));
11495
11496 return error_mark_node;
11497 }
11498
11499 /* [dcl.fct.default]
11500
11501 Local variables shall not be used in default argument
11502 expressions.
11503
11504 The keyword `this' shall not be used in a default argument of a
11505 member function. */
11506 var = search_tree (arg, local_variable_p);
11507 if (var)
11508 {
11509 cp_error ("default argument `%E' uses local variable `%D'",
11510 arg, var);
11511 return error_mark_node;
11512 }
11513
11514 /* All is well. */
11515 return arg;
11516 }
11517
11518 /* Decode the list of parameter types for a function type.
11519 Given the list of things declared inside the parens,
11520 return a list of types.
11521
11522 The list we receive can have three kinds of elements:
11523 an IDENTIFIER_NODE for names given without types,
11524 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11525 or void_type_node, to mark the end of an argument list
11526 when additional arguments are not permitted (... was not used).
11527
11528 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11529 a mere declaration. A nonempty identifier-list gets an error message
11530 when FUNCDEF_FLAG is zero.
11531 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11532 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11533
11534 If all elements of the input list contain types,
11535 we return a list of the types.
11536 If all elements contain no type (except perhaps a void_type_node
11537 at the end), we return a null list.
11538 If some have types and some do not, it is an error, and we
11539 return a null list.
11540
11541 Also set last_function_parms to either
11542 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11543 A list of names is converted to a chain of PARM_DECLs
11544 by store_parm_decls so that ultimately it is always a chain of decls.
11545
11546 Note that in C++, parameters can take default values. These default
11547 values are in the TREE_PURPOSE field of the TREE_LIST. It is
11548 an error to specify default values which are followed by parameters
11549 that have no default values, or an ELLIPSES. For simplicities sake,
11550 only parameters which are specified with their types can take on
11551 default values. */
11552
11553 static tree
11554 grokparms (first_parm, funcdef_flag)
11555 tree first_parm;
11556 int funcdef_flag;
11557 {
11558 tree result = NULL_TREE;
11559 tree decls = NULL_TREE;
11560
11561 if (first_parm != NULL_TREE
11562 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11563 {
11564 if (! funcdef_flag)
11565 pedwarn ("parameter names (without types) in function declaration");
11566 last_function_parms = first_parm;
11567 return NULL_TREE;
11568 }
11569 else if (first_parm != NULL_TREE
11570 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11571 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11572 my_friendly_abort (145);
11573 else
11574 {
11575 /* Types were specified. This is a list of declarators
11576 each represented as a TREE_LIST node. */
11577 register tree parm, chain;
11578 int any_init = 0, any_error = 0;
11579
11580 if (first_parm != NULL_TREE)
11581 {
11582 tree last_result = NULL_TREE;
11583 tree last_decl = NULL_TREE;
11584
11585 for (parm = first_parm; parm != NULL_TREE; parm = chain)
11586 {
11587 tree type = NULL_TREE, list_node = parm;
11588 register tree decl = TREE_VALUE (parm);
11589 tree init = TREE_PURPOSE (parm);
11590
11591 chain = TREE_CHAIN (parm);
11592 /* @@ weak defense against parse errors. */
11593 if (TREE_CODE (decl) != VOID_TYPE
11594 && TREE_CODE (decl) != TREE_LIST)
11595 {
11596 /* Give various messages as the need arises. */
11597 if (TREE_CODE (decl) == STRING_CST)
11598 cp_error ("invalid string constant `%E'", decl);
11599 else if (TREE_CODE (decl) == INTEGER_CST)
11600 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11601 continue;
11602 }
11603
11604 if (TREE_CODE (decl) != VOID_TYPE)
11605 {
11606 decl = grokdeclarator (TREE_VALUE (decl),
11607 TREE_PURPOSE (decl),
11608 PARM, init != NULL_TREE,
11609 NULL_TREE);
11610 if (! decl || TREE_TYPE (decl) == error_mark_node)
11611 continue;
11612
11613 /* Top-level qualifiers on the parameters are
11614 ignored for function types. */
11615 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11616
11617 if (TREE_CODE (type) == VOID_TYPE)
11618 decl = void_type_node;
11619 else if (TREE_CODE (type) == METHOD_TYPE)
11620 {
11621 if (DECL_NAME (decl))
11622 /* Cannot use the decl here because
11623 we don't have DECL_CONTEXT set up yet. */
11624 cp_error ("parameter `%D' invalidly declared method type",
11625 DECL_NAME (decl));
11626 else
11627 error ("parameter invalidly declared method type");
11628 type = build_pointer_type (type);
11629 TREE_TYPE (decl) = type;
11630 }
11631 else if (TREE_CODE (type) == OFFSET_TYPE)
11632 {
11633 if (DECL_NAME (decl))
11634 cp_error ("parameter `%D' invalidly declared offset type",
11635 DECL_NAME (decl));
11636 else
11637 error ("parameter invalidly declared offset type");
11638 type = build_pointer_type (type);
11639 TREE_TYPE (decl) = type;
11640 }
11641 else if (abstract_virtuals_error (decl, type))
11642 any_error = 1; /* Seems like a good idea. */
11643 else if (POINTER_TYPE_P (type))
11644 {
11645 tree t = type;
11646 while (POINTER_TYPE_P (t)
11647 || (TREE_CODE (t) == ARRAY_TYPE
11648 && TYPE_DOMAIN (t) != NULL_TREE))
11649 t = TREE_TYPE (t);
11650 if (TREE_CODE (t) == ARRAY_TYPE)
11651 cp_error ("parameter type `%T' includes %s to array of unknown bound",
11652 type,
11653 TYPE_PTR_P (type) ? "pointer" : "reference");
11654 }
11655 }
11656
11657 if (TREE_CODE (decl) == VOID_TYPE)
11658 {
11659 if (result == NULL_TREE)
11660 {
11661 result = void_list_node;
11662 last_result = result;
11663 }
11664 else
11665 {
11666 TREE_CHAIN (last_result) = void_list_node;
11667 last_result = void_list_node;
11668 }
11669 if (chain
11670 && (chain != void_list_node || TREE_CHAIN (chain)))
11671 error ("`void' in parameter list must be entire list");
11672 break;
11673 }
11674
11675 /* Since there is a prototype, args are passed in their own types. */
11676 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11677 if (PROMOTE_PROTOTYPES
11678 && (TREE_CODE (type) == INTEGER_TYPE
11679 || TREE_CODE (type) == ENUMERAL_TYPE)
11680 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11681 DECL_ARG_TYPE (decl) = integer_type_node;
11682 if (!any_error && init)
11683 {
11684 any_init++;
11685 init = check_default_argument (decl, init);
11686 }
11687 else
11688 init = NULL_TREE;
11689
11690 if (decls == NULL_TREE)
11691 {
11692 decls = decl;
11693 last_decl = decls;
11694 }
11695 else
11696 {
11697 TREE_CHAIN (last_decl) = decl;
11698 last_decl = decl;
11699 }
11700 if (! current_function_decl && TREE_PERMANENT (list_node))
11701 {
11702 TREE_PURPOSE (list_node) = init;
11703 TREE_VALUE (list_node) = type;
11704 TREE_CHAIN (list_node) = NULL_TREE;
11705 }
11706 else
11707 list_node = saveable_tree_cons (init, type, NULL_TREE);
11708 if (result == NULL_TREE)
11709 {
11710 result = list_node;
11711 last_result = result;
11712 }
11713 else
11714 {
11715 TREE_CHAIN (last_result) = list_node;
11716 last_result = list_node;
11717 }
11718 }
11719 if (last_result)
11720 TREE_CHAIN (last_result) = NULL_TREE;
11721 /* If there are no parameters, and the function does not end
11722 with `...', then last_decl will be NULL_TREE. */
11723 if (last_decl != NULL_TREE)
11724 TREE_CHAIN (last_decl) = NULL_TREE;
11725 }
11726 }
11727
11728 last_function_parms = decls;
11729
11730 return result;
11731 }
11732
11733 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11734 FUNCTION_TYPE with the newly parsed version of its default argument, which
11735 was previously digested as text. See snarf_defarg et al in lex.c. */
11736
11737 void
11738 replace_defarg (arg, init)
11739 tree arg, init;
11740 {
11741 if (! processing_template_decl
11742 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11743 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11744 TREE_TYPE (init), TREE_VALUE (arg));
11745 TREE_PURPOSE (arg) = init;
11746 }
11747 \f
11748 int
11749 copy_args_p (d)
11750 tree d;
11751 {
11752 tree t = FUNCTION_ARG_CHAIN (d);
11753 if (DECL_CONSTRUCTOR_P (d)
11754 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11755 t = TREE_CHAIN (t);
11756 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11757 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11758 == DECL_CLASS_CONTEXT (d))
11759 && (TREE_CHAIN (t) == NULL_TREE
11760 || TREE_CHAIN (t) == void_list_node
11761 || TREE_PURPOSE (TREE_CHAIN (t))))
11762 return 1;
11763 return 0;
11764 }
11765
11766 /* These memoizing functions keep track of special properties which
11767 a class may have. `grok_ctor_properties' notices whether a class
11768 has a constructor of the form X(X&), and also complains
11769 if the class has a constructor of the form X(X).
11770 `grok_op_properties' takes notice of the various forms of
11771 operator= which are defined, as well as what sorts of type conversion
11772 may apply. Both functions take a FUNCTION_DECL as an argument. */
11773
11774 int
11775 grok_ctor_properties (ctype, decl)
11776 tree ctype, decl;
11777 {
11778 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11779 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11780
11781 /* When a type has virtual baseclasses, a magical first int argument is
11782 added to any ctor so we can tell if the class has been initialized
11783 yet. This could screw things up in this function, so we deliberately
11784 ignore the leading int if we're in that situation. */
11785 if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11786 {
11787 my_friendly_assert (parmtypes
11788 && TREE_VALUE (parmtypes) == integer_type_node,
11789 980529);
11790 parmtypes = TREE_CHAIN (parmtypes);
11791 parmtype = TREE_VALUE (parmtypes);
11792 }
11793
11794 /* [class.copy]
11795
11796 A non-template constructor for class X is a copy constructor if
11797 its first parameter is of type X&, const X&, volatile X& or const
11798 volatile X&, and either there are no other parameters or else all
11799 other parameters have default arguments. */
11800 if (TREE_CODE (parmtype) == REFERENCE_TYPE
11801 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11802 && (TREE_CHAIN (parmtypes) == NULL_TREE
11803 || TREE_CHAIN (parmtypes) == void_list_node
11804 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11805 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11806 && is_member_template (DECL_TI_TEMPLATE (decl))))
11807 {
11808 TYPE_HAS_INIT_REF (ctype) = 1;
11809 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11810 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11811 }
11812 /* [class.copy]
11813
11814 A declaration of a constructor for a class X is ill-formed if its
11815 first parameter is of type (optionally cv-qualified) X and either
11816 there are no other parameters or else all other parameters have
11817 default arguments.
11818
11819 We *don't* complain about member template instantiations that
11820 have this form, though; they can occur as we try to decide what
11821 constructor to use during overload resolution. Since overload
11822 resolution will never prefer such a constructor to the
11823 non-template copy constructor (which is either explicitly or
11824 implicitly defined), there's no need to worry about their
11825 existence. Theoretically, they should never even be
11826 instantiated, but that's hard to forestall. */
11827 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11828 && (TREE_CHAIN (parmtypes) == NULL_TREE
11829 || TREE_CHAIN (parmtypes) == void_list_node
11830 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11831 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11832 && is_member_template (DECL_TI_TEMPLATE (decl))))
11833 {
11834 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11835 ctype, ctype);
11836 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11837 return 0;
11838 }
11839 else if (TREE_CODE (parmtype) == VOID_TYPE
11840 || TREE_PURPOSE (parmtypes) != NULL_TREE)
11841 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11842
11843 return 1;
11844 }
11845
11846 /* An operator with this name can be either unary or binary. */
11847
11848 static int
11849 ambi_op_p (name)
11850 tree name;
11851 {
11852 return (name == ansi_opname [(int) INDIRECT_REF]
11853 || name == ansi_opname [(int) ADDR_EXPR]
11854 || name == ansi_opname [(int) NEGATE_EXPR]
11855 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11856 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11857 || name == ansi_opname [(int) CONVERT_EXPR]);
11858 }
11859
11860 /* An operator with this name can only be unary. */
11861
11862 static int
11863 unary_op_p (name)
11864 tree name;
11865 {
11866 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11867 || name == ansi_opname [(int) BIT_NOT_EXPR]
11868 || name == ansi_opname [(int) COMPONENT_REF]
11869 || IDENTIFIER_TYPENAME_P (name));
11870 }
11871
11872 /* Do a little sanity-checking on how they declared their operator. */
11873
11874 void
11875 grok_op_properties (decl, virtualp, friendp)
11876 tree decl;
11877 int virtualp, friendp;
11878 {
11879 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11880 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11881 tree name = DECL_NAME (decl);
11882
11883 if (current_class_type == NULL_TREE)
11884 friendp = 1;
11885
11886 if (! friendp)
11887 {
11888 /* [class.copy]
11889
11890 A user-declared copy assignment operator X::operator= is a
11891 non-static non-template member function of class X with
11892 exactly one parameter of type X, X&, const X&, volatile X& or
11893 const volatile X&. */
11894 if (name == ansi_opname[(int) MODIFY_EXPR]
11895 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11896 && is_member_template (DECL_TI_TEMPLATE (decl))))
11897 ;
11898 else if (name == ansi_opname[(int) CALL_EXPR])
11899 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11900 else if (name == ansi_opname[(int) ARRAY_REF])
11901 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11902 else if (name == ansi_opname[(int) COMPONENT_REF]
11903 || name == ansi_opname[(int) MEMBER_REF])
11904 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11905 else if (name == ansi_opname[(int) NEW_EXPR])
11906 TYPE_GETS_NEW (current_class_type) |= 1;
11907 else if (name == ansi_opname[(int) DELETE_EXPR])
11908 TYPE_GETS_DELETE (current_class_type) |= 1;
11909 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11910 TYPE_GETS_NEW (current_class_type) |= 2;
11911 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11912 TYPE_GETS_DELETE (current_class_type) |= 2;
11913 }
11914
11915 if (name == ansi_opname[(int) NEW_EXPR]
11916 || name == ansi_opname[(int) VEC_NEW_EXPR])
11917 {
11918 /* When the compiler encounters the definition of A::operator new, it
11919 doesn't look at the class declaration to find out if it's static. */
11920 if (methodp)
11921 revert_static_member_fn (&decl, NULL, NULL);
11922
11923 /* Take care of function decl if we had syntax errors. */
11924 if (argtypes == NULL_TREE)
11925 TREE_TYPE (decl)
11926 = build_function_type (ptr_type_node,
11927 hash_tree_chain (integer_type_node,
11928 void_list_node));
11929 else
11930 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11931 }
11932 else if (name == ansi_opname[(int) DELETE_EXPR]
11933 || name == ansi_opname[(int) VEC_DELETE_EXPR])
11934 {
11935 if (methodp)
11936 revert_static_member_fn (&decl, NULL, NULL);
11937
11938 if (argtypes == NULL_TREE)
11939 TREE_TYPE (decl)
11940 = build_function_type (void_type_node,
11941 hash_tree_chain (ptr_type_node,
11942 void_list_node));
11943 else
11944 {
11945 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11946
11947 if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11948 && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11949 != void_list_node))
11950 TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11951 }
11952 }
11953 else
11954 {
11955 /* An operator function must either be a non-static member function
11956 or have at least one parameter of a class, a reference to a class,
11957 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11958 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11959 {
11960 if (IDENTIFIER_TYPENAME_P (name)
11961 || name == ansi_opname[(int) CALL_EXPR]
11962 || name == ansi_opname[(int) MODIFY_EXPR]
11963 || name == ansi_opname[(int) COMPONENT_REF]
11964 || name == ansi_opname[(int) ARRAY_REF])
11965 cp_error ("`%D' must be a nonstatic member function", decl);
11966 else
11967 {
11968 tree p = argtypes;
11969
11970 if (DECL_STATIC_FUNCTION_P (decl))
11971 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11972
11973 if (p)
11974 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11975 {
11976 tree arg = TREE_VALUE (p);
11977 if (TREE_CODE (arg) == REFERENCE_TYPE)
11978 arg = TREE_TYPE (arg);
11979
11980 /* This lets bad template code slip through. */
11981 if (IS_AGGR_TYPE (arg)
11982 || TREE_CODE (arg) == ENUMERAL_TYPE
11983 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11984 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11985 goto foundaggr;
11986 }
11987 cp_error
11988 ("`%D' must have an argument of class or enumerated type",
11989 decl);
11990 foundaggr:
11991 ;
11992 }
11993 }
11994
11995 if (name == ansi_opname[(int) CALL_EXPR])
11996 return; /* No restrictions on args. */
11997
11998 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11999 {
12000 tree t = TREE_TYPE (name);
12001 if (TREE_CODE (t) == VOID_TYPE)
12002 pedwarn ("void is not a valid type conversion operator");
12003 else if (! friendp)
12004 {
12005 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12006 const char *what = 0;
12007 if (ref)
12008 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12009
12010 if (t == current_class_type)
12011 what = "the same type";
12012 /* Don't force t to be complete here. */
12013 else if (IS_AGGR_TYPE (t)
12014 && TYPE_SIZE (t)
12015 && DERIVED_FROM_P (t, current_class_type))
12016 what = "a base class";
12017
12018 if (what)
12019 warning ("conversion to %s%s will never use a type conversion operator",
12020 ref ? "a reference to " : "", what);
12021 }
12022 }
12023
12024 if (name == ansi_opname[(int) MODIFY_EXPR])
12025 {
12026 tree parmtype;
12027
12028 if (list_length (argtypes) != 3 && methodp)
12029 {
12030 cp_error ("`%D' must take exactly one argument", decl);
12031 return;
12032 }
12033 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12034
12035 if (copy_assignment_arg_p (parmtype, virtualp)
12036 && ! friendp)
12037 {
12038 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12039 if (TREE_CODE (parmtype) != REFERENCE_TYPE
12040 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12041 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12042 }
12043 }
12044 else if (name == ansi_opname[(int) COND_EXPR])
12045 {
12046 /* 13.4.0.3 */
12047 cp_error ("ANSI C++ prohibits overloading operator ?:");
12048 }
12049 else if (ambi_op_p (name))
12050 {
12051 if (list_length (argtypes) == 2)
12052 /* prefix */;
12053 else if (list_length (argtypes) == 3)
12054 {
12055 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12056 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12057 && ! processing_template_decl
12058 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12059 {
12060 if (methodp)
12061 cp_error ("postfix `%D' must take `int' as its argument",
12062 decl);
12063 else
12064 cp_error
12065 ("postfix `%D' must take `int' as its second argument",
12066 decl);
12067 }
12068 }
12069 else
12070 {
12071 if (methodp)
12072 cp_error ("`%D' must take either zero or one argument", decl);
12073 else
12074 cp_error ("`%D' must take either one or two arguments", decl);
12075 }
12076
12077 /* More Effective C++ rule 6. */
12078 if (warn_ecpp
12079 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12080 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12081 {
12082 tree arg = TREE_VALUE (argtypes);
12083 tree ret = TREE_TYPE (TREE_TYPE (decl));
12084 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12085 arg = TREE_TYPE (arg);
12086 arg = TYPE_MAIN_VARIANT (arg);
12087 if (list_length (argtypes) == 2)
12088 {
12089 if (TREE_CODE (ret) != REFERENCE_TYPE
12090 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12091 arg))
12092 cp_warning ("prefix `%D' should return `%T'", decl,
12093 build_reference_type (arg));
12094 }
12095 else
12096 {
12097 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12098 cp_warning ("postfix `%D' should return `%T'", decl, arg);
12099 }
12100 }
12101 }
12102 else if (unary_op_p (name))
12103 {
12104 if (list_length (argtypes) != 2)
12105 {
12106 if (methodp)
12107 cp_error ("`%D' must take `void'", decl);
12108 else
12109 cp_error ("`%D' must take exactly one argument", decl);
12110 }
12111 }
12112 else /* if (binary_op_p (name)) */
12113 {
12114 if (list_length (argtypes) != 3)
12115 {
12116 if (methodp)
12117 cp_error ("`%D' must take exactly one argument", decl);
12118 else
12119 cp_error ("`%D' must take exactly two arguments", decl);
12120 }
12121
12122 /* More Effective C++ rule 7. */
12123 if (warn_ecpp
12124 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12125 || name == ansi_opname [TRUTH_ORIF_EXPR]
12126 || name == ansi_opname [COMPOUND_EXPR]))
12127 cp_warning ("user-defined `%D' always evaluates both arguments",
12128 decl);
12129 }
12130
12131 /* Effective C++ rule 23. */
12132 if (warn_ecpp
12133 && list_length (argtypes) == 3
12134 && (name == ansi_opname [PLUS_EXPR]
12135 || name == ansi_opname [MINUS_EXPR]
12136 || name == ansi_opname [TRUNC_DIV_EXPR]
12137 || name == ansi_opname [MULT_EXPR])
12138 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12139 cp_warning ("`%D' should return by value", decl);
12140
12141 /* 13.4.0.8 */
12142 if (argtypes)
12143 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12144 if (TREE_PURPOSE (argtypes))
12145 {
12146 TREE_PURPOSE (argtypes) = NULL_TREE;
12147 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12148 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12149 {
12150 if (pedantic)
12151 cp_pedwarn ("`%D' cannot have default arguments", decl);
12152 }
12153 else
12154 cp_error ("`%D' cannot have default arguments", decl);
12155 }
12156 }
12157 }
12158 \f
12159 static const char *
12160 tag_name (code)
12161 enum tag_types code;
12162 {
12163 switch (code)
12164 {
12165 case record_type:
12166 return "struct";
12167 case class_type:
12168 return "class";
12169 case union_type:
12170 return "union ";
12171 case enum_type:
12172 return "enum";
12173 default:
12174 my_friendly_abort (981122);
12175 }
12176 }
12177
12178 /* Get the struct, enum or union (CODE says which) with tag NAME.
12179 Define the tag as a forward-reference if it is not defined.
12180
12181 C++: If a class derivation is given, process it here, and report
12182 an error if multiple derivation declarations are not identical.
12183
12184 If this is a definition, come in through xref_tag and only look in
12185 the current frame for the name (since C++ allows new names in any
12186 scope.) */
12187
12188 tree
12189 xref_tag (code_type_node, name, globalize)
12190 tree code_type_node;
12191 tree name;
12192 int globalize;
12193 {
12194 enum tag_types tag_code;
12195 enum tree_code code;
12196 int temp = 0;
12197 register tree ref, t;
12198 struct binding_level *b = current_binding_level;
12199 int got_type = 0;
12200 tree attributes = NULL_TREE;
12201 tree context = NULL_TREE;
12202
12203 /* If we are called from the parser, code_type_node will sometimes be a
12204 TREE_LIST. This indicates that the user wrote
12205 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12206 use them later. */
12207 if (TREE_CODE (code_type_node) == TREE_LIST)
12208 {
12209 attributes = TREE_PURPOSE (code_type_node);
12210 code_type_node = TREE_VALUE (code_type_node);
12211 }
12212
12213 tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12214 switch (tag_code)
12215 {
12216 case record_type:
12217 case class_type:
12218 code = RECORD_TYPE;
12219 break;
12220 case union_type:
12221 code = UNION_TYPE;
12222 break;
12223 case enum_type:
12224 code = ENUMERAL_TYPE;
12225 break;
12226 default:
12227 my_friendly_abort (18);
12228 }
12229
12230 /* If a cross reference is requested, look up the type
12231 already defined for this tag and return it. */
12232 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12233 {
12234 t = name;
12235 name = TYPE_IDENTIFIER (t);
12236 got_type = 1;
12237 }
12238 else
12239 t = IDENTIFIER_TYPE_VALUE (name);
12240
12241 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12242 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12243 t = NULL_TREE;
12244
12245 if (! globalize)
12246 {
12247 /* If we know we are defining this tag, only look it up in
12248 this scope and don't try to find it as a type. */
12249 ref = lookup_tag (code, name, b, 1);
12250 }
12251 else
12252 {
12253 if (t)
12254 {
12255 /* [dcl.type.elab] If the identifier resolves to a
12256 typedef-name or a template type-parameter, the
12257 elaborated-type-specifier is ill-formed. */
12258 if (t != TYPE_MAIN_VARIANT (t)
12259 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12260 cp_pedwarn ("using typedef-name `%D' after `%s'",
12261 TYPE_NAME (t), tag_name (tag_code));
12262 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12263 cp_error ("using template type parameter `%T' after `%s'",
12264 t, tag_name (tag_code));
12265
12266 ref = t;
12267 }
12268 else
12269 ref = lookup_tag (code, name, b, 0);
12270
12271 if (! ref)
12272 {
12273 /* Try finding it as a type declaration. If that wins,
12274 use it. */
12275 ref = lookup_name (name, 1);
12276
12277 if (ref != NULL_TREE
12278 && processing_template_decl
12279 && DECL_CLASS_TEMPLATE_P (ref)
12280 && template_class_depth (current_class_type) == 0)
12281 /* Since GLOBALIZE is true, we're declaring a global
12282 template, so we want this type. */
12283 ref = DECL_RESULT (ref);
12284
12285 if (ref && TREE_CODE (ref) == TYPE_DECL
12286 && TREE_CODE (TREE_TYPE (ref)) == code)
12287 ref = TREE_TYPE (ref);
12288 else
12289 ref = NULL_TREE;
12290 }
12291
12292 if (ref && current_class_type
12293 && template_class_depth (current_class_type)
12294 && PROCESSING_REAL_TEMPLATE_DECL_P ())
12295 {
12296 /* Since GLOBALIZE is non-zero, we are not looking at a
12297 definition of this tag. Since, in addition, we are currently
12298 processing a (member) template declaration of a template
12299 class, we must be very careful; consider:
12300
12301 template <class X>
12302 struct S1
12303
12304 template <class U>
12305 struct S2
12306 { template <class V>
12307 friend struct S1; };
12308
12309 Here, the S2::S1 declaration should not be confused with the
12310 outer declaration. In particular, the inner version should
12311 have a template parameter of level 2, not level 1. This
12312 would be particularly important if the member declaration
12313 were instead:
12314
12315 template <class V = U> friend struct S1;
12316
12317 say, when we should tsubst into `U' when instantiating
12318 S2. On the other hand, when presented with:
12319
12320 template <class T>
12321 struct S1 {
12322 template <class U>
12323 struct S2 {};
12324 template <class U>
12325 friend struct S2;
12326 };
12327
12328 we must find the inner binding eventually. We
12329 accomplish this by making sure that the new type we
12330 create to represent this declaration has the right
12331 TYPE_CONTEXT. */
12332 context = TYPE_CONTEXT (ref);
12333 ref = NULL_TREE;
12334 }
12335 }
12336
12337 push_obstacks_nochange ();
12338
12339 if (! ref)
12340 {
12341 /* If no such tag is yet defined, create a forward-reference node
12342 and record it as the "definition".
12343 When a real declaration of this type is found,
12344 the forward-reference will be altered into a real type. */
12345
12346 /* In C++, since these migrate into the global scope, we must
12347 build them on the permanent obstack. */
12348
12349 temp = allocation_temporary_p ();
12350 if (temp)
12351 end_temporary_allocation ();
12352
12353 if (code == ENUMERAL_TYPE)
12354 {
12355 cp_error ("use of enum `%#D' without previous declaration", name);
12356
12357 ref = make_node (ENUMERAL_TYPE);
12358
12359 /* Give the type a default layout like unsigned int
12360 to avoid crashing if it does not get defined. */
12361 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12362 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12363 TREE_UNSIGNED (ref) = 1;
12364 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12365 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12366 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12367
12368 /* Enable us to recognize when a type is created in class context.
12369 To do nested classes correctly, this should probably be cleared
12370 out when we leave this classes scope. Currently this in only
12371 done in `start_enum'. */
12372
12373 pushtag (name, ref, globalize);
12374 }
12375 else
12376 {
12377 struct binding_level *old_b = class_binding_level;
12378
12379 ref = make_lang_type (code);
12380 TYPE_CONTEXT (ref) = context;
12381
12382 #ifdef NONNESTED_CLASSES
12383 /* Class types don't nest the way enums do. */
12384 class_binding_level = (struct binding_level *)0;
12385 #endif
12386 pushtag (name, ref, globalize);
12387 class_binding_level = old_b;
12388 }
12389 }
12390 else
12391 {
12392 /* If it no longer looks like a nested type, make sure it's
12393 in global scope.
12394 If it is not an IDENTIFIER, this is not a declaration */
12395 if (b->namespace_p && !class_binding_level
12396 && TREE_CODE (name) == IDENTIFIER_NODE)
12397 {
12398 if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12399 SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12400 }
12401
12402 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12403 redeclare_class_template (ref, current_template_parms);
12404 }
12405
12406 /* Until the type is defined, tentatively accept whatever
12407 structure tag the user hands us. */
12408 if (TYPE_SIZE (ref) == NULL_TREE
12409 && ref != current_class_type
12410 /* Have to check this, in case we have contradictory tag info. */
12411 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12412 {
12413 if (tag_code == class_type)
12414 CLASSTYPE_DECLARED_CLASS (ref) = 1;
12415 else if (tag_code == record_type)
12416 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12417 }
12418
12419 pop_obstacks ();
12420
12421 TREE_TYPE (ref) = attributes;
12422
12423 return ref;
12424 }
12425
12426 tree
12427 xref_tag_from_type (old, id, globalize)
12428 tree old, id;
12429 int globalize;
12430 {
12431 tree code_type_node;
12432
12433 if (TREE_CODE (old) == RECORD_TYPE)
12434 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12435 ? class_type_node : record_type_node);
12436 else
12437 code_type_node = union_type_node;
12438
12439 if (id == NULL_TREE)
12440 id = TYPE_IDENTIFIER (old);
12441
12442 return xref_tag (code_type_node, id, globalize);
12443 }
12444
12445 /* REF is a type (named NAME), for which we have just seen some
12446 baseclasses. BINFO is a list of those baseclasses; the
12447 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12448 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12449 struct, or union. */
12450
12451 void
12452 xref_basetypes (code_type_node, name, ref, binfo)
12453 tree code_type_node;
12454 tree name, ref;
12455 tree binfo;
12456 {
12457 /* In the declaration `A : X, Y, ... Z' we mark all the types
12458 (A, X, Y, ..., Z) so we can check for duplicates. */
12459 tree binfos;
12460 tree base;
12461
12462 int i, len;
12463 enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12464
12465 if (tag_code == union_type)
12466 {
12467 cp_error ("derived union `%T' invalid", ref);
12468 return;
12469 }
12470
12471 len = list_length (binfo);
12472 push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12473
12474 /* First, make sure that any templates in base-classes are
12475 instantiated. This ensures that if we call ourselves recursively
12476 we do not get confused about which classes are marked and which
12477 are not. */
12478 for (base = binfo; base; base = TREE_CHAIN (base))
12479 complete_type (TREE_VALUE (base));
12480
12481 SET_CLASSTYPE_MARKED (ref);
12482 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12483
12484 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12485 {
12486 /* The base of a derived struct is public by default. */
12487 int via_public
12488 = (TREE_PURPOSE (binfo) == access_public_node
12489 || TREE_PURPOSE (binfo) == access_public_virtual_node
12490 || (tag_code != class_type
12491 && (TREE_PURPOSE (binfo) == access_default_node
12492 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12493 int via_protected
12494 = (TREE_PURPOSE (binfo) == access_protected_node
12495 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12496 int via_virtual
12497 = (TREE_PURPOSE (binfo) == access_private_virtual_node
12498 || TREE_PURPOSE (binfo) == access_protected_virtual_node
12499 || TREE_PURPOSE (binfo) == access_public_virtual_node
12500 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12501 tree basetype = TREE_VALUE (binfo);
12502 tree base_binfo;
12503
12504 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12505 basetype = TREE_TYPE (basetype);
12506 if (!basetype
12507 || (TREE_CODE (basetype) != RECORD_TYPE
12508 && TREE_CODE (basetype) != TYPENAME_TYPE
12509 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12510 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12511 {
12512 cp_error ("base type `%T' fails to be a struct or class type",
12513 TREE_VALUE (binfo));
12514 continue;
12515 }
12516
12517 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12518
12519 /* This code replaces similar code in layout_basetypes.
12520 We put the complete_type first for implicit `typename'. */
12521 if (TYPE_SIZE (basetype) == NULL_TREE
12522 && ! (current_template_parms && uses_template_parms (basetype)))
12523 {
12524 cp_error ("base class `%T' has incomplete type", basetype);
12525 continue;
12526 }
12527 else
12528 {
12529 if (CLASSTYPE_MARKED (basetype))
12530 {
12531 if (basetype == ref)
12532 cp_error ("recursive type `%T' undefined", basetype);
12533 else
12534 cp_error ("duplicate base type `%T' invalid", basetype);
12535 continue;
12536 }
12537
12538 if (TYPE_FOR_JAVA (basetype)
12539 && current_lang_stack == current_lang_base)
12540 TYPE_FOR_JAVA (ref) = 1;
12541
12542 /* Note that the BINFO records which describe individual
12543 inheritances are *not* shared in the lattice! They
12544 cannot be shared because a given baseclass may be
12545 inherited with different `accessibility' by different
12546 derived classes. (Each BINFO record describing an
12547 individual inheritance contains flags which say what
12548 the `accessibility' of that particular inheritance is.) */
12549
12550 base_binfo
12551 = make_binfo (integer_zero_node, basetype,
12552 CLASS_TYPE_P (basetype)
12553 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12554 CLASS_TYPE_P (basetype)
12555 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12556
12557 TREE_VEC_ELT (binfos, i) = base_binfo;
12558 TREE_VIA_PUBLIC (base_binfo) = via_public;
12559 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12560 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12561 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12562
12563 /* We need to unshare the binfos now so that lookups during class
12564 definition work. */
12565 unshare_base_binfos (base_binfo);
12566
12567 SET_CLASSTYPE_MARKED (basetype);
12568
12569 /* We are free to modify these bits because they are meaningless
12570 at top level, and BASETYPE is a top-level type. */
12571 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12572 {
12573 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12574 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12575 }
12576
12577 if (CLASS_TYPE_P (basetype))
12578 {
12579 TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12580 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12581 }
12582
12583 i += 1;
12584 }
12585 }
12586 if (i)
12587 TREE_VEC_LENGTH (binfos) = i;
12588 else
12589 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12590
12591 if (i > 1)
12592 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12593 else if (i == 1)
12594 {
12595 tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12596
12597 if (CLASS_TYPE_P (basetype))
12598 TYPE_USES_MULTIPLE_INHERITANCE (ref)
12599 = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12600 }
12601
12602 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12603 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12604
12605 /* Unmark all the types. */
12606 while (--i >= 0)
12607 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12608 CLEAR_CLASSTYPE_MARKED (ref);
12609
12610 /* Now that we know all the base-classes, set up the list of virtual
12611 bases. */
12612 CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12613
12614 pop_obstacks ();
12615 }
12616
12617 \f
12618 /* Begin compiling the definition of an enumeration type.
12619 NAME is its name (or null if anonymous).
12620 Returns the type object, as yet incomplete.
12621 Also records info about it so that build_enumerator
12622 may be used to declare the individual values as they are read. */
12623
12624 tree
12625 start_enum (name)
12626 tree name;
12627 {
12628 register tree enumtype = NULL_TREE;
12629 struct binding_level *b = current_binding_level;
12630
12631 /* We are wasting space here and putting these on the permanent_obstack so
12632 that typeid(local enum) will work correctly. */
12633 push_obstacks (&permanent_obstack, &permanent_obstack);
12634
12635 /* If this is the real definition for a previous forward reference,
12636 fill in the contents in the same object that used to be the
12637 forward reference. */
12638
12639 if (name != NULL_TREE)
12640 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12641
12642 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12643 {
12644 cp_error ("multiple definition of `%#T'", enumtype);
12645 cp_error_at ("previous definition here", enumtype);
12646 }
12647 else
12648 {
12649 enumtype = make_node (ENUMERAL_TYPE);
12650 pushtag (name, enumtype, 0);
12651 }
12652
12653 if (current_class_type)
12654 TREE_ADDRESSABLE (b->tags) = 1;
12655
12656 /* We don't copy this value because build_enumerator needs to do it. */
12657 enum_next_value = integer_zero_node;
12658 enum_overflow = 0;
12659
12660 GNU_xref_decl (current_function_decl, enumtype);
12661 return enumtype;
12662 }
12663
12664 /* After processing and defining all the values of an enumeration type,
12665 install their decls in the enumeration type and finish it off.
12666 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12667 Returns ENUMTYPE. */
12668
12669 tree
12670 finish_enum (enumtype)
12671 tree enumtype;
12672 {
12673 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12674 /* Calculate the maximum value of any enumerator in this type. */
12675
12676 tree values = TYPE_VALUES (enumtype);
12677 if (values)
12678 {
12679 tree pair;
12680
12681 for (pair = values; pair; pair = TREE_CHAIN (pair))
12682 {
12683 tree decl;
12684 tree value;
12685
12686 /* The TREE_VALUE is a CONST_DECL for this enumeration
12687 constant. */
12688 decl = TREE_VALUE (pair);
12689
12690 /* The DECL_INITIAL will be NULL if we are processing a
12691 template declaration and this enumeration constant had no
12692 explicit initializer. */
12693 value = DECL_INITIAL (decl);
12694 if (value && !processing_template_decl)
12695 {
12696 /* Set the TREE_TYPE for the VALUE as well. That's so
12697 that when we call decl_constant_value we get an
12698 entity of the right type (but with the constant
12699 value). Since we shouldn't ever call
12700 decl_constant_value on a template type, there's no
12701 reason to do that when processing_template_decl.
12702 And, if the expression is something like a
12703 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12704 wreak havoc on the intended type of the expression.
12705
12706 Of course, there's also no point in trying to compute
12707 minimum or maximum values if we're in a template. */
12708 TREE_TYPE (value) = enumtype;
12709
12710 if (!minnode)
12711 minnode = maxnode = value;
12712 else if (tree_int_cst_lt (maxnode, value))
12713 maxnode = value;
12714 else if (tree_int_cst_lt (value, minnode))
12715 minnode = value;
12716 }
12717
12718 if (processing_template_decl)
12719 /* If this is just a template, leave the CONST_DECL
12720 alone. That way tsubst_copy will find CONST_DECLs for
12721 CONST_DECLs, and not INTEGER_CSTs. */
12722 ;
12723 else
12724 /* In the list we're building up, we want the enumeration
12725 values, not the CONST_DECLs. */
12726 TREE_VALUE (pair) = value;
12727 }
12728 }
12729 else
12730 maxnode = minnode = integer_zero_node;
12731
12732 TYPE_VALUES (enumtype) = nreverse (values);
12733
12734 if (processing_template_decl)
12735 {
12736 tree scope = current_scope ();
12737 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12738 add_tree (build_min (TAG_DEFN, enumtype));
12739 }
12740 else
12741 {
12742 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12743 int lowprec = min_precision (minnode, unsignedp);
12744 int highprec = min_precision (maxnode, unsignedp);
12745 int precision = MAX (lowprec, highprec);
12746 tree tem;
12747
12748 TYPE_SIZE (enumtype) = NULL_TREE;
12749
12750 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
12751
12752 TYPE_PRECISION (enumtype) = precision;
12753 if (unsignedp)
12754 fixup_unsigned_type (enumtype);
12755 else
12756 fixup_signed_type (enumtype);
12757
12758 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12759 /* Use the width of the narrowest normal C type which is wide
12760 enough. */
12761 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12762 (precision, 1));
12763 else
12764 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12765
12766 TYPE_SIZE (enumtype) = 0;
12767 layout_type (enumtype);
12768
12769 /* Fix up all variant types of this enum type. */
12770 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12771 tem = TYPE_NEXT_VARIANT (tem))
12772 {
12773 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12774 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12775 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12776 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12777 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12778 TYPE_MODE (tem) = TYPE_MODE (enumtype);
12779 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12780 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12781 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12782 }
12783
12784 /* Finish debugging output for this type. */
12785 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12786 }
12787
12788 /* In start_enum we pushed obstacks. Here, we must pop them. */
12789 pop_obstacks ();
12790
12791 return enumtype;
12792 }
12793
12794 /* Build and install a CONST_DECL for an enumeration constant of the
12795 enumeration type TYPE whose NAME and VALUE (if any) are provided.
12796 Assignment of sequential values by default is handled here. */
12797
12798 tree
12799 build_enumerator (name, value, type)
12800 tree name;
12801 tree value;
12802 tree type;
12803 {
12804 tree decl, result;
12805 tree context;
12806
12807 /* Remove no-op casts from the value. */
12808 if (value)
12809 STRIP_TYPE_NOPS (value);
12810
12811 if (! processing_template_decl)
12812 {
12813 /* Validate and default VALUE. */
12814 if (value != NULL_TREE)
12815 {
12816 if (TREE_READONLY_DECL_P (value))
12817 value = decl_constant_value (value);
12818
12819 if (TREE_CODE (value) == INTEGER_CST)
12820 {
12821 value = default_conversion (value);
12822 constant_expression_warning (value);
12823 }
12824 else
12825 {
12826 cp_error ("enumerator value for `%D' not integer constant", name);
12827 value = NULL_TREE;
12828 }
12829 }
12830
12831 /* Default based on previous value. */
12832 if (value == NULL_TREE && ! processing_template_decl)
12833 {
12834 value = enum_next_value;
12835 if (enum_overflow)
12836 cp_error ("overflow in enumeration values at `%D'", name);
12837 }
12838
12839 /* Remove no-op casts from the value. */
12840 if (value)
12841 STRIP_TYPE_NOPS (value);
12842 #if 0
12843 /* To fix MAX_VAL enum consts. (bkoz) */
12844 TREE_TYPE (value) = integer_type_node;
12845 #endif
12846 }
12847
12848 /* We always have to copy here; not all INTEGER_CSTs are unshared.
12849 Even in other cases, we will later (in finish_enum) be setting the
12850 type of VALUE. */
12851 if (value != NULL_TREE)
12852 value = copy_node (value);
12853
12854 /* C++ associates enums with global, function, or class declarations. */
12855
12856 context = current_scope ();
12857 if (context && context == current_class_type)
12858 /* This enum declaration is local to the class. */
12859 decl = build_lang_decl (CONST_DECL, name, type);
12860 else
12861 /* It's a global enum, or it's local to a function. (Note local to
12862 a function could mean local to a class method. */
12863 decl = build_decl (CONST_DECL, name, type);
12864
12865 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12866 DECL_INITIAL (decl) = value;
12867 TREE_READONLY (decl) = 1;
12868
12869 if (context && context == current_class_type)
12870 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12871 on the TYPE_FIELDS list for `S'. (That's so that you can say
12872 things like `S::i' later.) */
12873 finish_member_declaration (decl);
12874 else
12875 {
12876 pushdecl (decl);
12877 GNU_xref_decl (current_function_decl, decl);
12878 }
12879
12880 if (! processing_template_decl)
12881 {
12882 /* Set basis for default for next value. */
12883 enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12884 integer_one_node, PLUS_EXPR);
12885 enum_overflow = tree_int_cst_lt (enum_next_value, value);
12886 }
12887
12888 result = saveable_tree_cons (name, decl, NULL_TREE);
12889 return result;
12890 }
12891
12892 \f
12893 static int function_depth;
12894
12895 /* Create the FUNCTION_DECL for a function definition.
12896 DECLSPECS and DECLARATOR are the parts of the declaration;
12897 they describe the function's name and the type it returns,
12898 but twisted together in a fashion that parallels the syntax of C.
12899
12900 If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12901 the function we are about to process; DECLSPECS are ignored. For
12902 example, we set PRE_PARSED_P when processing the definition of
12903 inline function that was defined in-class; the definition is
12904 actually processed when the class is complete. In this case,
12905 PRE_PARSED_P is 2. We also set PRE_PARSED_P when instanting the
12906 body of a template function, and when constructing thunk functions
12907 and such; in these cases PRE_PARSED_P is 1.
12908
12909 This function creates a binding context for the function body
12910 as well as setting up the FUNCTION_DECL in current_function_decl.
12911
12912 Returns 1 on success. If the DECLARATOR is not suitable for a function
12913 (it defines a datum instead), we return 0, which tells
12914 yyparse to report a parse error.
12915
12916 For C++, we must first check whether that datum makes any sense.
12917 For example, "class A local_a(1,2);" means that variable local_a
12918 is an aggregate of type A, which should have a constructor
12919 applied to it with the argument list [1, 2].
12920
12921 @@ There is currently no way to retrieve the storage
12922 @@ allocated to FUNCTION (or all of its parms) if we return
12923 @@ something we had previously. */
12924
12925 int
12926 start_function (declspecs, declarator, attrs, pre_parsed_p)
12927 tree declspecs, declarator, attrs;
12928 int pre_parsed_p;
12929 {
12930 tree decl1;
12931 tree ctype = NULL_TREE;
12932 tree fntype;
12933 tree restype;
12934 extern int have_extern_spec;
12935 extern int used_extern_spec;
12936 int doing_friend = 0;
12937
12938 /* Sanity check. */
12939 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12940 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12941
12942 /* Assume, until we see it does. */
12943 current_function_returns_value = 0;
12944 current_function_returns_null = 0;
12945 named_labels = 0;
12946 current_function_assigns_this = 0;
12947 current_function_just_assigned_this = 0;
12948 current_function_parms_stored = 0;
12949 original_result_rtx = NULL_RTX;
12950 base_init_expr = NULL_TREE;
12951 current_base_init_list = NULL_TREE;
12952 current_member_init_list = NULL_TREE;
12953 ctor_label = dtor_label = NULL_TREE;
12954 static_labelno = 0;
12955 in_function_try_handler = 0;
12956
12957 clear_temp_name ();
12958
12959 /* This should only be done once on the top most decl. */
12960 if (have_extern_spec && !used_extern_spec)
12961 {
12962 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12963 used_extern_spec = 1;
12964 }
12965
12966 if (pre_parsed_p)
12967 {
12968 decl1 = declarator;
12969
12970 fntype = TREE_TYPE (decl1);
12971 if (TREE_CODE (fntype) == METHOD_TYPE)
12972 ctype = TYPE_METHOD_BASETYPE (fntype);
12973
12974 /* ANSI C++ June 5 1992 WP 11.4.5. A friend function defined in a
12975 class is in the (lexical) scope of the class in which it is
12976 defined. */
12977 if (!ctype && DECL_FRIEND_P (decl1))
12978 {
12979 ctype = DECL_CLASS_CONTEXT (decl1);
12980
12981 /* CTYPE could be null here if we're dealing with a template;
12982 for example, `inline friend float foo()' inside a template
12983 will have no CTYPE set. */
12984 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12985 ctype = NULL_TREE;
12986 else
12987 doing_friend = 1;
12988 }
12989
12990 last_function_parms = DECL_ARGUMENTS (decl1);
12991 last_function_parm_tags = NULL_TREE;
12992 }
12993 else
12994 {
12995 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12996 /* If the declarator is not suitable for a function definition,
12997 cause a syntax error. */
12998 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12999
13000 fntype = TREE_TYPE (decl1);
13001
13002 restype = TREE_TYPE (fntype);
13003 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13004 {
13005 cp_error ("semicolon missing after declaration of `%#T'", restype);
13006 shadow_tag (build_expr_list (NULL_TREE, restype));
13007 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13008 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13009 fntype = build_function_type (integer_type_node,
13010 TYPE_ARG_TYPES (fntype));
13011 else
13012 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13013 integer_type_node,
13014 TYPE_ARG_TYPES (fntype));
13015 TREE_TYPE (decl1) = fntype;
13016 }
13017
13018 if (TREE_CODE (fntype) == METHOD_TYPE)
13019 ctype = TYPE_METHOD_BASETYPE (fntype);
13020 else if (DECL_MAIN_P (decl1))
13021 {
13022 /* If this doesn't return integer_type, complain. */
13023 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13024 {
13025 if (pedantic || warn_return_type)
13026 pedwarn ("return type for `main' changed to `int'");
13027 TREE_TYPE (decl1) = fntype = default_function_type;
13028 }
13029 }
13030 }
13031
13032 /* Warn if function was previously implicitly declared
13033 (but not if we warned then). */
13034 if (! warn_implicit
13035 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13036 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13037
13038 if (!building_stmt_tree ())
13039 announce_function (decl1);
13040
13041 /* Set up current_class_type, and enter the scope of the class, if
13042 appropriate. */
13043 if (ctype)
13044 push_nested_class (ctype, 1);
13045 else if (DECL_STATIC_FUNCTION_P (decl1))
13046 push_nested_class (DECL_CONTEXT (decl1), 2);
13047
13048 /* Now that we have entered the scope of the class, we must restore
13049 the bindings for any template parameters surrounding DECL1, if it
13050 is an inline member template. (Order is important; consider the
13051 case where a template parameter has the same name as a field of
13052 the class.) It is not until after this point that
13053 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13054 if (pre_parsed_p == 2)
13055 maybe_begin_member_template_processing (decl1);
13056
13057 /* Effective C++ rule 15. See also c_expand_return. */
13058 if (warn_ecpp
13059 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13060 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13061 cp_warning ("`operator=' should return a reference to `*this'");
13062
13063 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13064 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13065 DECL_INITIAL (decl1) = error_mark_node;
13066
13067 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13068 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13069 #endif
13070
13071 /* This function exists in static storage.
13072 (This does not mean `static' in the C sense!) */
13073 TREE_STATIC (decl1) = 1;
13074
13075 /* We must call push_template_decl after current_class_type is set
13076 up. (If we are processing inline definitions after exiting a
13077 class scope, current_class_type will be NULL_TREE until set above
13078 by push_nested_class.) */
13079 if (processing_template_decl)
13080 decl1 = push_template_decl (decl1);
13081
13082 /* We are now in the scope of the function being defined. */
13083 current_function_decl = decl1;
13084
13085 /* Save the parm names or decls from this function's declarator
13086 where store_parm_decls will find them. */
13087 current_function_parms = last_function_parms;
13088 current_function_parm_tags = last_function_parm_tags;
13089
13090 if (! processing_template_decl)
13091 {
13092 /* In a function definition, arg types must be complete. */
13093 require_complete_types_for_parms (current_function_parms);
13094
13095 if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
13096 {
13097 cp_error ("return-type `%#T' is an incomplete type",
13098 TREE_TYPE (fntype));
13099
13100 /* Make it return void instead, but don't change the
13101 type of the DECL_RESULT, in case we have a named return value. */
13102 if (ctype)
13103 TREE_TYPE (decl1)
13104 = build_cplus_method_type (build_type_variant (ctype,
13105 TREE_READONLY (decl1),
13106 TREE_SIDE_EFFECTS (decl1)),
13107 void_type_node,
13108 FUNCTION_ARG_CHAIN (decl1));
13109 else
13110 TREE_TYPE (decl1)
13111 = build_function_type (void_type_node,
13112 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13113 DECL_RESULT (decl1)
13114 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13115 TREE_READONLY (DECL_RESULT (decl1))
13116 = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13117 TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13118 = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13119 }
13120
13121 abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13122 }
13123
13124 /* Record the decl so that the function name is defined.
13125 If we already have a decl for this name, and it is a FUNCTION_DECL,
13126 use the old decl. */
13127 if (!processing_template_decl && pre_parsed_p == 0)
13128 {
13129 /* A specialization is not used to guide overload resolution. */
13130 if ((flag_guiding_decls
13131 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13132 && ! DECL_FUNCTION_MEMBER_P (decl1))
13133 decl1 = pushdecl (decl1);
13134 else
13135 {
13136 /* We need to set the DECL_CONTEXT. */
13137 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13138 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13139 /* And make sure we have enough default args. */
13140 check_default_args (decl1);
13141 }
13142 DECL_MAIN_VARIANT (decl1) = decl1;
13143 fntype = TREE_TYPE (decl1);
13144 }
13145
13146 current_function_decl = decl1;
13147
13148 if (DECL_INTERFACE_KNOWN (decl1))
13149 {
13150 tree ctx = hack_decl_function_context (decl1);
13151
13152 if (DECL_NOT_REALLY_EXTERN (decl1))
13153 DECL_EXTERNAL (decl1) = 0;
13154
13155 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
13156 && TREE_PUBLIC (ctx))
13157 /* This is a function in a local class in an extern inline
13158 function. */
13159 comdat_linkage (decl1);
13160 }
13161 /* If this function belongs to an interface, it is public.
13162 If it belongs to someone else's interface, it is also external.
13163 This only affects inlines and template instantiations. */
13164 else if (interface_unknown == 0
13165 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13166 || flag_alt_external_templates))
13167 {
13168 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13169 || processing_template_decl)
13170 {
13171 DECL_EXTERNAL (decl1)
13172 = (interface_only
13173 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13174 && !DECL_VINDEX (decl1)));
13175
13176 /* For WIN32 we also want to put these in linkonce sections. */
13177 maybe_make_one_only (decl1);
13178 }
13179 else
13180 DECL_EXTERNAL (decl1) = 0;
13181 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13182 DECL_INTERFACE_KNOWN (decl1) = 1;
13183 }
13184 else if (interface_unknown && interface_only
13185 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13186 || flag_alt_external_templates))
13187 {
13188 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13189 interface, we will have interface_only set but not
13190 interface_known. In that case, we don't want to use the normal
13191 heuristics because someone will supply a #pragma implementation
13192 elsewhere, and deducing it here would produce a conflict. */
13193 comdat_linkage (decl1);
13194 DECL_EXTERNAL (decl1) = 0;
13195 DECL_INTERFACE_KNOWN (decl1) = 1;
13196 DECL_DEFER_OUTPUT (decl1) = 1;
13197 }
13198 else
13199 {
13200 /* This is a definition, not a reference.
13201 So clear DECL_EXTERNAL. */
13202 DECL_EXTERNAL (decl1) = 0;
13203
13204 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13205 && ! DECL_INTERFACE_KNOWN (decl1)
13206 /* Don't try to defer nested functions for now. */
13207 && ! hack_decl_function_context (decl1))
13208 DECL_DEFER_OUTPUT (decl1) = 1;
13209 else
13210 DECL_INTERFACE_KNOWN (decl1) = 1;
13211 }
13212
13213 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13214 {
13215 if (TREE_CODE (fntype) == METHOD_TYPE)
13216 TREE_TYPE (decl1) = fntype
13217 = build_function_type (TREE_TYPE (fntype),
13218 TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13219 current_function_parms = TREE_CHAIN (current_function_parms);
13220 DECL_ARGUMENTS (decl1) = current_function_parms;
13221 ctype = NULL_TREE;
13222 }
13223 restype = TREE_TYPE (fntype);
13224
13225 if (ctype)
13226 {
13227 /* If we're compiling a friend function, neither of the variables
13228 current_class_ptr nor current_class_type will have values. */
13229 if (! doing_friend)
13230 {
13231 /* We know that this was set up by `grokclassfn'.
13232 We do not wait until `store_parm_decls', since evil
13233 parse errors may never get us to that point. Here
13234 we keep the consistency between `current_class_type'
13235 and `current_class_ptr'. */
13236 tree t = current_function_parms;
13237 int i;
13238
13239 my_friendly_assert (t != NULL_TREE
13240 && TREE_CODE (t) == PARM_DECL, 162);
13241 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13242 19990811);
13243
13244 if (! hack_decl_function_context (decl1))
13245 temporary_allocation ();
13246 i = suspend_momentary ();
13247
13248 /* Normally, build_indirect_ref returns current_class_ref
13249 whenever current_class_ptr is dereferenced. This time,
13250 however, we want it to *create* current_class_ref, so we
13251 temporarily clear current_class_ptr to fool it. */
13252 current_class_ptr = NULL_TREE;
13253 current_class_ref = build_indirect_ref (t, NULL_PTR);
13254 current_class_ptr = t;
13255
13256 resume_momentary (i);
13257 if (! hack_decl_function_context (decl1))
13258 end_temporary_allocation ();
13259 }
13260 }
13261 else
13262 current_class_ptr = current_class_ref = NULL_TREE;
13263
13264 pushlevel (0);
13265 current_binding_level->parm_flag = 1;
13266
13267 if (attrs)
13268 cplus_decl_attributes (decl1, NULL_TREE, attrs);
13269
13270 if (!building_stmt_tree ())
13271 {
13272 GNU_xref_function (decl1, current_function_parms);
13273 make_function_rtl (decl1);
13274 }
13275
13276 /* Promote the value to int before returning it. */
13277 if (C_PROMOTING_INTEGER_TYPE_P (restype))
13278 restype = type_promotes_to (restype);
13279
13280 /* If this fcn was already referenced via a block-scope `extern' decl
13281 (or an implicit decl), propagate certain information about the usage. */
13282 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13283 TREE_ADDRESSABLE (decl1) = 1;
13284
13285 if (DECL_RESULT (decl1) == NULL_TREE)
13286 {
13287 DECL_RESULT (decl1)
13288 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13289 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13290 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13291 }
13292
13293 /* Allocate further tree nodes temporarily during compilation
13294 of this function only. Tiemann moved up here from bottom of fn. */
13295 /* If this is a nested function, then we must continue to allocate RTL
13296 on the permanent obstack in case we need to inline it later. */
13297 if (! hack_decl_function_context (decl1))
13298 temporary_allocation ();
13299
13300 /* Make sure that we always have a momntary obstack while we're in a
13301 function body. */
13302 push_momentary ();
13303
13304 if (building_stmt_tree ())
13305 begin_stmt_tree (decl1);
13306
13307 ++function_depth;
13308
13309 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13310 && DECL_LANGUAGE (decl1) == lang_cplusplus)
13311 {
13312 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13313 ctor_label = NULL_TREE;
13314 }
13315 else
13316 {
13317 dtor_label = NULL_TREE;
13318 if (DECL_CONSTRUCTOR_P (decl1))
13319 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13320 }
13321
13322 return 1;
13323 }
13324 \f
13325 /* Called after store_parm_decls for a function-try-block. We need to update
13326 last_parm_cleanup_insn so that the base initializers for a constructor
13327 are run within this block, not before it. */
13328
13329 void
13330 expand_start_early_try_stmts ()
13331 {
13332 expand_start_try_stmts ();
13333 last_parm_cleanup_insn = get_last_insn ();
13334 }
13335
13336 /* Store the parameter declarations into the current function declaration.
13337 This is called after parsing the parameter declarations, before
13338 digesting the body of the function.
13339
13340 Also install to binding contour return value identifier, if any. */
13341
13342 void
13343 store_parm_decls ()
13344 {
13345 register tree fndecl = current_function_decl;
13346 register tree parm;
13347 int parms_have_cleanups = 0;
13348 tree cleanups = NULL_TREE;
13349
13350 /* This is either a chain of PARM_DECLs (when a prototype is used). */
13351 tree specparms = current_function_parms;
13352
13353 /* This is a list of types declared among parms in a prototype. */
13354 tree parmtags = current_function_parm_tags;
13355
13356 /* This is a chain of any other decls that came in among the parm
13357 declarations. If a parm is declared with enum {foo, bar} x;
13358 then CONST_DECLs for foo and bar are put here. */
13359 tree nonparms = NULL_TREE;
13360
13361 if (toplevel_bindings_p ())
13362 fatal ("parse errors have confused me too much");
13363
13364 /* Initialize RTL machinery. */
13365 init_function_start (fndecl, input_filename, lineno);
13366 /* Even though we're inside a function body, we still don't want to
13367 call expand_expr to calculate the size of a variable-sized array.
13368 We haven't necessarily assigned RTL to all variables yet, so it's
13369 not safe to try to expand expressions involving them. */
13370 immediate_size_expand = 0;
13371 get_pending_sizes ();
13372
13373 /* Create a binding level for the parms. */
13374 expand_start_bindings (0);
13375
13376 if (specparms != NULL_TREE)
13377 {
13378 /* This case is when the function was defined with an ANSI prototype.
13379 The parms already have decls, so we need not do anything here
13380 except record them as in effect
13381 and complain if any redundant old-style parm decls were written. */
13382
13383 register tree next;
13384
13385 /* Must clear this because it might contain TYPE_DECLs declared
13386 at class level. */
13387 storedecls (NULL_TREE);
13388
13389 for (parm = nreverse (specparms); parm; parm = next)
13390 {
13391 next = TREE_CHAIN (parm);
13392 if (TREE_CODE (parm) == PARM_DECL)
13393 {
13394 tree cleanup;
13395 if (DECL_NAME (parm) == NULL_TREE)
13396 {
13397 pushdecl (parm);
13398 }
13399 else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13400 cp_error ("parameter `%D' declared void", parm);
13401 else
13402 {
13403 /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13404 A parameter is assumed not to have any side effects.
13405 If this should change for any reason, then this
13406 will have to wrap the bashed reference type in a save_expr.
13407
13408 Also, if the parameter type is declared to be an X
13409 and there is an X(X&) constructor, we cannot lay it
13410 into the stack (any more), so we make this parameter
13411 look like it is really of reference type. Functions
13412 which pass parameters to this function will know to
13413 create a temporary in their frame, and pass a reference
13414 to that. */
13415
13416 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13417 && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13418 SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13419
13420 pushdecl (parm);
13421 }
13422 if (! building_stmt_tree ()
13423 && (cleanup = maybe_build_cleanup (parm), cleanup))
13424 {
13425 expand_decl (parm);
13426 parms_have_cleanups = 1;
13427
13428 /* Keep track of the cleanups. */
13429 cleanups = tree_cons (parm, cleanup, cleanups);
13430 }
13431 }
13432 else
13433 {
13434 /* If we find an enum constant or a type tag,
13435 put it aside for the moment. */
13436 TREE_CHAIN (parm) = NULL_TREE;
13437 nonparms = chainon (nonparms, parm);
13438 }
13439 }
13440
13441 /* Get the decls in their original chain order
13442 and record in the function. This is all and only the
13443 PARM_DECLs that were pushed into scope by the loop above. */
13444 DECL_ARGUMENTS (fndecl) = getdecls ();
13445
13446 storetags (chainon (parmtags, gettags ()));
13447 }
13448 else
13449 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13450
13451 /* Now store the final chain of decls for the arguments
13452 as the decl-chain of the current lexical scope.
13453 Put the enumerators in as well, at the front so that
13454 DECL_ARGUMENTS is not modified. */
13455
13456 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13457
13458 /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function. */
13459 declare_function_name ();
13460
13461 /* Initialize the RTL code for the function. */
13462 DECL_SAVED_INSNS (fndecl) = 0;
13463 if (! building_stmt_tree ())
13464 expand_function_start (fndecl, parms_have_cleanups);
13465
13466 current_function_parms_stored = 1;
13467
13468 /* If this function is `main', emit a call to `__main'
13469 to run global initializers, etc. */
13470 if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13471 expand_main_function ();
13472
13473 /* Now that we have initialized the parms, we can start their
13474 cleanups. We cannot do this before, since expand_decl_cleanup
13475 should not be called before the parm can be used. */
13476 if (cleanups && !building_stmt_tree ())
13477 {
13478 for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13479 {
13480 if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13481 cp_error ("parser lost in parsing declaration of `%D'",
13482 TREE_PURPOSE (cleanups));
13483 }
13484 }
13485
13486 /* Create a binding contour which can be used to catch
13487 cleanup-generated temporaries. Also, if the return value needs or
13488 has initialization, deal with that now. */
13489 if (parms_have_cleanups)
13490 {
13491 pushlevel (0);
13492 if (!building_stmt_tree ())
13493 expand_start_bindings (0);
13494 }
13495
13496 if (! building_stmt_tree () && flag_exceptions)
13497 {
13498 /* Do the starting of the exception specifications, if we have any. */
13499 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13500 expand_start_eh_spec ();
13501 }
13502
13503 last_parm_cleanup_insn = get_last_insn ();
13504 last_dtor_insn = get_last_insn ();
13505 }
13506
13507 /* Bind a name and initialization to the return value of
13508 the current function. */
13509
13510 void
13511 store_return_init (decl)
13512 tree decl;
13513 {
13514 /* If this named return value comes in a register, put it in a
13515 pseudo-register. */
13516 if (DECL_REGISTER (decl))
13517 {
13518 original_result_rtx = DECL_RTL (decl);
13519 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13520 }
13521 }
13522
13523 \f
13524 /* Finish up a function declaration and compile that function
13525 all the way to assembler language output. The free the storage
13526 for the function definition.
13527
13528 This is called after parsing the body of the function definition.
13529 LINENO is the current line number.
13530
13531 FLAGS is a bitwise or of the following values:
13532 1 - CALL_POPLEVEL
13533 An extra call to poplevel (and expand_end_bindings) must be
13534 made to take care of the binding contour for the base
13535 initializers. This is only relevant for constructors.
13536 2 - INCLASS_INLINE
13537 We just finished processing the body of an in-class inline
13538 function definition. (This processing will have taken place
13539 after the class definition is complete.)
13540
13541 NESTED is nonzero if we were in the middle of compiling another function
13542 when we started on this one. */
13543
13544 void
13545 finish_function (lineno, flags, nested)
13546 int lineno;
13547 int flags;
13548 int nested;
13549 {
13550 register tree fndecl = current_function_decl;
13551 tree fntype, ctype = NULL_TREE;
13552 rtx fn_last_parm_insn, insns;
13553 /* Label to use if this function is supposed to return a value. */
13554 tree no_return_label = NULL_TREE;
13555 tree decls = NULL_TREE;
13556 int call_poplevel = (flags & 1) != 0;
13557 int inclass_inline = (flags & 2) != 0;
13558 int expand_p;
13559
13560 /* When we get some parse errors, we can end up without a
13561 current_function_decl, so cope. */
13562 if (fndecl == NULL_TREE)
13563 return;
13564
13565 if (function_depth > 1)
13566 nested = 1;
13567
13568 fntype = TREE_TYPE (fndecl);
13569
13570 /* TREE_READONLY (fndecl) = 1;
13571 This caused &foo to be of type ptr-to-const-function
13572 which then got a warning when stored in a ptr-to-function variable. */
13573
13574 /* This happens on strange parse errors. */
13575 if (! current_function_parms_stored)
13576 {
13577 call_poplevel = 0;
13578 store_parm_decls ();
13579 }
13580
13581 if (building_stmt_tree ())
13582 {
13583 if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13584 {
13585 decls = getdecls ();
13586 expand_end_bindings (decls, decls != NULL_TREE, 0);
13587 poplevel (decls != NULL_TREE, 0, 0);
13588 }
13589 }
13590 else
13591 {
13592 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13593 {
13594 tree ttype = target_type (fntype);
13595 tree parmdecl;
13596
13597 if (IS_AGGR_TYPE (ttype))
13598 /* Let debugger know it should output info for this type. */
13599 note_debug_info_needed (ttype);
13600
13601 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13602 {
13603 ttype = target_type (TREE_TYPE (parmdecl));
13604 if (IS_AGGR_TYPE (ttype))
13605 /* Let debugger know it should output info for this type. */
13606 note_debug_info_needed (ttype);
13607 }
13608 }
13609
13610 /* Clean house because we will need to reorder insns here. */
13611 do_pending_stack_adjust ();
13612
13613 if (dtor_label)
13614 {
13615 tree binfo = TYPE_BINFO (current_class_type);
13616 tree cond = integer_one_node;
13617 tree exprstmt;
13618 tree in_charge_node = lookup_name (in_charge_identifier, 0);
13619 tree virtual_size;
13620 int ok_to_optimize_dtor = 0;
13621 int empty_dtor = get_last_insn () == last_dtor_insn;
13622
13623 if (current_function_assigns_this)
13624 cond = build (NE_EXPR, boolean_type_node,
13625 current_class_ptr, integer_zero_node);
13626 else
13627 {
13628 int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13629
13630 /* If this destructor is empty, then we don't need to check
13631 whether `this' is NULL in some cases. */
13632 if ((flag_this_is_variable & 1) == 0)
13633 ok_to_optimize_dtor = 1;
13634 else if (empty_dtor)
13635 ok_to_optimize_dtor
13636 = (n_baseclasses == 0
13637 || (n_baseclasses == 1
13638 && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13639 }
13640
13641 /* These initializations might go inline. Protect
13642 the binding level of the parms. */
13643 pushlevel (0);
13644 expand_start_bindings (0);
13645
13646 if (current_function_assigns_this)
13647 {
13648 current_function_assigns_this = 0;
13649 current_function_just_assigned_this = 0;
13650 }
13651
13652 /* Generate the code to call destructor on base class.
13653 If this destructor belongs to a class with virtual
13654 functions, then set the virtual function table
13655 pointer to represent the type of our base class. */
13656
13657 /* This side-effect makes call to `build_delete' generate the
13658 code we have to have at the end of this destructor.
13659 `build_delete' will set the flag again. */
13660 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13661
13662 /* These are two cases where we cannot delegate deletion. */
13663 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13664 || TYPE_GETS_REG_DELETE (current_class_type))
13665 exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13666 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13667 else
13668 exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13669 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13670
13671 /* If we did not assign to this, then `this' is non-zero at
13672 the end of a destructor. As a special optimization, don't
13673 emit test if this is an empty destructor. If it does nothing,
13674 it does nothing. If it calls a base destructor, the base
13675 destructor will perform the test. */
13676
13677 if (exprstmt != error_mark_node
13678 && (TREE_CODE (exprstmt) != NOP_EXPR
13679 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13680 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13681 {
13682 expand_label (dtor_label);
13683 if (cond != integer_one_node)
13684 expand_start_cond (cond, 0);
13685 if (exprstmt != void_zero_node)
13686 /* Don't call `expand_expr_stmt' if we're not going to do
13687 anything, since -Wall will give a diagnostic. */
13688 expand_expr_stmt (exprstmt);
13689
13690 /* Run destructor on all virtual baseclasses. */
13691 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13692 {
13693 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13694 expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13695 in_charge_node, integer_two_node), 0);
13696 while (vbases)
13697 {
13698 if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13699 {
13700 tree vb = get_vbase
13701 (BINFO_TYPE (vbases),
13702 TYPE_BINFO (current_class_type));
13703 expand_expr_stmt
13704 (build_scoped_method_call
13705 (current_class_ref, vb, dtor_identifier,
13706 build_expr_list (NULL_TREE, integer_zero_node)));
13707 }
13708 vbases = TREE_CHAIN (vbases);
13709 }
13710 expand_end_cond ();
13711 }
13712
13713 do_pending_stack_adjust ();
13714 if (cond != integer_one_node)
13715 expand_end_cond ();
13716 }
13717
13718 virtual_size = c_sizeof (current_class_type);
13719
13720 /* At the end, call delete if that's what's requested. */
13721
13722 /* FDIS sez: At the point of definition of a virtual destructor
13723 (including an implicit definition), non-placement operator
13724 delete shall be looked up in the scope of the destructor's
13725 class and if found shall be accessible and unambiguous.
13726
13727 This is somewhat unclear, but I take it to mean that if the
13728 class only defines placement deletes we don't do anything here.
13729 So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13730 for us if they ever try to delete one of these. */
13731
13732 if (TYPE_GETS_REG_DELETE (current_class_type)
13733 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13734 exprstmt = build_op_delete_call
13735 (DELETE_EXPR, current_class_ptr, virtual_size,
13736 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13737 else
13738 exprstmt = NULL_TREE;
13739
13740 if (exprstmt)
13741 {
13742 cond = build (BIT_AND_EXPR, integer_type_node,
13743 in_charge_node, integer_one_node);
13744 expand_start_cond (cond, 0);
13745 expand_expr_stmt (exprstmt);
13746 expand_end_cond ();
13747 }
13748
13749 /* End of destructor. */
13750 expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13751 poplevel (getdecls () != NULL_TREE, 0, 0);
13752
13753 /* Back to the top of destructor. */
13754 /* Don't execute destructor code if `this' is NULL. */
13755
13756 start_sequence ();
13757
13758 /* If the dtor is empty, and we know there is not possible way we
13759 could use any vtable entries, before they are possibly set by
13760 a base class dtor, we don't have to setup the vtables, as we
13761 know that any base class dtoring will set up any vtables it
13762 needs. We avoid MI, because one base class dtor can do a
13763 virtual dispatch to an overridden function that would need to
13764 have a non-related vtable set up, we cannot avoid setting up
13765 vtables in that case. We could change this to see if there is
13766 just one vtable. */
13767 if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13768 {
13769 /* Make all virtual function table pointers in non-virtual base
13770 classes point to CURRENT_CLASS_TYPE's virtual function
13771 tables. */
13772 expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13773
13774 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13775 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13776 }
13777
13778 if (! ok_to_optimize_dtor)
13779 {
13780 cond = build_binary_op (NE_EXPR,
13781 current_class_ptr, integer_zero_node);
13782 expand_start_cond (cond, 0);
13783 }
13784
13785 insns = get_insns ();
13786 end_sequence ();
13787
13788 fn_last_parm_insn = get_first_nonparm_insn ();
13789 if (fn_last_parm_insn == NULL_RTX)
13790 fn_last_parm_insn = get_last_insn ();
13791 else
13792 fn_last_parm_insn = previous_insn (fn_last_parm_insn);
13793
13794 emit_insns_after (insns, fn_last_parm_insn);
13795
13796 if (! ok_to_optimize_dtor)
13797 expand_end_cond ();
13798 }
13799 else if (current_function_assigns_this)
13800 {
13801 /* Does not need to call emit_base_init, because
13802 that is done (if needed) just after assignment to this
13803 is seen. */
13804
13805 if (DECL_CONSTRUCTOR_P (current_function_decl))
13806 {
13807 end_protect_partials ();
13808 expand_label (ctor_label);
13809 ctor_label = NULL_TREE;
13810
13811 if (call_poplevel)
13812 {
13813 decls = getdecls ();
13814 expand_end_bindings (decls, decls != NULL_TREE, 0);
13815 poplevel (decls != NULL_TREE, 0, 0);
13816 }
13817 /* c_expand_return knows to return 'this' from a constructor. */
13818 c_expand_return (NULL_TREE);
13819 }
13820 else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13821 && return_label != NULL_RTX)
13822 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13823
13824 current_function_assigns_this = 0;
13825 current_function_just_assigned_this = 0;
13826 base_init_expr = NULL_TREE;
13827 }
13828 else if (DECL_CONSTRUCTOR_P (fndecl))
13829 {
13830 tree cond = NULL_TREE, thenclause = NULL_TREE;
13831 /* Allow constructor for a type to get a new instance of the object
13832 using `build_new'. */
13833 tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13834 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13835
13836 if (flag_this_is_variable > 0)
13837 {
13838 cond = build_binary_op (EQ_EXPR,
13839 current_class_ptr, integer_zero_node);
13840 thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13841 build_new (NULL_TREE, current_class_type, void_type_node, 0));
13842 }
13843
13844 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13845
13846 start_sequence ();
13847
13848 if (flag_this_is_variable > 0)
13849 {
13850 expand_start_cond (cond, 0);
13851 expand_expr_stmt (thenclause);
13852 expand_end_cond ();
13853 }
13854
13855 /* Emit insns from `emit_base_init' which sets up virtual
13856 function table pointer(s). */
13857 if (base_init_expr)
13858 {
13859 expand_expr_stmt (base_init_expr);
13860 base_init_expr = NULL_TREE;
13861 }
13862
13863 insns = get_insns ();
13864 end_sequence ();
13865
13866 /* This is where the body of the constructor begins. */
13867
13868 emit_insns_after (insns, last_parm_cleanup_insn);
13869
13870 end_protect_partials ();
13871
13872 /* This is where the body of the constructor ends. */
13873 expand_label (ctor_label);
13874 ctor_label = NULL_TREE;
13875
13876 if (call_poplevel)
13877 {
13878 decls = getdecls ();
13879 expand_end_bindings (decls, decls != NULL_TREE, 0);
13880 poplevel (decls != NULL_TREE, 1, 0);
13881 }
13882
13883 /* c_expand_return knows to return 'this' from a constructor. */
13884 c_expand_return (NULL_TREE);
13885
13886 current_function_assigns_this = 0;
13887 current_function_just_assigned_this = 0;
13888 }
13889 else if (DECL_MAIN_P (fndecl))
13890 {
13891 /* Make it so that `main' always returns 0 by default. */
13892 #ifdef VMS
13893 c_expand_return (integer_one_node);
13894 #else
13895 c_expand_return (integer_zero_node);
13896 #endif
13897 }
13898 else if (return_label != NULL_RTX
13899 && current_function_return_value == NULL_TREE
13900 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13901 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13902
13903 if (flag_exceptions)
13904 expand_exception_blocks ();
13905
13906 /* If this function is supposed to return a value, ensure that
13907 we do not fall into the cleanups by mistake. The end of our
13908 function will look like this:
13909
13910 user code (may have return stmt somewhere)
13911 goto no_return_label
13912 cleanup_label:
13913 cleanups
13914 goto return_label
13915 no_return_label:
13916 NOTE_INSN_FUNCTION_END
13917 return_label:
13918 things for return
13919
13920 If the user omits a return stmt in the USER CODE section, we
13921 will have a control path which reaches NOTE_INSN_FUNCTION_END.
13922 Otherwise, we won't. */
13923 if (no_return_label)
13924 {
13925 DECL_CONTEXT (no_return_label) = fndecl;
13926 DECL_INITIAL (no_return_label) = error_mark_node;
13927 DECL_SOURCE_FILE (no_return_label) = input_filename;
13928 DECL_SOURCE_LINE (no_return_label) = lineno;
13929 expand_goto (no_return_label);
13930 }
13931
13932 if (cleanup_label)
13933 {
13934 /* Remove the binding contour which is used
13935 to catch cleanup-generated temporaries. */
13936 expand_end_bindings (0, 0, 0);
13937 poplevel (0, 0, 0);
13938
13939 /* Emit label at beginning of cleanup code for parameters. */
13940 emit_label (cleanup_label);
13941 }
13942
13943 /* Get return value into register if that's where it's supposed to be. */
13944 if (original_result_rtx)
13945 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13946
13947 /* Finish building code that will trigger warnings if users forget
13948 to make their functions return values. */
13949 if (no_return_label || cleanup_label)
13950 emit_jump (return_label);
13951 if (no_return_label)
13952 {
13953 /* We don't need to call `expand_*_return' here because we
13954 don't need any cleanups here--this path of code is only
13955 for error checking purposes. */
13956 expand_label (no_return_label);
13957 }
13958
13959 /* We hard-wired immediate_size_expand to zero in
13960 start_function. Expand_function_end will decrement this
13961 variable. So, we set the variable to one here, so that after
13962 the decrement it will remain zero. */
13963 immediate_size_expand = 1;
13964
13965 /* Generate rtl for function exit. */
13966 expand_function_end (input_filename, lineno, 1);
13967 }
13968
13969 /* We have to save this value here in case
13970 maybe_end_member_template_processing decides to pop all the
13971 template parameters. */
13972 expand_p = !building_stmt_tree ();
13973
13974 /* If we're saving up tree structure, tie off the function now. */
13975 if (!expand_p)
13976 finish_stmt_tree (fndecl);
13977
13978 /* This must come after expand_function_end because cleanups might
13979 have declarations (from inline functions) that need to go into
13980 this function's blocks. */
13981 if (current_binding_level->parm_flag != 1)
13982 my_friendly_abort (122);
13983 poplevel (1, 0, 1);
13984
13985 /* If this is a in-class inline definition, we may have to pop the
13986 bindings for the template parameters that we added in
13987 maybe_begin_member_template_processing when start_function was
13988 called. */
13989 if (inclass_inline)
13990 maybe_end_member_template_processing ();
13991
13992 /* Reset scope for C++: if we were in the scope of a class,
13993 then when we finish this function, we are not longer so.
13994 This cannot be done until we know for sure that no more
13995 class members will ever be referenced in this function
13996 (i.e., calls to destructors). */
13997 if (current_class_name)
13998 {
13999 ctype = current_class_type;
14000 pop_nested_class ();
14001 }
14002
14003 /* Must mark the RESULT_DECL as being in this function. */
14004 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14005
14006 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14007 to the FUNCTION_DECL node itself. */
14008 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14009
14010 /* Undo the call to push_momentary in start_function. */
14011 pop_momentary ();
14012
14013 if (expand_p)
14014 {
14015 int saved_flag_keep_inline_functions =
14016 flag_keep_inline_functions;
14017
14018 /* So we can tell if jump_optimize sets it to 1. */
14019 can_reach_end = 0;
14020
14021 if (DECL_CONTEXT (fndecl) != NULL_TREE
14022 && hack_decl_function_context (fndecl))
14023 /* Trick rest_of_compilation into not deferring output of this
14024 function, even if it is inline, since the rtl_obstack for
14025 this function is the function_obstack of the enclosing
14026 function and will be deallocated when the enclosing
14027 function is gone. See save_tree_status. */
14028 flag_keep_inline_functions = 1;
14029
14030 /* Run the optimizers and output the assembler code for this
14031 function. */
14032
14033 if (DECL_ARTIFICIAL (fndecl))
14034 {
14035 /* Do we really *want* to inline this synthesized method? */
14036
14037 int save_fif = flag_inline_functions;
14038 flag_inline_functions = 1;
14039
14040 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14041 will check our size. */
14042 DECL_INLINE (fndecl) = 0;
14043
14044 rest_of_compilation (fndecl);
14045 flag_inline_functions = save_fif;
14046 }
14047 else
14048 rest_of_compilation (fndecl);
14049
14050 flag_keep_inline_functions = saved_flag_keep_inline_functions;
14051
14052 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14053 {
14054 /* Set DECL_EXTERNAL so that assemble_external will be called as
14055 necessary. We'll clear it again in finish_file. */
14056 if (! DECL_EXTERNAL (fndecl))
14057 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14058 DECL_EXTERNAL (fndecl) = 1;
14059 mark_inline_for_output (fndecl);
14060 }
14061
14062 if (ctype && TREE_ASM_WRITTEN (fndecl))
14063 note_debug_info_needed (ctype);
14064
14065 current_function_returns_null |= can_reach_end;
14066
14067 /* Since we don't normally go through c_expand_return for constructors,
14068 this normally gets the wrong value.
14069 Also, named return values have their return codes emitted after
14070 NOTE_INSN_FUNCTION_END, confusing jump.c. */
14071 if (DECL_CONSTRUCTOR_P (fndecl)
14072 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14073 current_function_returns_null = 0;
14074
14075 if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
14076 cp_warning ("`noreturn' function `%D' does return", fndecl);
14077 else if ((warn_return_type || pedantic)
14078 && current_function_returns_null
14079 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14080 {
14081 /* If this function returns non-void and control can drop through,
14082 complain. */
14083 cp_warning ("control reaches end of non-void function `%D'", fndecl);
14084 }
14085 /* With just -W, complain only if function returns both with
14086 and without a value. */
14087 else if (extra_warnings
14088 && current_function_returns_value && current_function_returns_null)
14089 warning ("this function may return with or without a value");
14090 }
14091
14092 --function_depth;
14093
14094 /* Free all the tree nodes making up this function. */
14095 /* Switch back to allocating nodes permanently
14096 until we start another function. */
14097 if (! nested)
14098 permanent_allocation (1);
14099
14100 if (DECL_SAVED_INSNS (fndecl) == 0)
14101 {
14102 tree t;
14103
14104 /* Stop pointing to the local nodes about to be freed. */
14105 /* But DECL_INITIAL must remain nonzero so we know this
14106 was an actual function definition. */
14107 DECL_INITIAL (fndecl) = error_mark_node;
14108 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14109 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14110 }
14111
14112 if (DECL_STATIC_CONSTRUCTOR (fndecl))
14113 static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
14114 if (DECL_STATIC_DESTRUCTOR (fndecl))
14115 static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
14116
14117 if (! nested)
14118 {
14119 /* Let the error reporting routines know that we're outside a
14120 function. For a nested function, this value is used in
14121 pop_cp_function_context and then reset via pop_function_context. */
14122 current_function_decl = NULL_TREE;
14123 }
14124
14125 named_label_uses = NULL;
14126 current_class_ptr = NULL_TREE;
14127 current_class_ref = NULL_TREE;
14128 }
14129 \f
14130 /* Create the FUNCTION_DECL for a function definition.
14131 DECLSPECS and DECLARATOR are the parts of the declaration;
14132 they describe the return type and the name of the function,
14133 but twisted together in a fashion that parallels the syntax of C.
14134
14135 This function creates a binding context for the function body
14136 as well as setting up the FUNCTION_DECL in current_function_decl.
14137
14138 Returns a FUNCTION_DECL on success.
14139
14140 If the DECLARATOR is not suitable for a function (it defines a datum
14141 instead), we return 0, which tells yyparse to report a parse error.
14142
14143 May return void_type_node indicating that this method is actually
14144 a friend. See grokfield for more details.
14145
14146 Came here with a `.pushlevel' .
14147
14148 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14149 CHANGES TO CODE IN `grokfield'. */
14150
14151 tree
14152 start_method (declspecs, declarator, attrlist)
14153 tree declarator, declspecs, attrlist;
14154 {
14155 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14156 attrlist);
14157
14158 /* Something too ugly to handle. */
14159 if (fndecl == NULL_TREE)
14160 return NULL_TREE;
14161
14162 /* Pass friends other than inline friend functions back. */
14163 if (fndecl == void_type_node)
14164 return fndecl;
14165
14166 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14167 /* Not a function, tell parser to report parse error. */
14168 return NULL_TREE;
14169
14170 if (DECL_IN_AGGR_P (fndecl))
14171 {
14172 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14173 {
14174 if (DECL_CONTEXT (fndecl)
14175 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14176 cp_error ("`%D' is already defined in class %s", fndecl,
14177 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14178 }
14179 return void_type_node;
14180 }
14181
14182 check_template_shadow (fndecl);
14183
14184 DECL_THIS_INLINE (fndecl) = 1;
14185
14186 if (flag_default_inline)
14187 DECL_INLINE (fndecl) = 1;
14188
14189 /* We process method specializations in finish_struct_1. */
14190 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14191 fndecl = push_template_decl (fndecl);
14192
14193 /* We read in the parameters on the maybepermanent_obstack,
14194 but we won't be getting back to them until after we
14195 may have clobbered them. So the call to preserve_data
14196 will keep them safe. */
14197 preserve_data ();
14198
14199 if (! DECL_FRIEND_P (fndecl))
14200 {
14201 if (TREE_CHAIN (fndecl))
14202 {
14203 fndecl = copy_node (fndecl);
14204 TREE_CHAIN (fndecl) = NULL_TREE;
14205 }
14206
14207 if (DECL_CONSTRUCTOR_P (fndecl))
14208 {
14209 if (! grok_ctor_properties (current_class_type, fndecl))
14210 return void_type_node;
14211 }
14212 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14213 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14214 }
14215
14216 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14217
14218 /* Make a place for the parms */
14219 pushlevel (0);
14220 current_binding_level->parm_flag = 1;
14221
14222 DECL_IN_AGGR_P (fndecl) = 1;
14223 return fndecl;
14224 }
14225
14226 /* Go through the motions of finishing a function definition.
14227 We don't compile this method until after the whole class has
14228 been processed.
14229
14230 FINISH_METHOD must return something that looks as though it
14231 came from GROKFIELD (since we are defining a method, after all).
14232
14233 This is called after parsing the body of the function definition.
14234 STMTS is the chain of statements that makes up the function body.
14235
14236 DECL is the ..._DECL that `start_method' provided. */
14237
14238 tree
14239 finish_method (decl)
14240 tree decl;
14241 {
14242 register tree fndecl = decl;
14243 tree old_initial;
14244
14245 register tree link;
14246
14247 if (decl == void_type_node)
14248 return decl;
14249
14250 old_initial = DECL_INITIAL (fndecl);
14251
14252 /* Undo the level for the parms (from start_method).
14253 This is like poplevel, but it causes nothing to be
14254 saved. Saving information here confuses symbol-table
14255 output routines. Besides, this information will
14256 be correctly output when this method is actually
14257 compiled. */
14258
14259 /* Clear out the meanings of the local variables of this level;
14260 also record in each decl which block it belongs to. */
14261
14262 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14263 {
14264 if (DECL_NAME (link) != NULL_TREE)
14265 pop_binding (DECL_NAME (link), link);
14266 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14267 DECL_CONTEXT (link) = NULL_TREE;
14268 }
14269
14270 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14271 (HOST_WIDE_INT) current_binding_level->level_chain,
14272 current_binding_level->parm_flag,
14273 current_binding_level->keep);
14274
14275 poplevel (0, 0, 0);
14276
14277 DECL_INITIAL (fndecl) = old_initial;
14278
14279 /* We used to check if the context of FNDECL was different from
14280 current_class_type as another way to get inside here. This didn't work
14281 for String.cc in libg++. */
14282 if (DECL_FRIEND_P (fndecl))
14283 {
14284 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14285 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14286 decl = void_type_node;
14287 }
14288
14289 return decl;
14290 }
14291 \f
14292 /* Called when a new struct TYPE is defined.
14293 If this structure or union completes the type of any previous
14294 variable declaration, lay it out and output its rtl. */
14295
14296 void
14297 hack_incomplete_structures (type)
14298 tree type;
14299 {
14300 tree *list;
14301
14302 if (current_binding_level->incomplete == NULL_TREE)
14303 return;
14304
14305 if (!type) /* Don't do this for class templates. */
14306 return;
14307
14308 for (list = &current_binding_level->incomplete; *list; )
14309 {
14310 tree decl = TREE_VALUE (*list);
14311 if ((decl && TREE_TYPE (decl) == type)
14312 || (TREE_TYPE (decl)
14313 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14314 && TREE_TYPE (TREE_TYPE (decl)) == type))
14315 {
14316 int toplevel = toplevel_bindings_p ();
14317 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14318 && TREE_TYPE (TREE_TYPE (decl)) == type)
14319 layout_type (TREE_TYPE (decl));
14320 layout_decl (decl, 0);
14321 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14322 if (! toplevel)
14323 {
14324 tree cleanup;
14325 expand_decl (decl);
14326 cleanup = maybe_build_cleanup (decl);
14327 expand_decl_init (decl);
14328 if (! expand_decl_cleanup (decl, cleanup))
14329 cp_error ("parser lost in parsing declaration of `%D'",
14330 decl);
14331 }
14332 *list = TREE_CHAIN (*list);
14333 }
14334 else
14335 list = &TREE_CHAIN (*list);
14336 }
14337 }
14338
14339 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14340 See build_delete for information about AUTO_DELETE.
14341
14342 Don't build these on the momentary obstack; they must live
14343 the life of the binding contour. */
14344
14345 static tree
14346 maybe_build_cleanup_1 (decl, auto_delete)
14347 tree decl, auto_delete;
14348 {
14349 tree type = TREE_TYPE (decl);
14350 if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14351 {
14352 int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14353 tree rval;
14354
14355 if (TREE_CODE (decl) != PARM_DECL)
14356 temp = suspend_momentary ();
14357
14358 if (TREE_CODE (type) == ARRAY_TYPE)
14359 rval = decl;
14360 else
14361 {
14362 mark_addressable (decl);
14363 rval = build_unary_op (ADDR_EXPR, decl, 0);
14364 }
14365
14366 /* Optimize for space over speed here. */
14367 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14368 || flag_expensive_optimizations)
14369 flags |= LOOKUP_NONVIRTUAL;
14370
14371 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14372
14373 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14374 && ! TYPE_HAS_DESTRUCTOR (type))
14375 rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14376 build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14377
14378 if (TREE_CODE (decl) != PARM_DECL)
14379 resume_momentary (temp);
14380
14381 return rval;
14382 }
14383 return 0;
14384 }
14385
14386 /* If DECL is of a type which needs a cleanup, build that cleanup
14387 here. The cleanup does free the storage with a call to delete. */
14388
14389 tree
14390 maybe_build_cleanup_and_delete (decl)
14391 tree decl;
14392 {
14393 return maybe_build_cleanup_1 (decl, integer_three_node);
14394 }
14395
14396 /* If DECL is of a type which needs a cleanup, build that cleanup
14397 here. The cleanup does not free the storage with a call a delete. */
14398
14399 tree
14400 maybe_build_cleanup (decl)
14401 tree decl;
14402 {
14403 return maybe_build_cleanup_1 (decl, integer_two_node);
14404 }
14405 \f
14406 /* Expand a C++ expression at the statement level.
14407 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14408 The C++ type checker should get all of these out when
14409 expressions are combined with other, type-providing, expressions,
14410 leaving only orphan expressions, such as:
14411
14412 &class::bar; / / takes its address, but does nothing with it. */
14413
14414 void
14415 cplus_expand_expr_stmt (exp)
14416 tree exp;
14417 {
14418 exp = require_complete_type_in_void (exp);
14419
14420 if (TREE_CODE (exp) == FUNCTION_DECL)
14421 {
14422 cp_warning ("reference, not call, to function `%D'", exp);
14423 warning ("at this point in file");
14424 }
14425
14426 #if 0
14427 /* We should do this eventually, but right now this causes regex.o from
14428 libg++ to miscompile, and tString to core dump. */
14429 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14430 #endif
14431
14432 /* Strip unused implicit INDIRECT_REFs of references. */
14433 if (TREE_CODE (exp) == INDIRECT_REF
14434 && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14435 exp = TREE_OPERAND (exp, 0);
14436
14437 /* If we don't do this, we end up down inside expand_expr
14438 trying to do TYPE_MODE on the ERROR_MARK, and really
14439 go outside the bounds of the type. */
14440 if (exp != error_mark_node)
14441 expand_expr_stmt (break_out_cleanups (exp));
14442 }
14443
14444 /* When a stmt has been parsed, this function is called. */
14445
14446 void
14447 finish_stmt ()
14448 {
14449 if (!current_function_assigns_this
14450 && current_function_just_assigned_this)
14451 {
14452 if (DECL_CONSTRUCTOR_P (current_function_decl))
14453 {
14454 /* Constructors must wait until we are out of control
14455 zones before calling base constructors. */
14456 if (in_control_zone_p ())
14457 return;
14458 expand_expr_stmt (base_init_expr);
14459 check_base_init (current_class_type);
14460 }
14461 current_function_assigns_this = 1;
14462 }
14463
14464 /* Always assume this statement was not an expression statement. If
14465 it actually was an expression statement, its our callers
14466 responsibility to fix this up. */
14467 last_expr_type = NULL_TREE;
14468 }
14469
14470 /* Change a static member function definition into a FUNCTION_TYPE, instead
14471 of the METHOD_TYPE that we create when it's originally parsed.
14472
14473 WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14474 (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14475 other decls. Either pass the addresses of local variables or NULL. */
14476
14477 void
14478 revert_static_member_fn (decl, fn, argtypes)
14479 tree *decl, *fn, *argtypes;
14480 {
14481 tree tmp;
14482 tree function = fn ? *fn : TREE_TYPE (*decl);
14483 tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14484
14485 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14486 != TYPE_UNQUALIFIED)
14487 cp_error ("static member function `%#D' declared with type qualifiers",
14488 *decl);
14489
14490 args = TREE_CHAIN (args);
14491 tmp = build_function_type (TREE_TYPE (function), args);
14492 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14493 tmp = build_exception_variant (tmp,
14494 TYPE_RAISES_EXCEPTIONS (function));
14495 TREE_TYPE (*decl) = tmp;
14496 if (DECL_ARGUMENTS (*decl))
14497 DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14498 DECL_STATIC_FUNCTION_P (*decl) = 1;
14499 if (fn)
14500 *fn = tmp;
14501 if (argtypes)
14502 *argtypes = args;
14503 }
14504
14505 /* Save and reinitialize the variables
14506 used during compilation of a C++ function. */
14507
14508 static void
14509 push_cp_function_context (f)
14510 struct function *f;
14511 {
14512 struct language_function *p
14513 = ((struct language_function *)
14514 xmalloc (sizeof (struct language_function)));
14515 f->language = p;
14516 if (f->next)
14517 *p = *f->next->language;
14518 else
14519 bzero (p, sizeof (struct language_function));
14520
14521 /* For now, we always assume we're expanding all the way to RTL
14522 unless we're explicitly doing otherwise. */
14523 expanding_p = 1;
14524
14525 /* Whenever we start a new function, we destroy temporaries in the
14526 usual way. */
14527 stmts_are_full_exprs_p = 1;
14528 }
14529
14530 /* Restore the variables used during compilation of a C++ function. */
14531
14532 static void
14533 pop_cp_function_context (f)
14534 struct function *f;
14535 {
14536 free (f->language);
14537 f->language = 0;
14538 }
14539
14540 int
14541 in_function_p ()
14542 {
14543 return function_depth != 0;
14544 }