1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
5
6 This file is part of GNU CC.
7
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23
24 /* Process declarations and symbol lookup for C front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
31 #include "config.h"
32 #include "system.h"
33 #include "tree.h"
34 #include "rtl.h"
35 #include "expr.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "tree-inline.h"
39 #include "decl.h"
40 #include "lex.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "hashtab.h"
45 #include "ggc.h"
46 #include "tm_p.h"
47 #include "target.h"
48 #include "c-common.h"
49 #include "c-pragma.h"
50 #include "diagnostic.h"
51 #include "debug.h"
52 #include "timevar.h"
53 #include "input.h"
54
55 static tree grokparms PARAMS ((tree));
56 static const char *redeclaration_error_message PARAMS ((tree, tree));
57
58 static void push_binding_level PARAMS ((struct cp_binding_level *, int,
59 int));
60 static void pop_binding_level PARAMS ((void));
61 static void suspend_binding_level PARAMS ((void));
62 static void resume_binding_level PARAMS ((struct cp_binding_level *));
63 static struct cp_binding_level *make_binding_level PARAMS ((void));
64 static void declare_namespace_level PARAMS ((void));
65 static int decl_jump_unsafe PARAMS ((tree));
66 static void storedecls PARAMS ((tree));
67 static void require_complete_types_for_parms PARAMS ((tree));
68 static int ambi_op_p PARAMS ((enum tree_code));
69 static int unary_op_p PARAMS ((enum tree_code));
70 static cxx_saved_binding *store_bindings (tree, cxx_saved_binding *);
71 static tree lookup_tag_reverse PARAMS ((tree, tree));
72 static tree lookup_name_real PARAMS ((tree, int, int, int));
73 static void push_local_name PARAMS ((tree));
74 static void warn_extern_redeclared_static PARAMS ((tree, tree));
75 static tree grok_reference_init PARAMS ((tree, tree, tree, tree *));
76 static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
77 enum overload_flags, tree,
78 tree, int, int, int, int, int, int, tree));
79 static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
80 static tree follow_tag_typedef PARAMS ((tree));
81 static tree lookup_tag PARAMS ((enum tree_code, tree,
82 struct cp_binding_level *, int));
83 static void set_identifier_type_value_with_scope
84 PARAMS ((tree, tree, struct cp_binding_level *));
85 static void record_unknown_type PARAMS ((tree, const char *));
86 static tree builtin_function_1 PARAMS ((const char *, tree, tree, int,
87 enum built_in_class, const char *,
88 tree));
89 static tree build_library_fn_1 PARAMS ((tree, enum tree_code, tree));
90 static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
91 static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
92 int));
93 static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct cp_binding_level*));
94 static void check_for_uninitialized_const_var PARAMS ((tree));
95 static hashval_t typename_hash PARAMS ((const void *));
96 static int typename_compare PARAMS ((const void *, const void *));
97 static void push_binding PARAMS ((tree, tree, struct cp_binding_level*));
98 static int add_binding PARAMS ((tree, tree));
99 static void pop_binding PARAMS ((tree, tree));
100 static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
101 static cxx_binding *find_binding (tree, tree, cxx_binding *);
102 static tree select_decl (cxx_binding *, int);
103 static int lookup_flags PARAMS ((int, int));
104 static tree qualify_lookup PARAMS ((tree, int));
105 static tree record_builtin_java_type PARAMS ((const char *, int));
106 static const char *tag_name PARAMS ((enum tag_types code));
107 static void find_class_binding_level PARAMS ((void));
108 static struct cp_binding_level *innermost_nonclass_level PARAMS ((void));
109 static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
110 static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
111 static int walk_globals_r PARAMS ((tree, void *));
112 static int walk_vtables_r PARAMS ((tree, void*));
113 static void add_decl_to_level PARAMS ((tree, struct cp_binding_level *));
114 static tree make_label_decl PARAMS ((tree, int));
115 static void use_label PARAMS ((tree));
116 static void check_previous_goto_1 PARAMS ((tree, struct cp_binding_level *, tree,
117 const char *, int));
118 static void check_previous_goto PARAMS ((struct named_label_use_list *));
119 static void check_switch_goto PARAMS ((struct cp_binding_level *));
120 static void check_previous_gotos PARAMS ((tree));
121 static void pop_label PARAMS ((tree, tree));
122 static void pop_labels PARAMS ((tree));
123 static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
124 static void layout_var_decl PARAMS ((tree));
125 static void maybe_commonize_var PARAMS ((tree));
126 static tree check_initializer (tree, tree, int, tree *);
127 static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
128 static void save_function_data PARAMS ((tree));
129 static void check_function_type PARAMS ((tree, tree));
130 static void begin_constructor_body PARAMS ((void));
131 static void finish_constructor_body PARAMS ((void));
132 static void begin_destructor_body PARAMS ((void));
133 static void finish_destructor_body PARAMS ((void));
134 static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
135 static tree get_atexit_node PARAMS ((void));
136 static tree get_dso_handle_node PARAMS ((void));
137 static tree start_cleanup_fn PARAMS ((void));
138 static void end_cleanup_fn PARAMS ((void));
139 static tree cp_make_fname_decl PARAMS ((tree, int));
140 static void initialize_predefined_identifiers PARAMS ((void));
141 static tree check_special_function_return_type
142 PARAMS ((special_function_kind, tree, tree));
143 static tree push_cp_library_fn PARAMS ((enum tree_code, tree));
144 static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree));
145 static void store_parm_decls PARAMS ((tree));
146 static int cp_missing_noreturn_ok_p PARAMS ((tree));
147 static void initialize_local_var (tree, tree);
148 static void expand_static_init (tree, tree);
149 static tree next_initializable_field (tree);
150 static bool reshape_init_array (tree, tree, tree *, tree);
151 static tree reshape_init (tree, tree *);
152
153 /* Erroneous argument lists can use this *IFF* they do not modify it. */
154 tree error_mark_list;
155
156 /* The following symbols are subsumed in the cp_global_trees array, and
157 listed here individually for documentation purposes.
158
159 C++ extensions
160 tree wchar_decl_node;
161
162 tree vtable_entry_type;
163 tree delta_type_node;
164 tree __t_desc_type_node;
165 tree ti_desc_type_node;
166 tree bltn_desc_type_node, ptr_desc_type_node;
167 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
168 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
169 tree ptm_desc_type_node;
170 tree base_desc_type_node;
171
172 tree class_type_node, record_type_node, union_type_node, enum_type_node;
173 tree unknown_type_node;
174
175 Array type `vtable_entry_type[]'
176
177 tree vtbl_type_node;
178 tree vtbl_ptr_type_node;
179
180 Namespaces,
181
182 tree std_node;
183 tree abi_node;
184
185 A FUNCTION_DECL which can call `abort'. Not necessarily the
186 one that the user will declare, but sufficient to be called
187 by routines that want to abort the program.
188
189 tree abort_fndecl;
190
191 The FUNCTION_DECL for the default `::operator delete'.
192
193 tree global_delete_fndecl;
194
195 Used by RTTI
196 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
197 tree tinfo_var_id;
198
199 */
200
201 tree cp_global_trees[CPTI_MAX];
202
203 /* Indicates that there is a type value in some namespace, although
204 that is not necessarily in scope at the moment. */
205
206 static GTY(()) tree global_type_node;
207
208 /* Expect only namespace names now. */
209 static int only_namespace_names;
210
211 /* Used only for jumps to as-yet undefined labels, since jumps to
212 defined labels can have their validity checked immediately. */
213
214 struct named_label_use_list GTY(())
215 {
216 struct cp_binding_level *binding_level;
217 tree names_in_scope;
218 tree label_decl;
219 const char *filename_o_goto;
220 int lineno_o_goto;
221 struct named_label_use_list *next;
222 };
223
224 #define named_label_uses cp_function_chain->x_named_label_uses
225
226 #define local_names cp_function_chain->x_local_names
227
228 /* A list of objects which have constructors or destructors
229 which reside in the global scope. The decl is stored in
230 the TREE_VALUE slot and the initializer is stored
231 in the TREE_PURPOSE slot. */
232 tree static_aggregates;
233
234 /* -- end of C++ */
235
236 /* A node for the integer constants 2, and 3. */
237
238 tree integer_two_node, integer_three_node;
239
240 /* Similar, for last_function_parm_tags. */
241 tree last_function_parms;
242
243 /* A list of all LABEL_DECLs in the function that have names. Here so
244 we can clear out their names' definitions at the end of the
245 function, and so we can check the validity of jumps to these labels. */
246
247 struct named_label_list GTY(())
248 {
249 struct cp_binding_level *binding_level;
250 tree names_in_scope;
251 tree old_value;
252 tree label_decl;
253 tree bad_decls;
254 struct named_label_list *next;
255 unsigned int in_try_scope : 1;
256 unsigned int in_catch_scope : 1;
257 };
258
259 #define named_labels cp_function_chain->x_named_labels
260
261 /* The name of the anonymous namespace, throughout this translation
262 unit. */
263 tree anonymous_namespace_name;
264
265 /* The number of function bodies which we are currently processing.
266 (Zero if we are at namespace scope, one inside the body of a
267 function, two inside the body of a function in a local class, etc.) */
268 int function_depth;
269
270 /* States indicating how grokdeclarator() should handle declspecs marked
271 with __attribute__((deprecated)). An object declared as
272 __attribute__((deprecated)) suppresses warnings of uses of other
273 deprecated items. */
274
275 enum deprecated_states {
276 DEPRECATED_NORMAL,
277 DEPRECATED_SUPPRESS
278 };
279
280 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
281
282 /* Set by add_implicitly_declared_members() to keep those members from
283 being flagged as deprecated or reported as using deprecated
284 types. */
285 int adding_implicit_members = 0;
286
287 /* True if a declaration with an `extern' linkage specifier is being
288 processed. */
289 bool have_extern_spec;
290
291
292 /* Compute the chain index of a binding_entry given the HASH value of its
293 name and the total COUNT of chains. COUNT is assumed to be a power
294 of 2. */
295 #define ENTRY_INDEX(HASH, COUNT) (((HASH) >> 3) & ((COUNT) - 1))
296
297 /* A free list of "binding_entry"s awaiting for re-use. */
298 static GTY((deletable(""))) binding_entry free_binding_entry;
299
300 /* Create a binding_entry object for (NAME, TYPE). */
301 static inline binding_entry
binding_entry_make(tree name,tree type)302 binding_entry_make (tree name, tree type)
303 {
304 binding_entry entry;
305
306 if (free_binding_entry)
307 {
308 entry = free_binding_entry;
309 free_binding_entry = entry->chain;
310 }
311 else
312 entry = ggc_alloc (sizeof (struct binding_entry_s));
313
314 entry->name = name;
315 entry->type = type;
316
317 return entry;
318 }
319
320 /* Put ENTRY back on the free list. */
321 static inline void
binding_entry_free(binding_entry entry)322 binding_entry_free (binding_entry entry)
323 {
324 entry->chain = free_binding_entry;
325 free_binding_entry = entry;
326 }
327
328 /* The datatype used to implement the mapping from names to types at
329 a given scope. */
330 struct binding_table_s GTY(())
331 {
332 /* Array of chains of "binding_entry"s */
333 binding_entry * GTY((length ("%h.chain_count"))) chain;
334
335 /* The number of chains in this table. This is the length of the
336 the member "chaiin" considered as an array. */
337 size_t chain_count;
338
339 /* Number of "binding_entry"s in this table. */
340 size_t entry_count;
341 };
342
343 /* These macros indicate the initial chains count for binding_table. */
344 #define SCOPE_DEFAULT_HT_SIZE (1 << 3)
345 #define CLASS_SCOPE_HT_SIZE (1 << 3)
346 #define NAMESPACE_ORDINARY_HT_SIZE (1 << 5)
347 #define NAMESPACE_STD_HT_SIZE (1 << 8)
348 #define GLOBAL_SCOPE_HT_SIZE (1 << 8)
349
350 /* Construct TABLE with an initial CHAIN_COUNT. */
351 static inline void
binding_table_construct(binding_table table,size_t chain_count)352 binding_table_construct (binding_table table, size_t chain_count)
353 {
354 table->chain_count = chain_count;
355 table->entry_count = 0;
356 table->chain = ggc_alloc_cleared
357 (table->chain_count * sizeof (binding_entry));
358 }
359
360 /* Free TABLE by making its entries ready for reuse. */
361 static inline void
binding_table_free(binding_table table)362 binding_table_free (binding_table table)
363 {
364 size_t i;
365 if (table == NULL)
366 return;
367
368 for (i = 0; i < table->chain_count; ++i)
369 {
370 while (table->chain[i] != NULL)
371 {
372 binding_entry entry = table->chain[i];
373 table->chain[i] = entry->chain;
374 binding_entry_free (entry);
375 }
376 }
377 table->entry_count = 0;
378 }
379
380 /* Allocate a table with CHAIN_COUNT, assumed to be a power of two. */
381 static inline binding_table
binding_table_new(size_t chain_count)382 binding_table_new (size_t chain_count)
383 {
384 binding_table table = ggc_alloc (sizeof (struct binding_table_s));
385 binding_table_construct (table, chain_count);
386 return table;
387 }
388
389 /* Expand TABLE to twice its current chain_count. */
390 static void
binding_table_expand(binding_table table)391 binding_table_expand (binding_table table)
392 {
393 const size_t old_chain_count = table->chain_count;
394 const size_t old_entry_count = table->entry_count;
395 const size_t new_chain_count = 2 * old_chain_count;
396 binding_entry *old_chains = table->chain;
397 size_t i;
398
399 binding_table_construct (table, new_chain_count);
400 for (i = 0; i < old_chain_count; ++i)
401 {
402 binding_entry entry = old_chains[i];
403 for (; entry != NULL; entry = old_chains[i])
404 {
405 const unsigned int hash = IDENTIFIER_HASH_VALUE (entry->name);
406 const size_t j = ENTRY_INDEX (hash, new_chain_count);
407
408 old_chains[i] = entry->chain;
409 entry->chain = table->chain[j];
410 table->chain[j] = entry;
411 }
412 }
413 table->entry_count = old_entry_count;
414 }
415
416 /* Insert a binding for NAME to TYPe into TABLE. */
417 static inline void
binding_table_insert(binding_table table,tree name,tree type)418 binding_table_insert (binding_table table, tree name, tree type)
419 {
420 const unsigned int hash = IDENTIFIER_HASH_VALUE (name);
421 const size_t i = ENTRY_INDEX (hash, table->chain_count);
422 binding_entry entry = binding_entry_make (name, type);
423
424 entry->chain = table->chain[i];
425 table->chain[i] = entry;
426 ++table->entry_count;
427
428 if (3 * table->chain_count < 5 * table->entry_count)
429 binding_table_expand (table);
430 }
431
432 /* Return the binding_entry, if any, that maps NAME. */
433 binding_entry
binding_table_find(binding_table table,tree name)434 binding_table_find (binding_table table, tree name)
435 {
436 const unsigned int hash = IDENTIFIER_HASH_VALUE (name);
437 binding_entry entry = table->chain[ENTRY_INDEX (hash, table->chain_count)];
438
439 while (entry != NULL && entry->name != name)
440 entry = entry->chain;
441
442 return entry;
443 }
444
445 /* Return the binding_entry, if any, that maps name to an anonymous type. */
446 static inline tree
binding_table_find_anon_type(binding_table table,tree name)447 binding_table_find_anon_type (binding_table table, tree name)
448 {
449 const unsigned int hash = IDENTIFIER_HASH_VALUE (name);
450 binding_entry entry = table->chain[ENTRY_INDEX (hash, table->chain_count)];
451
452 while (entry != NULL && TYPE_IDENTIFIER (entry->type) != name)
453 entry = entry->chain;
454
455 return entry ? entry->type : NULL;
456 }
457
458 /* Return the binding_entry, if any, that has TYPE as target. If NAME
459 is non-null, then set the domain and rehash that entry. */
460 static inline binding_entry
binding_table_reverse_maybe_remap(binding_table table,tree type,tree name)461 binding_table_reverse_maybe_remap (binding_table table, tree type, tree name)
462 {
463 const size_t chain_count = table->chain_count;
464 binding_entry entry = NULL;
465 binding_entry *p = NULL;
466 size_t i;
467
468 for (i = 0; i < chain_count && entry == NULL; ++i)
469 {
470 p = &table->chain[i];
471 while (*p != NULL && entry == NULL)
472 if ((*p)->type == type)
473 entry = *p;
474 else
475 p = &(*p)->chain;
476 }
477
478 if (entry != NULL && name != NULL && entry->name != name)
479 {
480 /* Remove the bucket from the previous chain. */
481 *p = (*p)->chain;
482
483 /* Remap the name type to type. */
484 i = ENTRY_INDEX (IDENTIFIER_HASH_VALUE (name), chain_count);
485 entry->chain = table->chain[i];
486 entry->name = name;
487 table->chain[i] = entry;
488 }
489
490 return entry;
491 }
492
493 /* Remove from TABLE all entries that map to anonymous enums or
494 class-types. */
495 static void
binding_table_remove_anonymous_types(binding_table table)496 binding_table_remove_anonymous_types (binding_table table)
497 {
498 const size_t chain_count = table->chain_count;
499 size_t i;
500
501 for (i = 0; i < chain_count; ++i)
502 {
503 binding_entry *p = &table->chain[i];
504
505 while (*p != NULL)
506 if (ANON_AGGRNAME_P ((*p)->name))
507 {
508 binding_entry e = *p;
509 *p = (*p)->chain;
510 --table->entry_count;
511 binding_entry_free (e);
512 }
513 else
514 p = &(*p)->chain;
515 }
516 }
517
518 /* Apply PROC -- with DATA -- to all entries in TABLE. */
519 void
binding_table_foreach(binding_table table,bt_foreach_proc proc,void * data)520 binding_table_foreach (binding_table table, bt_foreach_proc proc, void *data)
521 {
522 const size_t chain_count = table->chain_count;
523 size_t i;
524
525 for (i = 0; i < chain_count; ++i)
526 {
527 binding_entry entry = table->chain[i];
528 for (; entry != NULL; entry = entry->chain)
529 proc (entry, data);
530 }
531 }
532
533
534 /* For each binding contour we allocate a binding_level structure
535 which records the names defined in that contour.
536 Contours include:
537 0) the global one
538 1) one for each function definition,
539 where internal declarations of the parameters appear.
540 2) one for each compound statement,
541 to record its declarations.
542
543 The current meaning of a name can be found by searching the levels
544 from the current one out to the global one.
545
546 Off to the side, may be the class_binding_level. This exists only
547 to catch class-local declarations. It is otherwise nonexistent.
548
549 Also there may be binding levels that catch cleanups that must be
550 run when exceptions occur. Thus, to see whether a name is bound in
551 the current scope, it is not enough to look in the
552 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
553 instead. */
554
555 /* Note that the information in the `names' component of the global contour
556 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
557
558 struct cp_binding_level GTY(())
559 {
560 /* A chain of _DECL nodes for all variables, constants, functions,
561 and typedef types. These are in the reverse of the order
562 supplied. There may be OVERLOADs on this list, too, but they
563 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
564 tree names;
565
566 /* Count of elements in names chain. */
567 size_t names_size;
568
569 /* A chain of NAMESPACE_DECL nodes. */
570 tree namespaces;
571
572 /* An array of static functions and variables (for namespaces only) */
573 varray_type static_decls;
574
575 /* A chain of VTABLE_DECL nodes. */
576 tree vtables;
577
578 /* A dictionary for looking up enums or class-types names. */
579 binding_table type_decls;
580
581 /* A list of USING_DECL nodes. */
582 tree usings;
583
584 /* A list of used namespaces. PURPOSE is the namespace,
585 VALUE the common ancestor with this binding_level's namespace. */
586 tree using_directives;
587
588 /* If this binding level is the binding level for a class, then
589 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
590 is the name of an entity bound in the class. The TREE_TYPE is
591 the DECL bound by this name in the class. */
592 tree class_shadowed;
593
594 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
595 is used for all binding levels. In addition the TREE_VALUE is the
596 IDENTIFIER_TYPE_VALUE before we entered the class. */
597 tree type_shadowed;
598
599 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
600 label in this scope. The TREE_PURPOSE is the previous value of
601 the IDENTIFIER_LABEL VALUE. */
602 tree shadowed_labels;
603
604 /* For each level (except not the global one),
605 a chain of BLOCK nodes for all the levels
606 that were entered and exited one level down. */
607 tree blocks;
608
609 /* The _TYPE node for this level, if parm_flag == 2. */
610 tree this_class;
611
612 /* The binding level which this one is contained in (inherits from). */
613 struct cp_binding_level *level_chain;
614
615 /* List of VAR_DECLS saved from a previous for statement.
616 These would be dead in ISO-conforming code, but might
617 be referenced in ARM-era code. These are stored in a
618 TREE_LIST; the TREE_VALUE is the actual declaration. */
619 tree dead_vars_from_for;
620
621 /* 1 for the level that holds the parameters of a function.
622 2 for the level that holds a class declaration. */
623 unsigned parm_flag : 2;
624
625 /* 1 means make a BLOCK for this level regardless of all else.
626 2 for temporary binding contours created by the compiler. */
627 unsigned keep : 2;
628
629 /* Nonzero if this level "doesn't exist" for tags. */
630 unsigned tag_transparent : 1;
631
632 /* Nonzero if this level can safely have additional
633 cleanup-needing variables added to it. */
634 unsigned more_cleanups_ok : 1;
635 unsigned have_cleanups : 1;
636
637 /* Nonzero if this scope is for storing the decls for template
638 parameters and generic decls; these decls will be discarded and
639 replaced with a TEMPLATE_DECL. */
640 unsigned template_parms_p : 1;
641
642 /* Nonzero if this scope corresponds to the `<>' in a
643 `template <>' clause. Whenever this flag is set,
644 TEMPLATE_PARMS_P will be set as well. */
645 unsigned template_spec_p : 1;
646
647 /* This is set for a namespace binding level. */
648 unsigned namespace_p : 1;
649
650 /* True if this level is that of a for-statement where we need to
651 worry about ambiguous (ARM or ISO) scope rules. */
652 unsigned is_for_scope : 1;
653
654 /* True if this level corresponds to a TRY block. Currently this
655 information is only available while building the tree structure. */
656 unsigned is_try_scope : 1;
657
658 /* True if this level corresponds to a CATCH block. Currently this
659 information is only available while building the tree structure. */
660 unsigned is_catch_scope : 1;
661
662 /* Three bits left for this word. */
663
664 /* Binding depth at which this level began. */
665 unsigned binding_depth;
666 };
667
668 #define NULL_BINDING_LEVEL ((struct cp_binding_level *) NULL)
669
670 /* True if SCOPE designates the global scope binding contour. */
671 #define global_scope_p(SCOPE) \
672 ((SCOPE) == NAMESPACE_LEVEL (global_namespace))
673
674 /* The binding level currently in effect. */
675
676 #define current_binding_level \
677 (*(cfun && cp_function_chain->bindings \
678 ? &cp_function_chain->bindings \
679 : &scope_chain->bindings))
680
681 /* The binding level of the current class, if any. */
682
683 #define class_binding_level scope_chain->class_bindings
684
685 /* A chain of binding_level structures awaiting reuse. */
686
687 static GTY((deletable (""))) struct cp_binding_level *free_binding_level;
688
689 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
690
691 static int keep_next_level_flag;
692
693 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
694 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
695 time the VAR_DECL was declared, the type was incomplete. */
696
697 static GTY(()) tree incomplete_vars;
698
699 #ifndef ENABLE_SCOPE_CHECKING
700 # define ENABLE_SCOPE_CHECKING 0
701 #else
702 # define ENABLE_SCOPE_CHECKING 1
703 #endif
704
705 static unsigned binding_depth = 0;
706 static int is_class_level = 0;
707
708 static void
indent(unsigned depth)709 indent (unsigned depth)
710 {
711 unsigned i;
712
713 for (i = 0; i < depth * 2; i++)
714 putc (' ', stderr);
715 }
716
717 static tree pushdecl_with_scope PARAMS ((tree, struct cp_binding_level *));
718
719 static void
push_binding_level(newlevel,tag_transparent,keep)720 push_binding_level (newlevel, tag_transparent, keep)
721 struct cp_binding_level *newlevel;
722 int tag_transparent, keep;
723 {
724 /* Add this level to the front of the chain (stack) of levels that
725 are active. */
726 memset ((char*) newlevel, 0, sizeof (struct cp_binding_level));
727 newlevel->level_chain = current_binding_level;
728 current_binding_level = newlevel;
729 newlevel->tag_transparent = tag_transparent;
730 newlevel->more_cleanups_ok = 1;
731
732 newlevel->keep = keep;
733 if (ENABLE_SCOPE_CHECKING)
734 {
735 newlevel->binding_depth = binding_depth;
736 indent (binding_depth);
737 verbatim ("push %s level %p line %d\n",
738 (is_class_level) ? "class" : "block",
739 (void *) newlevel, lineno);
740 is_class_level = 0;
741 binding_depth++;
742 }
743 }
744
745 /* Find the innermost enclosing class scope, and reset
746 CLASS_BINDING_LEVEL appropriately. */
747
748 static void
find_class_binding_level()749 find_class_binding_level ()
750 {
751 struct cp_binding_level *level = current_binding_level;
752
753 while (level && level->parm_flag != 2)
754 level = level->level_chain;
755 if (level && level->parm_flag == 2)
756 class_binding_level = level;
757 else
758 class_binding_level = 0;
759 }
760
761 static void
pop_binding_level()762 pop_binding_level ()
763 {
764 if (NAMESPACE_LEVEL (global_namespace))
765 /* Cannot pop a level, if there are none left to pop. */
766 my_friendly_assert (!global_scope_p (current_binding_level), 20030527);
767 /* Pop the current level, and free the structure for reuse. */
768 if (ENABLE_SCOPE_CHECKING)
769 {
770 indent (--binding_depth);
771 verbatim ("pop %s level %p line %d\n",
772 (is_class_level) ? "class" : "block",
773 (void *) current_binding_level, lineno);
774 if (is_class_level != (current_binding_level == class_binding_level))
775 {
776 indent (binding_depth);
777 verbatim ("XXX is_class_level != (current_binding_level "
778 "== class_binding_level)\n");
779 }
780 is_class_level = 0;
781 }
782 {
783 register struct cp_binding_level *level = current_binding_level;
784 current_binding_level = current_binding_level->level_chain;
785 level->level_chain = free_binding_level;
786 if (level->parm_flag != 2)
787 binding_table_free (level->type_decls);
788 else
789 level->type_decls = NULL;
790 my_friendly_assert (!ENABLE_SCOPE_CHECKING
791 || level->binding_depth == binding_depth, 20030529);
792 free_binding_level = level;
793 find_class_binding_level ();
794 }
795 }
796
797 static void
suspend_binding_level()798 suspend_binding_level ()
799 {
800 if (class_binding_level)
801 current_binding_level = class_binding_level;
802
803 if (NAMESPACE_LEVEL (global_namespace))
804 my_friendly_assert (!global_scope_p (current_binding_level), 20030527);
805 /* Suspend the current level. */
806 if (ENABLE_SCOPE_CHECKING)
807 {
808 indent (--binding_depth);
809 verbatim("suspend %s level %p line %d\n",
810 (is_class_level) ? "class" : "block",
811 (void *) current_binding_level, lineno);
812 if (is_class_level != (current_binding_level == class_binding_level))
813 {
814 indent (binding_depth);
815 verbatim ("XXX is_class_level != (current_binding_level "
816 "== class_binding_level)\n");
817 }
818 is_class_level = 0;
819 }
820 current_binding_level = current_binding_level->level_chain;
821 find_class_binding_level ();
822 }
823
824 static void
resume_binding_level(b)825 resume_binding_level (b)
826 struct cp_binding_level *b;
827 {
828 /* Resuming binding levels is meant only for namespaces,
829 and those cannot nest into classes. */
830 my_friendly_assert(!class_binding_level, 386);
831 /* Also, resuming a non-directly nested namespace is a no-no. */
832 my_friendly_assert(b->level_chain == current_binding_level, 386);
833 current_binding_level = b;
834 if (ENABLE_SCOPE_CHECKING)
835 {
836 b->binding_depth = binding_depth;
837 indent (binding_depth);
838 verbatim ("resume %s level %p line %d\n",
839 (is_class_level) ? "class" : "block", (void *) b, lineno);
840 is_class_level = 0;
841 binding_depth++;
842 }
843 }
844
845 /* Create a new `struct cp_binding_level'. */
846
847 static
848 struct cp_binding_level *
make_binding_level()849 make_binding_level ()
850 {
851 /* NOSTRICT */
852 return (struct cp_binding_level *) ggc_alloc (sizeof (struct cp_binding_level));
853 }
854
855 /* Nonzero if we are currently in the global binding level. */
856
857 int
global_bindings_p()858 global_bindings_p ()
859 {
860 return global_scope_p (current_binding_level);
861 }
862
863 /* Return the innermost binding level that is not for a class scope. */
864
865 static struct cp_binding_level *
innermost_nonclass_level()866 innermost_nonclass_level ()
867 {
868 struct cp_binding_level *b;
869
870 b = current_binding_level;
871 while (b->parm_flag == 2)
872 b = b->level_chain;
873
874 return b;
875 }
876
877 /* Nonzero if we are currently in a toplevel binding level. This
878 means either the global binding level or a namespace in a toplevel
879 binding level. Since there are no non-toplevel namespace levels,
880 this really means any namespace or template parameter level. We
881 also include a class whose context is toplevel. */
882
883 int
toplevel_bindings_p()884 toplevel_bindings_p ()
885 {
886 struct cp_binding_level *b = innermost_nonclass_level ();
887
888 return b->namespace_p || b->template_parms_p;
889 }
890
891 /* Nonzero if this is a namespace scope, or if we are defining a class
892 which is itself at namespace scope, or whose enclosing class is
893 such a class, etc. */
894
895 int
namespace_bindings_p()896 namespace_bindings_p ()
897 {
898 struct cp_binding_level *b = innermost_nonclass_level ();
899
900 return b->namespace_p;
901 }
902
903 /* If KEEP is nonzero, make a BLOCK node for the next binding level,
904 unconditionally. Otherwise, use the normal logic to decide whether
905 or not to create a BLOCK. */
906
907 void
keep_next_level(keep)908 keep_next_level (keep)
909 int keep;
910 {
911 keep_next_level_flag = keep;
912 }
913
914 /* Nonzero if the current level needs to have a BLOCK made. */
915
916 int
kept_level_p()917 kept_level_p ()
918 {
919 return (current_binding_level->blocks != NULL_TREE
920 || current_binding_level->keep
921 || current_binding_level->names != NULL_TREE
922 || (current_binding_level->type_decls != NULL
923 && !current_binding_level->tag_transparent));
924 }
925
926 /* Returns the kind of the innermost scope. */
927
928 bool
innermost_scope_is_class_p()929 innermost_scope_is_class_p ()
930 {
931 return current_binding_level->parm_flag == 2;
932 }
933
934 static void
declare_namespace_level()935 declare_namespace_level ()
936 {
937 current_binding_level->namespace_p = 1;
938 }
939
940 /* Returns nonzero if this scope was created to store template
941 parameters. */
942
943 int
template_parm_scope_p()944 template_parm_scope_p ()
945 {
946 return current_binding_level->template_parms_p;
947 }
948
949 /* Returns the kind of template specialization we are currently
950 processing, given that it's declaration contained N_CLASS_SCOPES
951 explicit scope qualifications. */
952
953 tmpl_spec_kind
current_tmpl_spec_kind(n_class_scopes)954 current_tmpl_spec_kind (n_class_scopes)
955 int n_class_scopes;
956 {
957 int n_template_parm_scopes = 0;
958 int seen_specialization_p = 0;
959 int innermost_specialization_p = 0;
960 struct cp_binding_level *b;
961
962 /* Scan through the template parameter scopes. */
963 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
964 {
965 /* If we see a specialization scope inside a parameter scope,
966 then something is wrong. That corresponds to a declaration
967 like:
968
969 template <class T> template <> ...
970
971 which is always invalid since [temp.expl.spec] forbids the
972 specialization of a class member template if the enclosing
973 class templates are not explicitly specialized as well. */
974 if (b->template_spec_p)
975 {
976 if (n_template_parm_scopes == 0)
977 innermost_specialization_p = 1;
978 else
979 seen_specialization_p = 1;
980 }
981 else if (seen_specialization_p == 1)
982 return tsk_invalid_member_spec;
983
984 ++n_template_parm_scopes;
985 }
986
987 /* Handle explicit instantiations. */
988 if (processing_explicit_instantiation)
989 {
990 if (n_template_parm_scopes != 0)
991 /* We've seen a template parameter list during an explicit
992 instantiation. For example:
993
994 template <class T> template void f(int);
995
996 This is erroneous. */
997 return tsk_invalid_expl_inst;
998 else
999 return tsk_expl_inst;
1000 }
1001
1002 if (n_template_parm_scopes < n_class_scopes)
1003 /* We've not seen enough template headers to match all the
1004 specialized classes present. For example:
1005
1006 template <class T> void R<T>::S<T>::f(int);
1007
1008 This is invalid; there needs to be one set of template
1009 parameters for each class. */
1010 return tsk_insufficient_parms;
1011 else if (n_template_parm_scopes == n_class_scopes)
1012 /* We're processing a non-template declaration (even though it may
1013 be a member of a template class.) For example:
1014
1015 template <class T> void S<T>::f(int);
1016
1017 The `class T' maches the `S<T>', leaving no template headers
1018 corresponding to the `f'. */
1019 return tsk_none;
1020 else if (n_template_parm_scopes > n_class_scopes + 1)
1021 /* We've got too many template headers. For example:
1022
1023 template <> template <class T> void f (T);
1024
1025 There need to be more enclosing classes. */
1026 return tsk_excessive_parms;
1027 else
1028 /* This must be a template. It's of the form:
1029
1030 template <class T> template <class U> void S<T>::f(U);
1031
1032 This is a specialization if the innermost level was a
1033 specialization; otherwise it's just a definition of the
1034 template. */
1035 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
1036 }
1037
1038 void
set_class_shadows(shadows)1039 set_class_shadows (shadows)
1040 tree shadows;
1041 {
1042 class_binding_level->class_shadowed = shadows;
1043 }
1044
1045 /* Enter a new binding level.
1046 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
1047 not for that of tags. */
1048
1049 void
pushlevel(tag_transparent)1050 pushlevel (tag_transparent)
1051 int tag_transparent;
1052 {
1053 struct cp_binding_level *newlevel;
1054
1055 if (cfun && !doing_semantic_analysis_p ())
1056 return;
1057
1058 /* Reuse or create a struct for this binding level. */
1059 if (!ENABLE_SCOPE_CHECKING && free_binding_level)
1060 {
1061 newlevel = free_binding_level;
1062 free_binding_level = free_binding_level->level_chain;
1063 }
1064 else
1065 newlevel = make_binding_level ();
1066
1067 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1068 keep_next_level_flag = 0;
1069 }
1070
1071 /* We're defining an object of type TYPE. If it needs a cleanup, but
1072 we're not allowed to add any more objects with cleanups to the current
1073 scope, create a new binding level. */
1074
1075 void
maybe_push_cleanup_level(type)1076 maybe_push_cleanup_level (type)
1077 tree type;
1078 {
1079 if (type != error_mark_node
1080 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
1081 && current_binding_level->more_cleanups_ok == 0)
1082 {
1083 keep_next_level (2);
1084 pushlevel (1);
1085 clear_last_expr ();
1086 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
1087 }
1088 }
1089
1090 /* Enter a new scope. The KIND indicates what kind of scope is being
1091 created. */
1092
1093 void
begin_scope(sk)1094 begin_scope (sk)
1095 scope_kind sk;
1096 {
1097 pushlevel (0);
1098
1099 switch (sk)
1100 {
1101 case sk_template_spec:
1102 current_binding_level->template_spec_p = 1;
1103 /* Fall through. */
1104
1105 case sk_template_parms:
1106 current_binding_level->template_parms_p = 1;
1107 break;
1108
1109 default:
1110 abort ();
1111 }
1112 }
1113
1114 /* Exit the current scope. */
1115
1116 void
finish_scope()1117 finish_scope ()
1118 {
1119 poplevel (0, 0, 0);
1120 }
1121
1122 void
note_level_for_for()1123 note_level_for_for ()
1124 {
1125 current_binding_level->is_for_scope = 1;
1126 }
1127
1128 /* Record that the current binding level represents a try block. */
1129
1130 void
note_level_for_try()1131 note_level_for_try ()
1132 {
1133 current_binding_level->is_try_scope = 1;
1134 }
1135
1136 /* Record that the current binding level represents a catch block. */
1137
1138 void
note_level_for_catch()1139 note_level_for_catch ()
1140 {
1141 current_binding_level->is_catch_scope = 1;
1142 }
1143
1144 /* For a binding between a name and an entity at a block scope,
1145 this is the `struct cp_binding_level' for the block. */
1146 #define BINDING_LEVEL(NODE) ((NODE)->scope.level)
1147
1148 /* A free list of "cxx_binding"s, connected by their PREVIOUS. */
1149
1150 static GTY((deletable (""))) cxx_binding *free_bindings;
1151
1152 /* Make DECL the innermost binding for ID. The LEVEL is the binding
1153 level at which this declaration is being bound. */
1154
1155 static void
push_binding(id,decl,level)1156 push_binding (id, decl, level)
1157 tree id;
1158 tree decl;
1159 struct cp_binding_level* level;
1160 {
1161 cxx_binding *binding;
1162
1163 if (free_bindings)
1164 {
1165 binding = free_bindings;
1166 free_bindings = binding->previous;
1167 }
1168 else
1169 binding = cxx_binding_make ();
1170
1171 /* Now, fill in the binding information. */
1172 BINDING_VALUE (binding) = decl;
1173 BINDING_TYPE (binding) = NULL_TREE;
1174 BINDING_LEVEL (binding) = level;
1175 INHERITED_VALUE_BINDING_P (binding) = 0;
1176 LOCAL_BINDING_P (binding) = (level != class_binding_level);
1177 BINDING_HAS_LEVEL_P (binding) = 1;
1178
1179 /* And put it on the front of the list of bindings for ID. */
1180 binding->previous = IDENTIFIER_BINDING (id);
1181 IDENTIFIER_BINDING (id) = binding;
1182 }
1183
1184 /* ID is already bound in the current scope. But, DECL is an
1185 additional binding for ID in the same scope. This is the `struct
1186 stat' hack whereby a non-typedef class-name or enum-name can be
1187 bound at the same level as some other kind of entity. It's the
1188 responsibility of the caller to check that inserting this name is
1189 valid here. Returns nonzero if the new binding was successful. */
1190 static int
add_binding(id,decl)1191 add_binding (id, decl)
1192 tree id;
1193 tree decl;
1194 {
1195 cxx_binding *binding = IDENTIFIER_BINDING (id);
1196 int ok = 1;
1197
1198 timevar_push (TV_NAME_LOOKUP);
1199 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1200 /* The new name is the type name. */
1201 BINDING_TYPE (binding) = decl;
1202 else if (!BINDING_VALUE (binding))
1203 /* This situation arises when push_class_level_binding moves an
1204 inherited type-binding out of the way to make room for a new
1205 value binding. */
1206 BINDING_VALUE (binding) = decl;
1207 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1208 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1209 {
1210 /* The old binding was a type name. It was placed in
1211 BINDING_VALUE because it was thought, at the point it was
1212 declared, to be the only entity with such a name. Move the
1213 type name into the type slot; it is now hidden by the new
1214 binding. */
1215 BINDING_TYPE (binding) = BINDING_VALUE (binding);
1216 BINDING_VALUE (binding) = decl;
1217 INHERITED_VALUE_BINDING_P (binding) = 0;
1218 }
1219 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1220 && TREE_CODE (decl) == TYPE_DECL
1221 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1222 && (same_type_p (TREE_TYPE (decl),
1223 TREE_TYPE (BINDING_VALUE (binding)))
1224 /* If either type involves template parameters, we must
1225 wait until instantiation. */
1226 || uses_template_parms (TREE_TYPE (decl))
1227 || uses_template_parms (TREE_TYPE (BINDING_VALUE (binding)))))
1228 /* We have two typedef-names, both naming the same type to have
1229 the same name. This is OK because of:
1230
1231 [dcl.typedef]
1232
1233 In a given scope, a typedef specifier can be used to redefine
1234 the name of any type declared in that scope to refer to the
1235 type to which it already refers. */
1236 ok = 0;
1237 /* There can be two block-scope declarations of the same variable,
1238 so long as they are `extern' declarations. However, there cannot
1239 be two declarations of the same static data member:
1240
1241 [class.mem]
1242
1243 A member shall not be declared twice in the
1244 member-specification. */
1245 else if (TREE_CODE (decl) == VAR_DECL
1246 && TREE_CODE (BINDING_VALUE (binding)) == VAR_DECL
1247 && DECL_EXTERNAL (decl)
1248 && DECL_EXTERNAL (BINDING_VALUE (binding))
1249 && !DECL_CLASS_SCOPE_P (decl))
1250 {
1251 duplicate_decls (decl, BINDING_VALUE (binding));
1252 ok = 0;
1253 }
1254 else
1255 {
1256 error ("declaration of `%#D'", decl);
1257 cp_error_at ("conflicts with previous declaration `%#D'",
1258 BINDING_VALUE (binding));
1259 ok = 0;
1260 }
1261
1262 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ok);
1263 }
1264
1265 /* Add DECL to the list of things declared in B. */
1266
1267 static void
add_decl_to_level(decl,b)1268 add_decl_to_level (decl, b)
1269 tree decl;
1270 struct cp_binding_level *b;
1271 {
1272 if (TREE_CODE (decl) == NAMESPACE_DECL
1273 && !DECL_NAMESPACE_ALIAS (decl))
1274 {
1275 TREE_CHAIN (decl) = b->namespaces;
1276 b->namespaces = decl;
1277 }
1278 else if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
1279 {
1280 TREE_CHAIN (decl) = b->vtables;
1281 b->vtables = decl;
1282 }
1283 else
1284 {
1285 /* We build up the list in reverse order, and reverse it later if
1286 necessary. */
1287 TREE_CHAIN (decl) = b->names;
1288 b->names = decl;
1289 b->names_size++;
1290
1291 /* If appropriate, add decl to separate list of statics. We
1292 include extern variables because they might turn out to be
1293 static later. It's OK for this list to contain a few false
1294 positives. */
1295 if (b->namespace_p)
1296 if ((TREE_CODE (decl) == VAR_DECL
1297 && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
1298 || (TREE_CODE (decl) == FUNCTION_DECL
1299 && (!TREE_PUBLIC (decl) || DECL_DECLARED_INLINE_P (decl))))
1300 VARRAY_PUSH_TREE (b->static_decls, decl);
1301 }
1302 }
1303
1304 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1305 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1306 doesn't really belong to this binding level, that it got here
1307 through a using-declaration. */
1308
1309 void
push_local_binding(id,decl,flags)1310 push_local_binding (id, decl, flags)
1311 tree id;
1312 tree decl;
1313 int flags;
1314 {
1315 struct cp_binding_level *b;
1316
1317 /* Skip over any local classes. This makes sense if we call
1318 push_local_binding with a friend decl of a local class. */
1319 b = current_binding_level;
1320 while (b->parm_flag == 2)
1321 b = b->level_chain;
1322
1323 if (lookup_name_current_level (id))
1324 {
1325 /* Supplement the existing binding. */
1326 if (!add_binding (id, decl))
1327 /* It didn't work. Something else must be bound at this
1328 level. Do not add DECL to the list of things to pop
1329 later. */
1330 return;
1331 }
1332 else
1333 /* Create a new binding. */
1334 push_binding (id, decl, b);
1335
1336 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1337 /* We must put the OVERLOAD into a TREE_LIST since the
1338 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1339 decls that got here through a using-declaration. */
1340 decl = build_tree_list (NULL_TREE, decl);
1341
1342 /* And put DECL on the list of things declared by the current
1343 binding level. */
1344 add_decl_to_level (decl, b);
1345 }
1346
1347 /* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1348 binding was successful. */
1349
1350 int
push_class_binding(id,decl)1351 push_class_binding (id, decl)
1352 tree id;
1353 tree decl;
1354 {
1355 int result = 1;
1356 cxx_binding *binding = IDENTIFIER_BINDING (id);
1357 tree context;
1358
1359 timevar_push (TV_NAME_LOOKUP);
1360 /* Note that we declared this value so that we can issue an error if
1361 this is an invalid redeclaration of a name already used for some
1362 other purpose. */
1363 note_name_declared_in_class (id, decl);
1364
1365 if (binding && BINDING_LEVEL (binding) == class_binding_level)
1366 /* Supplement the existing binding. */
1367 result = add_binding (id, decl);
1368 else
1369 /* Create a new binding. */
1370 push_binding (id, decl, class_binding_level);
1371
1372 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1373 class-level declaration. Note that we do not use DECL here
1374 because of the possibility of the `struct stat' hack; if DECL is
1375 a class-name or enum-name we might prefer a field-name, or some
1376 such. */
1377 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1378
1379 /* If this is a binding from a base class, mark it as such. */
1380 binding = IDENTIFIER_BINDING (id);
1381 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1382 {
1383 /* Any implicit typename must be from a base-class. The
1384 context for an implicit typename declaration is always
1385 the derived class in which the lookup was done, so the checks
1386 based on the context of DECL below will not trigger. */
1387 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1388 INHERITED_VALUE_BINDING_P (binding) = 1;
1389 else
1390 {
1391 if (TREE_CODE (decl) == OVERLOAD)
1392 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
1393 else
1394 {
1395 my_friendly_assert (DECL_P (decl), 0);
1396 context = context_for_name_lookup (decl);
1397 }
1398
1399 if (is_properly_derived_from (current_class_type, context))
1400 INHERITED_VALUE_BINDING_P (binding) = 1;
1401 else
1402 INHERITED_VALUE_BINDING_P (binding) = 0;
1403 }
1404 }
1405 else if (BINDING_VALUE (binding) == decl)
1406 /* We only encounter a TREE_LIST when push_class_decls detects an
1407 ambiguity. Such an ambiguity can be overridden by a definition
1408 in this class. */
1409 INHERITED_VALUE_BINDING_P (binding) = 1;
1410
1411 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, result);
1412 }
1413
1414 /* Remove the binding for DECL which should be the innermost binding
1415 for ID. */
1416
1417 static void
pop_binding(id,decl)1418 pop_binding (id, decl)
1419 tree id;
1420 tree decl;
1421 {
1422 cxx_binding *binding;
1423
1424 if (id == NULL_TREE)
1425 /* It's easiest to write the loops that call this function without
1426 checking whether or not the entities involved have names. We
1427 get here for such an entity. */
1428 return;
1429
1430 /* Get the innermost binding for ID. */
1431 binding = IDENTIFIER_BINDING (id);
1432
1433 /* The name should be bound. */
1434 my_friendly_assert (binding != NULL, 0);
1435
1436 /* The DECL will be either the ordinary binding or the type
1437 binding for this identifier. Remove that binding. */
1438 if (BINDING_VALUE (binding) == decl)
1439 BINDING_VALUE (binding) = NULL_TREE;
1440 else if (BINDING_TYPE (binding) == decl)
1441 BINDING_TYPE (binding) = NULL_TREE;
1442 else
1443 abort ();
1444
1445 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1446 {
1447 /* We're completely done with the innermost binding for this
1448 identifier. Unhook it from the list of bindings. */
1449 IDENTIFIER_BINDING (id) = binding->previous;
1450
1451 /* Add it to the free list. */
1452 binding->previous = free_bindings;
1453 free_bindings = binding;
1454
1455 /* Clear the BINDING_LEVEL so the garbage collector doesn't walk
1456 it. */
1457 BINDING_LEVEL (binding) = NULL;
1458 }
1459 }
1460
1461 /* When a label goes out of scope, check to see if that label was used
1462 in a valid manner, and issue any appropriate warnings or errors. */
1463
1464 static void
pop_label(label,old_value)1465 pop_label (label, old_value)
1466 tree label;
1467 tree old_value;
1468 {
1469 if (!processing_template_decl && doing_semantic_analysis_p ())
1470 {
1471 if (DECL_INITIAL (label) == NULL_TREE)
1472 {
1473 cp_error_at ("label `%D' used but not defined", label);
1474 /* Avoid crashing later. */
1475 define_label (input_filename, 1, DECL_NAME (label));
1476 }
1477 else if (warn_unused_label && !TREE_USED (label))
1478 cp_warning_at ("label `%D' defined but not used", label);
1479 }
1480
1481 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
1482 }
1483
1484 /* At the end of a function, all labels declared within the function
1485 go out of scope. BLOCK is the top-level block for the
1486 function. */
1487
1488 static void
pop_labels(block)1489 pop_labels (block)
1490 tree block;
1491 {
1492 struct named_label_list *link;
1493
1494 /* Clear out the definitions of all label names, since their scopes
1495 end here. */
1496 for (link = named_labels; link; link = link->next)
1497 {
1498 pop_label (link->label_decl, link->old_value);
1499 /* Put the labels into the "variables" of the top-level block,
1500 so debugger can see them. */
1501 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
1502 BLOCK_VARS (block) = link->label_decl;
1503 }
1504
1505 named_labels = NULL;
1506 }
1507
1508 /* Exit a binding level.
1509 Pop the level off, and restore the state of the identifier-decl mappings
1510 that were in effect when this level was entered.
1511
1512 If KEEP == 1, this level had explicit declarations, so
1513 and create a "block" (a BLOCK node) for the level
1514 to record its declarations and subblocks for symbol table output.
1515
1516 If FUNCTIONBODY is nonzero, this level is the body of a function,
1517 so create a block as if KEEP were set and also clear out all
1518 label names.
1519
1520 If REVERSE is nonzero, reverse the order of decls before putting
1521 them into the BLOCK. */
1522
1523 tree
poplevel(keep,reverse,functionbody)1524 poplevel (keep, reverse, functionbody)
1525 int keep;
1526 int reverse;
1527 int functionbody;
1528 {
1529 register tree link;
1530 /* The chain of decls was accumulated in reverse order.
1531 Put it into forward order, just for cleanliness. */
1532 tree decls;
1533 int tmp = functionbody;
1534 int real_functionbody;
1535 tree subblocks;
1536 tree block = NULL_TREE;
1537 tree decl;
1538 int leaving_for_scope;
1539
1540 timevar_push (TV_NAME_LOOKUP);
1541
1542 if (cfun && !doing_semantic_analysis_p ())
1543 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
1544
1545 my_friendly_assert (current_binding_level->parm_flag != 2,
1546 19990916);
1547
1548 real_functionbody = (current_binding_level->keep == 2
1549 ? ((functionbody = 0), tmp) : functionbody);
1550 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1551
1552 my_friendly_assert (!current_binding_level->class_shadowed,
1553 19990414);
1554
1555 /* We used to use KEEP == 2 to indicate that the new block should go
1556 at the beginning of the list of blocks at this binding level,
1557 rather than the end. This hack is no longer used. */
1558 my_friendly_assert (keep == 0 || keep == 1, 0);
1559
1560 if (current_binding_level->keep == 1)
1561 keep = 1;
1562
1563 /* Any uses of undefined labels, and any defined labels, now operate
1564 under constraints of next binding contour. */
1565 if (cfun && !functionbody)
1566 {
1567 struct cp_binding_level *level_chain;
1568 level_chain = current_binding_level->level_chain;
1569 if (level_chain)
1570 {
1571 struct named_label_use_list *uses;
1572 struct named_label_list *labels;
1573 for (labels = named_labels; labels; labels = labels->next)
1574 if (labels->binding_level == current_binding_level)
1575 {
1576 tree decl;
1577 if (current_binding_level->is_try_scope)
1578 labels->in_try_scope = 1;
1579 if (current_binding_level->is_catch_scope)
1580 labels->in_catch_scope = 1;
1581 for (decl = labels->names_in_scope; decl;
1582 decl = TREE_CHAIN (decl))
1583 if (decl_jump_unsafe (decl))
1584 labels->bad_decls = tree_cons (NULL_TREE, decl,
1585 labels->bad_decls);
1586 labels->binding_level = level_chain;
1587 labels->names_in_scope = level_chain->names;
1588 }
1589
1590 for (uses = named_label_uses; uses; uses = uses->next)
1591 if (uses->binding_level == current_binding_level)
1592 {
1593 uses->binding_level = level_chain;
1594 uses->names_in_scope = level_chain->names;
1595 }
1596 }
1597 }
1598
1599 /* Get the decls in the order they were written.
1600 Usually current_binding_level->names is in reverse order.
1601 But parameter decls were previously put in forward order. */
1602
1603 if (reverse)
1604 current_binding_level->names
1605 = decls = nreverse (current_binding_level->names);
1606 else
1607 decls = current_binding_level->names;
1608
1609 /* Output any nested inline functions within this block
1610 if they weren't already output. */
1611 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1612 if (TREE_CODE (decl) == FUNCTION_DECL
1613 && ! TREE_ASM_WRITTEN (decl)
1614 && DECL_INITIAL (decl) != NULL_TREE
1615 && TREE_ADDRESSABLE (decl)
1616 && decl_function_context (decl) == current_function_decl)
1617 {
1618 /* If this decl was copied from a file-scope decl
1619 on account of a block-scope extern decl,
1620 propagate TREE_ADDRESSABLE to the file-scope decl. */
1621 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1622 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1623 else
1624 {
1625 push_function_context ();
1626 output_inline_function (decl);
1627 pop_function_context ();
1628 }
1629 }
1630
1631 /* When not in function-at-a-time mode, expand_end_bindings will
1632 warn about unused variables. But, in function-at-a-time mode
1633 expand_end_bindings is not passed the list of variables in the
1634 current scope, and therefore no warning is emitted. So, we
1635 explicitly warn here. */
1636 if (!processing_template_decl)
1637 warn_about_unused_variables (getdecls ());
1638
1639 /* If there were any declarations or structure tags in that level,
1640 or if this level is a function body,
1641 create a BLOCK to record them for the life of this function. */
1642 block = NULL_TREE;
1643 if (keep == 1 || functionbody)
1644 block = make_node (BLOCK);
1645 if (block != NULL_TREE)
1646 {
1647 BLOCK_VARS (block) = decls;
1648 BLOCK_SUBBLOCKS (block) = subblocks;
1649 }
1650
1651 /* In each subblock, record that this is its superior. */
1652 if (keep >= 0)
1653 for (link = subblocks; link; link = TREE_CHAIN (link))
1654 BLOCK_SUPERCONTEXT (link) = block;
1655
1656 /* We still support the old for-scope rules, whereby the variables
1657 in a for-init statement were in scope after the for-statement
1658 ended. We only use the new rules in flag_new_for_scope is
1659 nonzero. */
1660 leaving_for_scope
1661 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1662
1663 /* Remove declarations for all the DECLs in this level. */
1664 for (link = decls; link; link = TREE_CHAIN (link))
1665 {
1666 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
1667 && DECL_NAME (link))
1668 {
1669 cxx_binding *outer_binding
1670 = IDENTIFIER_BINDING (DECL_NAME (link))->previous;
1671 tree ns_binding;
1672
1673 if (!outer_binding)
1674 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1675 else
1676 ns_binding = NULL_TREE;
1677
1678 if (outer_binding
1679 && (BINDING_LEVEL (outer_binding)
1680 == current_binding_level->level_chain))
1681 /* We have something like:
1682
1683 int i;
1684 for (int i; ;);
1685
1686 and we are leaving the `for' scope. There's no reason to
1687 keep the binding of the inner `i' in this case. */
1688 pop_binding (DECL_NAME (link), link);
1689 else if ((outer_binding
1690 && (TREE_CODE (BINDING_VALUE (outer_binding))
1691 == TYPE_DECL))
1692 || (ns_binding
1693 && TREE_CODE (ns_binding) == TYPE_DECL))
1694 /* Here, we have something like:
1695
1696 typedef int I;
1697
1698 void f () {
1699 for (int I; ;);
1700 }
1701
1702 We must pop the for-scope binding so we know what's a
1703 type and what isn't. */
1704 pop_binding (DECL_NAME (link), link);
1705 else
1706 {
1707 /* Mark this VAR_DECL as dead so that we can tell we left it
1708 there only for backward compatibility. */
1709 DECL_DEAD_FOR_LOCAL (link) = 1;
1710
1711 /* Keep track of what should of have happenned when we
1712 popped the binding. */
1713 if (outer_binding && BINDING_VALUE (outer_binding))
1714 DECL_SHADOWED_FOR_VAR (link)
1715 = BINDING_VALUE (outer_binding);
1716
1717 /* Add it to the list of dead variables in the next
1718 outermost binding to that we can remove these when we
1719 leave that binding. */
1720 current_binding_level->level_chain->dead_vars_from_for
1721 = tree_cons (NULL_TREE, link,
1722 current_binding_level->level_chain->
1723 dead_vars_from_for);
1724
1725 /* Although we don't pop the cxx_binding, we do clear
1726 its BINDING_LEVEL since the level is going away now. */
1727 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1728 = 0;
1729 }
1730 }
1731 else
1732 {
1733 /* Remove the binding. */
1734 decl = link;
1735 if (TREE_CODE (decl) == TREE_LIST)
1736 decl = TREE_VALUE (decl);
1737 if (DECL_P (decl))
1738 pop_binding (DECL_NAME (decl), decl);
1739 else if (TREE_CODE (decl) == OVERLOAD)
1740 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1741 else
1742 abort ();
1743 }
1744 }
1745
1746 /* Remove declarations for any `for' variables from inner scopes
1747 that we kept around. */
1748 for (link = current_binding_level->dead_vars_from_for;
1749 link; link = TREE_CHAIN (link))
1750 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1751
1752 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1753 for (link = current_binding_level->type_shadowed;
1754 link; link = TREE_CHAIN (link))
1755 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1756
1757 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1758 for (link = current_binding_level->shadowed_labels;
1759 link;
1760 link = TREE_CHAIN (link))
1761 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
1762
1763 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1764 list if a `using' declaration put them there. The debugging
1765 back-ends won't understand OVERLOAD, so we remove them here.
1766 Because the BLOCK_VARS are (temporarily) shared with
1767 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1768 popped all the bindings. */
1769 if (block)
1770 {
1771 tree* d;
1772
1773 for (d = &BLOCK_VARS (block); *d; )
1774 {
1775 if (TREE_CODE (*d) == TREE_LIST)
1776 *d = TREE_CHAIN (*d);
1777 else
1778 d = &TREE_CHAIN (*d);
1779 }
1780 }
1781
1782 /* If the level being exited is the top level of a function,
1783 check over all the labels. */
1784 if (functionbody)
1785 {
1786 /* Since this is the top level block of a function, the vars are
1787 the function's parameters. Don't leave them in the BLOCK
1788 because they are found in the FUNCTION_DECL instead. */
1789 BLOCK_VARS (block) = 0;
1790 pop_labels (block);
1791 }
1792
1793 tmp = current_binding_level->keep;
1794
1795 pop_binding_level ();
1796 if (functionbody)
1797 DECL_INITIAL (current_function_decl) = block;
1798 else if (block)
1799 current_binding_level->blocks
1800 = chainon (current_binding_level->blocks, block);
1801
1802 /* If we did not make a block for the level just exited,
1803 any blocks made for inner levels
1804 (since they cannot be recorded as subblocks in that level)
1805 must be carried forward so they will later become subblocks
1806 of something else. */
1807 else if (subblocks)
1808 current_binding_level->blocks
1809 = chainon (current_binding_level->blocks, subblocks);
1810
1811 /* Each and every BLOCK node created here in `poplevel' is important
1812 (e.g. for proper debugging information) so if we created one
1813 earlier, mark it as "used". */
1814 if (block)
1815 TREE_USED (block) = 1;
1816
1817 /* Take care of compiler's internal binding structures. */
1818 if (tmp == 2)
1819 {
1820 tree scope_stmts;
1821
1822 scope_stmts
1823 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
1824 if (block)
1825 {
1826 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1827 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1828 }
1829
1830 block = poplevel (keep, reverse, functionbody);
1831 }
1832
1833 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
1834 }
1835
1836 /* Delete the node BLOCK from the current binding level.
1837 This is used for the block inside a stmt expr ({...})
1838 so that the block can be reinserted where appropriate. */
1839
1840 void
delete_block(block)1841 delete_block (block)
1842 tree block;
1843 {
1844 tree t;
1845 if (current_binding_level->blocks == block)
1846 current_binding_level->blocks = TREE_CHAIN (block);
1847 for (t = current_binding_level->blocks; t;)
1848 {
1849 if (TREE_CHAIN (t) == block)
1850 TREE_CHAIN (t) = TREE_CHAIN (block);
1851 else
1852 t = TREE_CHAIN (t);
1853 }
1854 TREE_CHAIN (block) = NULL_TREE;
1855 /* Clear TREE_USED which is always set by poplevel.
1856 The flag is set again if insert_block is called. */
1857 TREE_USED (block) = 0;
1858 }
1859
1860 /* Insert BLOCK at the end of the list of subblocks of the
1861 current binding level. This is used when a BIND_EXPR is expanded,
1862 to handle the BLOCK node inside the BIND_EXPR. */
1863
1864 void
insert_block(block)1865 insert_block (block)
1866 tree block;
1867 {
1868 TREE_USED (block) = 1;
1869 current_binding_level->blocks
1870 = chainon (current_binding_level->blocks, block);
1871 }
1872
1873 /* Set the BLOCK node for the innermost scope
1874 (the one we are currently in). */
1875
1876 void
set_block(block)1877 set_block (block)
1878 tree block ATTRIBUTE_UNUSED;
1879 {
1880 /* The RTL expansion machinery requires us to provide this callback,
1881 but it is not applicable in function-at-a-time mode. */
1882 my_friendly_assert (cfun && !doing_semantic_analysis_p (), 20000911);
1883 }
1884
1885 /* Do a pushlevel for class declarations. */
1886
1887 void
pushlevel_class()1888 pushlevel_class ()
1889 {
1890 register struct cp_binding_level *newlevel;
1891
1892 /* Reuse or create a struct for this binding level. */
1893 if (!ENABLE_SCOPE_CHECKING && free_binding_level)
1894 {
1895 newlevel = free_binding_level;
1896 free_binding_level = free_binding_level->level_chain;
1897 }
1898 else
1899 newlevel = make_binding_level ();
1900
1901 if (ENABLE_SCOPE_CHECKING)
1902 is_class_level = 1;
1903
1904 push_binding_level (newlevel, 0, 0);
1905
1906 class_binding_level = current_binding_level;
1907 class_binding_level->parm_flag = 2;
1908 class_binding_level->this_class = current_class_type;
1909 }
1910
1911 /* ...and a poplevel for class declarations. */
1912
1913 void
poplevel_class()1914 poplevel_class ()
1915 {
1916 register struct cp_binding_level *level = class_binding_level;
1917 tree shadowed;
1918
1919 timevar_push (TV_NAME_LOOKUP);
1920
1921 my_friendly_assert (level != 0, 354);
1922
1923 /* If we're leaving a toplevel class, don't bother to do the setting
1924 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1925 shouldn't even be used when current_class_type isn't set, and second,
1926 if we don't touch it here, we're able to use the cache effect if the
1927 next time we're entering a class scope, it is the same class. */
1928 if (current_class_depth != 1)
1929 {
1930 struct cp_binding_level* b;
1931
1932 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1933 for (shadowed = level->class_shadowed;
1934 shadowed;
1935 shadowed = TREE_CHAIN (shadowed))
1936 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1937
1938 /* Find the next enclosing class, and recreate
1939 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1940 b = level->level_chain;
1941 while (b && b->parm_flag != 2)
1942 b = b->level_chain;
1943
1944 if (b)
1945 for (shadowed = b->class_shadowed;
1946 shadowed;
1947 shadowed = TREE_CHAIN (shadowed))
1948 {
1949 cxx_binding *binding;
1950
1951 binding = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1952 while (binding && BINDING_LEVEL (binding) != b)
1953 binding = binding->previous;
1954
1955 if (binding)
1956 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1957 = BINDING_VALUE (binding);
1958 }
1959 }
1960 else
1961 /* Remember to save what IDENTIFIER's were bound in this scope so we
1962 can recover from cache misses. */
1963 {
1964 previous_class_type = current_class_type;
1965 previous_class_values = class_binding_level->class_shadowed;
1966 }
1967 for (shadowed = level->type_shadowed;
1968 shadowed;
1969 shadowed = TREE_CHAIN (shadowed))
1970 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1971
1972 /* Remove the bindings for all of the class-level declarations. */
1973 for (shadowed = level->class_shadowed;
1974 shadowed;
1975 shadowed = TREE_CHAIN (shadowed))
1976 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1977
1978 /* Now, pop out of the binding level which we created up in the
1979 `pushlevel_class' routine. */
1980 if (ENABLE_SCOPE_CHECKING)
1981 is_class_level = 1;
1982
1983 pop_binding_level ();
1984
1985 timevar_pop (TV_NAME_LOOKUP);
1986 }
1987
1988 /* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1989 for any names in enclosing classes. */
1990
1991 void
clear_identifier_class_values()1992 clear_identifier_class_values ()
1993 {
1994 tree t;
1995
1996 if (!class_binding_level)
1997 return;
1998
1999 for (t = class_binding_level->class_shadowed;
2000 t;
2001 t = TREE_CHAIN (t))
2002 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
2003 }
2004
2005 /* Returns nonzero if T is a virtual function table. */
2006
2007 int
vtable_decl_p(t,data)2008 vtable_decl_p (t, data)
2009 tree t;
2010 void *data ATTRIBUTE_UNUSED;
2011 {
2012 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
2013 }
2014
2015 /* Returns nonzero if T is a TYPE_DECL for a type with virtual
2016 functions. */
2017
2018 int
vtype_decl_p(t,data)2019 vtype_decl_p (t, data)
2020 tree t;
2021 void *data ATTRIBUTE_UNUSED;
2022 {
2023 return (TREE_CODE (t) == TYPE_DECL
2024 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
2025 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
2026 }
2027
2028 /* Return the declarations that are members of the namespace NS. */
2029
2030 tree
cp_namespace_decls(ns)2031 cp_namespace_decls (ns)
2032 tree ns;
2033 {
2034 return NAMESPACE_LEVEL (ns)->names;
2035 }
2036
2037 struct walk_globals_data {
2038 walk_globals_pred p;
2039 walk_globals_fn f;
2040 void *data;
2041 };
2042
2043 /* Walk the vtable declarations in NAMESPACE. Whenever one is found
2044 for which P returns nonzero, call F with its address. If any call
2045 to F returns a nonzero value, return a nonzero value. */
2046
2047 static int
walk_vtables_r(namespace,data)2048 walk_vtables_r (namespace, data)
2049 tree namespace;
2050 void *data;
2051 {
2052 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
2053 walk_globals_fn f = wgd->f;
2054 void *d = wgd->data;
2055 tree decl = NAMESPACE_LEVEL (namespace)->vtables;
2056 int result = 0;
2057
2058 for (; decl ; decl = TREE_CHAIN (decl))
2059 result |= (*f) (&decl, d);
2060
2061 return result;
2062 }
2063
2064 /* Walk the vtable declarations. Whenever one is found for which P
2065 returns nonzero, call F with its address. If any call to F
2066 returns a nonzero value, return a nonzero value. */
2067 int
walk_vtables(p,f,data)2068 walk_vtables (p, f, data)
2069 walk_globals_pred p;
2070 walk_globals_fn f;
2071 void *data;
2072 {
2073 struct walk_globals_data wgd;
2074 wgd.p = p;
2075 wgd.f = f;
2076 wgd.data = data;
2077
2078 return walk_namespaces (walk_vtables_r, &wgd);
2079 }
2080
2081 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
2082 itself, calling F for each. The DATA is passed to F as well. */
2083
2084 static int
walk_namespaces_r(namespace,f,data)2085 walk_namespaces_r (namespace, f, data)
2086 tree namespace;
2087 walk_namespaces_fn f;
2088 void *data;
2089 {
2090 int result = 0;
2091 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
2092
2093 result |= (*f) (namespace, data);
2094
2095 for (; current; current = TREE_CHAIN (current))
2096 result |= walk_namespaces_r (current, f, data);
2097
2098 return result;
2099 }
2100
2101 /* Walk all the namespaces, calling F for each. The DATA is passed to
2102 F as well. */
2103
2104 int
walk_namespaces(f,data)2105 walk_namespaces (f, data)
2106 walk_namespaces_fn f;
2107 void *data;
2108 {
2109 return walk_namespaces_r (global_namespace, f, data);
2110 }
2111
2112 /* Walk the global declarations in NAMESPACE. Whenever one is found
2113 for which P returns nonzero, call F with its address. If any call
2114 to F returns a nonzero value, return a nonzero value. */
2115
2116 static int
walk_globals_r(namespace,data)2117 walk_globals_r (namespace, data)
2118 tree namespace;
2119 void *data;
2120 {
2121 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
2122 walk_globals_pred p = wgd->p;
2123 walk_globals_fn f = wgd->f;
2124 void *d = wgd->data;
2125 tree *t;
2126 int result = 0;
2127
2128 t = &NAMESPACE_LEVEL (namespace)->names;
2129
2130 while (*t)
2131 {
2132 tree glbl = *t;
2133
2134 if ((*p) (glbl, d))
2135 result |= (*f) (t, d);
2136
2137 /* If F changed *T, then *T still points at the next item to
2138 examine. */
2139 if (*t == glbl)
2140 t = &TREE_CHAIN (*t);
2141 }
2142
2143 return result;
2144 }
2145
2146 /* Walk the global declarations. Whenever one is found for which P
2147 returns nonzero, call F with its address. If any call to F
2148 returns a nonzero value, return a nonzero value. */
2149
2150 int
walk_globals(p,f,data)2151 walk_globals (p, f, data)
2152 walk_globals_pred p;
2153 walk_globals_fn f;
2154 void *data;
2155 {
2156 struct walk_globals_data wgd;
2157 wgd.p = p;
2158 wgd.f = f;
2159 wgd.data = data;
2160
2161 return walk_namespaces (walk_globals_r, &wgd);
2162 }
2163
2164 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
2165 DATA is non-NULL, this is the last time we will call
2166 wrapup_global_declarations for this NAMESPACE. */
2167
2168 int
wrapup_globals_for_namespace(namespace,data)2169 wrapup_globals_for_namespace (namespace, data)
2170 tree namespace;
2171 void *data;
2172 {
2173 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
2174 varray_type statics = level->static_decls;
2175 tree *vec = &VARRAY_TREE (statics, 0);
2176 int len = VARRAY_ACTIVE_SIZE (statics);
2177 int last_time = (data != 0);
2178
2179 if (last_time)
2180 {
2181 check_global_declarations (vec, len);
2182 return 0;
2183 }
2184
2185 /* Write out any globals that need to be output. */
2186 return wrapup_global_declarations (vec, len);
2187 }
2188
2189
2190 /* For debugging. */
2191 static int no_print_functions = 0;
2192 static int no_print_builtins = 0;
2193
2194 /* Called from print_binding_level through binding_table_foreach to
2195 print the content of binding ENTRY. DATA is a pointer to line offset
2196 marker. */
2197 static void
bt_print_entry(binding_entry entry,void * data)2198 bt_print_entry (binding_entry entry, void *data)
2199 {
2200 int *p = (int *) data;
2201 int len;
2202
2203 if (entry->name == NULL)
2204 len = 3;
2205 else if (entry->name == TYPE_IDENTIFIER (entry->type))
2206 len = 2;
2207 else
2208 len = 4;
2209
2210 *p += len;
2211
2212 if (*p > 5)
2213 {
2214 fprintf (stderr, "\n\t");
2215 *p = len;
2216 }
2217 if (entry->name == NULL)
2218 {
2219 print_node_brief (stderr, "<unnamed-typedef", entry->type, 0);
2220 fprintf (stderr, ">");
2221 }
2222 else if (entry->name == TYPE_IDENTIFIER (entry->type))
2223 print_node_brief (stderr, "", entry->type, 0);
2224 else
2225 {
2226 print_node_brief (stderr, "<typedef", entry->name, 0);
2227 print_node_brief (stderr, "", entry->type, 0);
2228 fprintf (stderr, ">");
2229 }
2230 }
2231
2232 void
print_binding_level(lvl)2233 print_binding_level (lvl)
2234 struct cp_binding_level *lvl;
2235 {
2236 tree t;
2237 int i = 0, len;
2238 fprintf (stderr, " blocks=");
2239 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
2240 if (lvl->tag_transparent)
2241 fprintf (stderr, " tag-transparent");
2242 if (lvl->more_cleanups_ok)
2243 fprintf (stderr, " more-cleanups-ok");
2244 if (lvl->have_cleanups)
2245 fprintf (stderr, " have-cleanups");
2246 fprintf (stderr, "\n");
2247 if (lvl->names)
2248 {
2249 fprintf (stderr, " names:\t");
2250 /* We can probably fit 3 names to a line? */
2251 for (t = lvl->names; t; t = TREE_CHAIN (t))
2252 {
2253 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
2254 continue;
2255 if (no_print_builtins
2256 && (TREE_CODE (t) == TYPE_DECL)
2257 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2258 continue;
2259
2260 /* Function decls tend to have longer names. */
2261 if (TREE_CODE (t) == FUNCTION_DECL)
2262 len = 3;
2263 else
2264 len = 2;
2265 i += len;
2266 if (i > 6)
2267 {
2268 fprintf (stderr, "\n\t");
2269 i = len;
2270 }
2271 print_node_brief (stderr, "", t, 0);
2272 if (t == error_mark_node)
2273 break;
2274 }
2275 if (i)
2276 fprintf (stderr, "\n");
2277 }
2278 if (lvl->type_decls)
2279 {
2280 fprintf (stderr, " tags:\t");
2281 i = 0;
2282 binding_table_foreach (lvl->type_decls, bt_print_entry, &i);
2283 if (i)
2284 fprintf (stderr, "\n");
2285 }
2286 if (lvl->class_shadowed)
2287 {
2288 fprintf (stderr, " class-shadowed:");
2289 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2290 {
2291 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2292 }
2293 fprintf (stderr, "\n");
2294 }
2295 if (lvl->type_shadowed)
2296 {
2297 fprintf (stderr, " type-shadowed:");
2298 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2299 {
2300 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2301 }
2302 fprintf (stderr, "\n");
2303 }
2304 }
2305
2306 void
print_other_binding_stack(stack)2307 print_other_binding_stack (stack)
2308 struct cp_binding_level *stack;
2309 {
2310 struct cp_binding_level *level;
2311 for (level = stack; !global_scope_p (level); level = level->level_chain)
2312 {
2313 fprintf (stderr, "binding level ");
2314 fprintf (stderr, HOST_PTR_PRINTF, level);
2315 fprintf (stderr, "\n");
2316 print_binding_level (level);
2317 }
2318 }
2319
2320 void
print_binding_stack()2321 print_binding_stack ()
2322 {
2323 struct cp_binding_level *b;
2324 fprintf (stderr, "current_binding_level=");
2325 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2326 fprintf (stderr, "\nclass_binding_level=");
2327 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2328 fprintf (stderr, "\nNAMESPACE_LEVEL (global_namespace)=");
2329 fprintf (stderr, HOST_PTR_PRINTF,
2330 (void *) NAMESPACE_LEVEL (global_namespace));
2331 fprintf (stderr, "\n");
2332 if (class_binding_level)
2333 {
2334 for (b = class_binding_level; b; b = b->level_chain)
2335 if (b == current_binding_level)
2336 break;
2337 if (b)
2338 b = class_binding_level;
2339 else
2340 b = current_binding_level;
2341 }
2342 else
2343 b = current_binding_level;
2344 print_other_binding_stack (b);
2345 fprintf (stderr, "global:\n");
2346 print_binding_level (NAMESPACE_LEVEL (global_namespace));
2347 }
2348
2349 /* Namespace binding access routines. */
2350
2351 /* Check whether the a binding for the name to scope is known.
2352 Returns the binding found, or NULL. */
2353
2354 static inline cxx_binding *
find_binding(tree name,tree scope,cxx_binding * front)2355 find_binding (tree name, tree scope, cxx_binding *front)
2356 {
2357 cxx_binding *iter;
2358 cxx_binding *prev = NULL;
2359
2360 timevar_push (TV_NAME_LOOKUP);
2361
2362 for (iter = front; iter; iter = iter->previous)
2363 {
2364 if (BINDING_SCOPE (iter) == scope)
2365 {
2366 /* Move binding found to the front of the list, so
2367 subsequent lookups will find it faster. */
2368 if (prev)
2369 {
2370 prev->previous = iter->previous;
2371 iter->previous = front;
2372 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2373 }
2374 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, iter);
2375 }
2376 prev = iter;
2377 }
2378 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL);
2379 }
2380
2381 /* Return the binding for NAME in SCOPE, if any. Otherwise, return NULL. */
2382 cxx_binding *
cxx_scope_find_binding_for_name(tree scope,tree name)2383 cxx_scope_find_binding_for_name (tree scope, tree name)
2384 {
2385 cxx_binding *b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2386 if (b)
2387 {
2388 scope = ORIGINAL_NAMESPACE (scope);
2389 /* Fold-in case where NAME is used only once. */
2390 if (scope == BINDING_SCOPE (b) && b->previous == NULL)
2391 return b;
2392 return find_binding (name, scope, b);
2393 }
2394 return b;
2395 }
2396
2397
2398 /* Always returns a binding for name in scope.
2399 If no binding is found, make a new one. */
2400
2401 cxx_binding *
binding_for_name(tree name,tree scope)2402 binding_for_name (tree name, tree scope)
2403 {
2404 cxx_binding *result;
2405
2406 scope = ORIGINAL_NAMESPACE (scope);
2407 result = cxx_scope_find_binding_for_name (scope, name);
2408 if (result)
2409 return result;
2410 /* Not found, make a new one. */
2411 result = cxx_binding_make ();
2412 result->previous = IDENTIFIER_NAMESPACE_BINDINGS (name);
2413 BINDING_TYPE (result) = NULL_TREE;
2414 BINDING_VALUE (result) = NULL_TREE;
2415 BINDING_SCOPE (result) = scope;
2416 result->is_local = false;
2417 result->value_is_inherited = false;
2418 result->has_level = false;
2419 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2420 return result;
2421 }
2422
2423 /* Return the binding value for name in scope. */
2424
2425 tree
namespace_binding(tree name,tree scope)2426 namespace_binding (tree name, tree scope)
2427 {
2428 cxx_binding *b =
2429 cxx_scope_find_binding_for_name (scope ? scope : global_namespace, name);
2430
2431 return b ? b->value : NULL_TREE;
2432 }
2433
2434 /* Set the binding value for name in scope. */
2435
2436 void
set_namespace_binding(name,scope,val)2437 set_namespace_binding (name, scope, val)
2438 tree name;
2439 tree scope;
2440 tree val;
2441 {
2442 cxx_binding *b;
2443
2444 timevar_push (TV_NAME_LOOKUP);
2445 if (scope == NULL_TREE)
2446 scope = global_namespace;
2447
2448 b = binding_for_name (name, scope);
2449 BINDING_VALUE (b) = val;
2450 timevar_pop (TV_NAME_LOOKUP);
2451 }
2452
2453 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2454 select a name that is unique to this compilation unit. */
2455
2456 void
push_namespace(name)2457 push_namespace (name)
2458 tree name;
2459 {
2460 tree d = NULL_TREE;
2461 int need_new = 1;
2462 int implicit_use = 0;
2463 int global = 0;
2464
2465 timevar_push (TV_NAME_LOOKUP);
2466
2467 if (!global_namespace)
2468 {
2469 /* This must be ::. */
2470 my_friendly_assert (name == get_identifier ("::"), 377);
2471 global = 1;
2472 }
2473 else if (!name)
2474 {
2475 /* The name of anonymous namespace is unique for the translation
2476 unit. */
2477 if (!anonymous_namespace_name)
2478 anonymous_namespace_name = get_file_function_name ('N');
2479 name = anonymous_namespace_name;
2480 d = IDENTIFIER_NAMESPACE_VALUE (name);
2481 if (d)
2482 /* Reopening anonymous namespace. */
2483 need_new = 0;
2484 implicit_use = 1;
2485 }
2486 else
2487 {
2488 /* Check whether this is an extended namespace definition. */
2489 d = IDENTIFIER_NAMESPACE_VALUE (name);
2490 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2491 {
2492 need_new = 0;
2493 if (DECL_NAMESPACE_ALIAS (d))
2494 {
2495 error ("namespace alias `%D' not allowed here, assuming `%D'",
2496 d, DECL_NAMESPACE_ALIAS (d));
2497 d = DECL_NAMESPACE_ALIAS (d);
2498 }
2499 }
2500 }
2501
2502 if (need_new)
2503 {
2504 /* Make a new namespace, binding the name to it. */
2505 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2506 /* The global namespace is not pushed, and the global binding
2507 level is set elsewhere. */
2508 if (!global)
2509 {
2510 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
2511 d = pushdecl (d);
2512 pushlevel (0);
2513 declare_namespace_level ();
2514 NAMESPACE_LEVEL (d) = current_binding_level;
2515 current_binding_level->type_decls =
2516 binding_table_new (name == std_identifier
2517 ? NAMESPACE_STD_HT_SIZE
2518 : NAMESPACE_ORDINARY_HT_SIZE);
2519 VARRAY_TREE_INIT (current_binding_level->static_decls,
2520 name != std_identifier ? 10 : 200,
2521 "Static declarations");
2522 }
2523 }
2524 else
2525 resume_binding_level (NAMESPACE_LEVEL (d));
2526
2527 if (implicit_use)
2528 do_using_directive (d);
2529 /* Enter the name space. */
2530 current_namespace = d;
2531
2532 timevar_pop (TV_NAME_LOOKUP);
2533 }
2534
2535 /* Pop from the scope of the current namespace. */
2536
2537 void
pop_namespace()2538 pop_namespace ()
2539 {
2540 my_friendly_assert (current_namespace != global_namespace, 20010801);
2541 current_namespace = CP_DECL_CONTEXT (current_namespace);
2542 /* The binding level is not popped, as it might be re-opened later. */
2543 suspend_binding_level ();
2544 }
2545
2546 /* Push into the scope of the namespace NS, even if it is deeply
2547 nested within another namespace. */
2548
2549 void
push_nested_namespace(ns)2550 push_nested_namespace (ns)
2551 tree ns;
2552 {
2553 if (ns == global_namespace)
2554 push_to_top_level ();
2555 else
2556 {
2557 push_nested_namespace (CP_DECL_CONTEXT (ns));
2558 push_namespace (DECL_NAME (ns));
2559 }
2560 }
2561
2562 /* Pop back from the scope of the namespace NS, which was previously
2563 entered with push_nested_namespace. */
2564
2565 void
pop_nested_namespace(ns)2566 pop_nested_namespace (ns)
2567 tree ns;
2568 {
2569 timevar_push (TV_NAME_LOOKUP);
2570 while (ns != global_namespace)
2571 {
2572 pop_namespace ();
2573 ns = CP_DECL_CONTEXT (ns);
2574 }
2575
2576 pop_from_top_level ();
2577 timevar_pop (TV_NAME_LOOKUP);
2578 }
2579
2580
2581 /* Allocate storage for saving a C++ binding. */
2582 #define cxx_saved_binding_make() \
2583 (ggc_alloc (sizeof (cxx_saved_binding)))
2584
2585 struct cxx_saved_binding GTY(())
2586 {
2587 /* Link that chains saved C++ bindings for a given name into a stack. */
2588 cxx_saved_binding *previous;
2589 /* The name of the current binding. */
2590 tree identifier;
2591 /* The binding we're saving. */
2592 cxx_binding *binding;
2593 tree class_value;
2594 tree real_type_value;
2595 };
2596
2597 /* Subroutines for reverting temporarily to top-level for instantiation
2598 of templates and such. We actually need to clear out the class- and
2599 local-value slots of all identifiers, so that only the global values
2600 are at all visible. Simply setting current_binding_level to the global
2601 scope isn't enough, because more binding levels may be pushed. */
2602 struct saved_scope *scope_chain;
2603
2604 static cxx_saved_binding *
store_bindings(tree names,cxx_saved_binding * old_bindings)2605 store_bindings (tree names, cxx_saved_binding *old_bindings)
2606 {
2607 tree t;
2608 cxx_saved_binding *search_bindings = old_bindings;
2609
2610 timevar_push (TV_NAME_LOOKUP);
2611 for (t = names; t; t = TREE_CHAIN (t))
2612 {
2613 tree id;
2614 cxx_saved_binding *saved;
2615 cxx_saved_binding *t1;
2616
2617 if (TREE_CODE (t) == TREE_LIST)
2618 id = TREE_PURPOSE (t);
2619 else
2620 id = DECL_NAME (t);
2621
2622 if (!id
2623 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2624 we have no IDENTIFIER_BINDING if we have left the class
2625 scope, but cached the class-level declarations. */
2626 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2627 continue;
2628
2629 for (t1 = search_bindings; t1; t1 = t1->previous)
2630 if (t1->identifier == id)
2631 goto skip_it;
2632
2633 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2634 saved = cxx_saved_binding_make ();
2635 saved->previous = old_bindings;
2636 saved->identifier = id;
2637 saved->binding = IDENTIFIER_BINDING (id);
2638 saved->class_value = IDENTIFIER_CLASS_VALUE (id);;
2639 saved->real_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2640 IDENTIFIER_BINDING (id) = NULL;
2641 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2642 old_bindings = saved;
2643 skip_it:
2644 ;
2645 }
2646 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, old_bindings);
2647 }
2648
2649 void
maybe_push_to_top_level(pseudo)2650 maybe_push_to_top_level (pseudo)
2651 int pseudo;
2652 {
2653 struct saved_scope *s;
2654 struct cp_binding_level *b;
2655 cxx_saved_binding *old_bindings;
2656 int need_pop;
2657
2658 timevar_push (TV_NAME_LOOKUP);
2659
2660 s = (struct saved_scope *) ggc_alloc_cleared (sizeof (struct saved_scope));
2661
2662 b = scope_chain ? current_binding_level : 0;
2663
2664 /* If we're in the middle of some function, save our state. */
2665 if (cfun)
2666 {
2667 need_pop = 1;
2668 push_function_context_to (NULL_TREE);
2669 }
2670 else
2671 need_pop = 0;
2672
2673 old_bindings = NULL;
2674 if (scope_chain && previous_class_type)
2675 old_bindings = store_bindings (previous_class_values, old_bindings);
2676
2677 /* Have to include the global scope, because class-scope decls
2678 aren't listed anywhere useful. */
2679 for (; b; b = b->level_chain)
2680 {
2681 tree t;
2682
2683 /* Template IDs are inserted into the global level. If they were
2684 inserted into namespace level, finish_file wouldn't find them
2685 when doing pending instantiations. Therefore, don't stop at
2686 namespace level, but continue until :: . */
2687 if (global_scope_p (b) || (pseudo && b->template_parms_p))
2688 break;
2689
2690 old_bindings = store_bindings (b->names, old_bindings);
2691 /* We also need to check class_shadowed to save class-level type
2692 bindings, since pushclass doesn't fill in b->names. */
2693 if (b->parm_flag == 2)
2694 old_bindings = store_bindings (b->class_shadowed, old_bindings);
2695
2696 /* Unwind type-value slots back to top level. */
2697 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2698 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2699 }
2700 s->prev = scope_chain;
2701 s->old_bindings = old_bindings;
2702 s->bindings = b;
2703 s->need_pop_function_context = need_pop;
2704 s->function_decl = current_function_decl;
2705 s->last_parms = last_function_parms;
2706
2707 scope_chain = s;
2708 current_function_decl = NULL_TREE;
2709 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2710 current_lang_name = lang_name_cplusplus;
2711 current_namespace = global_namespace;
2712 timevar_pop (TV_NAME_LOOKUP);
2713 }
2714
2715 void
push_to_top_level()2716 push_to_top_level ()
2717 {
2718 maybe_push_to_top_level (0);
2719 }
2720
2721 void
pop_from_top_level()2722 pop_from_top_level ()
2723 {
2724 struct saved_scope *s = scope_chain;
2725 cxx_saved_binding *saved;
2726
2727 timevar_push (TV_NAME_LOOKUP);
2728
2729 /* Clear out class-level bindings cache. */
2730 if (previous_class_type)
2731 invalidate_class_lookup_cache ();
2732
2733 current_lang_base = 0;
2734
2735 scope_chain = s->prev;
2736 for (saved = s->old_bindings; saved; saved = saved->previous)
2737 {
2738 tree id = saved->identifier;
2739
2740 IDENTIFIER_BINDING (id) = saved->binding;
2741 IDENTIFIER_CLASS_VALUE (id) = saved->class_value;
2742 SET_IDENTIFIER_TYPE_VALUE (id, saved->real_type_value);
2743 }
2744
2745 /* If we were in the middle of compiling a function, restore our
2746 state. */
2747 if (s->need_pop_function_context)
2748 pop_function_context_from (NULL_TREE);
2749 current_function_decl = s->function_decl;
2750 last_function_parms = s->last_parms;
2751
2752 timevar_pop (TV_NAME_LOOKUP);
2753 }
2754
2755 /* Push a definition of struct, union or enum tag "name".
2756 into binding_level "b". "type" should be the type node,
2757 We assume that the tag "name" is not already defined.
2758
2759 Note that the definition may really be just a forward reference.
2760 In that case, the TYPE_SIZE will be a NULL_TREE.
2761
2762 C++ gratuitously puts all these tags in the name space. */
2763
2764 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2765 record the shadowed value for this binding contour. TYPE is
2766 the type that ID maps to. */
2767
2768 static void
set_identifier_type_value_with_scope(id,type,b)2769 set_identifier_type_value_with_scope (id, type, b)
2770 tree id;
2771 tree type;
2772 struct cp_binding_level *b;
2773 {
2774 if (!b->namespace_p)
2775 {
2776 /* Shadow the marker, not the real thing, so that the marker
2777 gets restored later. */
2778 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2779 b->type_shadowed
2780 = tree_cons (id, old_type_value, b->type_shadowed);
2781 }
2782 else
2783 {
2784 cxx_binding *binding = binding_for_name (id, current_namespace);
2785 BINDING_TYPE (binding) = type;
2786 /* Store marker instead of real type. */
2787 type = global_type_node;
2788 }
2789 SET_IDENTIFIER_TYPE_VALUE (id, type);
2790 }
2791
2792 /* As set_identifier_type_value_with_scope, but using current_binding_level. */
2793
2794 void
set_identifier_type_value(id,type)2795 set_identifier_type_value (id, type)
2796 tree id;
2797 tree type;
2798 {
2799 set_identifier_type_value_with_scope (id, type, current_binding_level);
2800 }
2801
2802 /* Return the type associated with id. */
2803
2804 tree
identifier_type_value(id)2805 identifier_type_value (id)
2806 tree id;
2807 {
2808 timevar_push (TV_NAME_LOOKUP);
2809 /* There is no type with that name, anywhere. */
2810 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2811 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2812 /* This is not the type marker, but the real thing. */
2813 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2814 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, REAL_IDENTIFIER_TYPE_VALUE (id));
2815 /* Have to search for it. It must be on the global level, now.
2816 Ask lookup_name not to return non-types. */
2817 id = lookup_name_real (id, 2, 1, 0);
2818 if (id)
2819 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, TREE_TYPE (id));
2820 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2821 }
2822
2823 /* Pop off extraneous binding levels left over due to syntax errors.
2824
2825 We don't pop past namespaces, as they might be valid. */
2826
2827 void
pop_everything()2828 pop_everything ()
2829 {
2830 if (ENABLE_SCOPE_CHECKING)
2831 verbatim ("XXX entering pop_everything ()\n");
2832 while (!toplevel_bindings_p ())
2833 {
2834 if (current_binding_level->parm_flag == 2)
2835 pop_nested_class ();
2836 else
2837 poplevel (0, 0, 0);
2838 }
2839 if (ENABLE_SCOPE_CHECKING)
2840 verbatim ("XXX leaving pop_everything ()\n");
2841 }
2842
2843 /* The type TYPE is being declared. If it is a class template, or a
2844 specialization of a class template, do any processing required and
2845 perform error-checking. If IS_FRIEND is nonzero, this TYPE is
2846 being declared a friend. B is the binding level at which this TYPE
2847 should be bound.
2848
2849 Returns the TYPE_DECL for TYPE, which may have been altered by this
2850 processing. */
2851
2852 static tree
maybe_process_template_type_declaration(type,globalize,b)2853 maybe_process_template_type_declaration (type, globalize, b)
2854 tree type;
2855 int globalize;
2856 struct cp_binding_level* b;
2857 {
2858 tree decl = TYPE_NAME (type);
2859
2860 if (processing_template_parmlist)
2861 /* You can't declare a new template type in a template parameter
2862 list. But, you can declare a non-template type:
2863
2864 template <class A*> struct S;
2865
2866 is a forward-declaration of `A'. */
2867 ;
2868 else
2869 {
2870 maybe_check_template_type (type);
2871
2872 my_friendly_assert (IS_AGGR_TYPE (type)
2873 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2874
2875
2876 if (processing_template_decl)
2877 {
2878 /* This may change after the call to
2879 push_template_decl_real, but we want the original value. */
2880 tree name = DECL_NAME (decl);
2881
2882 decl = push_template_decl_real (decl, globalize);
2883 /* If the current binding level is the binding level for the
2884 template parameters (see the comment in
2885 begin_template_parm_list) and the enclosing level is a class
2886 scope, and we're not looking at a friend, push the
2887 declaration of the member class into the class scope. In the
2888 friend case, push_template_decl will already have put the
2889 friend into global scope, if appropriate. */
2890 if (TREE_CODE (type) != ENUMERAL_TYPE
2891 && !globalize && b->template_parms_p
2892 && b->level_chain->parm_flag == 2)
2893 {
2894 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2895 /* Put this tag on the list of tags for the class, since
2896 that won't happen below because B is not the class
2897 binding level, but is instead the pseudo-global level. */
2898 if (b->level_chain->type_decls == NULL)
2899 b->level_chain->type_decls =
2900 binding_table_new (SCOPE_DEFAULT_HT_SIZE);
2901 binding_table_insert (b->level_chain->type_decls, name, type);
2902 if (!COMPLETE_TYPE_P (current_class_type))
2903 {
2904 maybe_add_class_template_decl_list (current_class_type,
2905 type, /*friend_p=*/0);
2906 CLASSTYPE_NESTED_UDTS (current_class_type) =
2907 b->level_chain->type_decls;
2908 }
2909 }
2910 }
2911 }
2912
2913 return decl;
2914 }
2915
2916 /* In C++, you don't have to write `struct S' to refer to `S'; you
2917 can just use `S'. We accomplish this by creating a TYPE_DECL as
2918 if the user had written `typedef struct S S'. Create and return
2919 the TYPE_DECL for TYPE. */
2920
2921 tree
create_implicit_typedef(name,type)2922 create_implicit_typedef (name, type)
2923 tree name;
2924 tree type;
2925 {
2926 tree decl;
2927
2928 decl = build_decl (TYPE_DECL, name, type);
2929 DECL_ARTIFICIAL (decl) = 1;
2930 /* There are other implicit type declarations, like the one *within*
2931 a class that allows you to write `S::S'. We must distinguish
2932 amongst these. */
2933 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2934 TYPE_NAME (type) = decl;
2935
2936 return decl;
2937 }
2938
2939 /* Remember a local name for name-mangling purposes. */
2940
2941 static void
push_local_name(decl)2942 push_local_name (decl)
2943 tree decl;
2944 {
2945 size_t i, nelts;
2946 tree t, name;
2947
2948 timevar_push (TV_NAME_LOOKUP);
2949
2950 if (!local_names)
2951 VARRAY_TREE_INIT (local_names, 8, "local_names");
2952
2953 name = DECL_NAME (decl);
2954
2955 nelts = VARRAY_ACTIVE_SIZE (local_names);
2956 for (i = 0; i < nelts; i++)
2957 {
2958 t = VARRAY_TREE (local_names, i);
2959 if (DECL_NAME (t) == name)
2960 {
2961 if (!DECL_LANG_SPECIFIC (decl))
2962 retrofit_lang_decl (decl);
2963 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
2964 if (DECL_LANG_SPECIFIC (t))
2965 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
2966 else
2967 DECL_DISCRIMINATOR (decl) = 1;
2968
2969 VARRAY_TREE (local_names, i) = decl;
2970 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
2971 }
2972 }
2973
2974 VARRAY_PUSH_TREE (local_names, decl);
2975 timevar_pop (TV_NAME_LOOKUP);
2976 }
2977
2978 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2979 Normally put it into the inner-most non-tag-transparent scope,
2980 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2981 The latter is needed for implicit declarations. */
2982
2983 void
pushtag(name,type,globalize)2984 pushtag (name, type, globalize)
2985 tree name, type;
2986 int globalize;
2987 {
2988 register struct cp_binding_level *b;
2989
2990 timevar_push (TV_NAME_LOOKUP);
2991
2992 b = current_binding_level;
2993 while (b->tag_transparent
2994 || (b->parm_flag == 2
2995 && (globalize
2996 /* We may be defining a new type in the initializer
2997 of a static member variable. We allow this when
2998 not pedantic, and it is particularly useful for
2999 type punning via an anonymous union. */
3000 || COMPLETE_TYPE_P (b->this_class))))
3001 b = b->level_chain;
3002
3003 if (b->type_decls == NULL)
3004 b->type_decls = binding_table_new (SCOPE_DEFAULT_HT_SIZE);
3005 binding_table_insert (b->type_decls, name, type);
3006
3007 if (name)
3008 {
3009 /* Do C++ gratuitous typedefing. */
3010 if (IDENTIFIER_TYPE_VALUE (name) != type)
3011 {
3012 register tree d = NULL_TREE;
3013 int in_class = 0;
3014 tree context = TYPE_CONTEXT (type);
3015
3016 if (! context)
3017 {
3018 tree cs = current_scope ();
3019
3020 if (! globalize)
3021 context = cs;
3022 else if (cs != NULL_TREE && TYPE_P (cs))
3023 /* When declaring a friend class of a local class, we want
3024 to inject the newly named class into the scope
3025 containing the local class, not the namespace scope. */
3026 context = decl_function_context (get_type_decl (cs));
3027 }
3028 if (!context)
3029 context = current_namespace;
3030
3031 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
3032 || b->parm_flag == 2)
3033 in_class = 1;
3034
3035 if (current_lang_name == lang_name_java)
3036 TYPE_FOR_JAVA (type) = 1;
3037
3038 d = create_implicit_typedef (name, type);
3039 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3040 if (! in_class)
3041 set_identifier_type_value_with_scope (name, type, b);
3042
3043 d = maybe_process_template_type_declaration (type,
3044 globalize, b);
3045
3046 if (b->parm_flag == 2)
3047 {
3048 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
3049 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
3050 class. But if it's a member template class, we
3051 want the TEMPLATE_DECL, not the TYPE_DECL, so this
3052 is done later. */
3053 finish_member_declaration (d);
3054 else
3055 pushdecl_class_level (d);
3056 }
3057 else
3058 d = pushdecl_with_scope (d, b);
3059
3060 /* FIXME what if it gets a name from typedef? */
3061 if (ANON_AGGRNAME_P (name))
3062 DECL_IGNORED_P (d) = 1;
3063
3064 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
3065
3066 /* If this is a local class, keep track of it. We need this
3067 information for name-mangling, and so that it is possible to find
3068 all function definitions in a translation unit in a convenient
3069 way. (It's otherwise tricky to find a member function definition
3070 it's only pointed to from within a local class.) */
3071 if (TYPE_CONTEXT (type)
3072 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL
3073 && !processing_template_decl)
3074 VARRAY_PUSH_TREE (local_classes, type);
3075 }
3076 if (b->parm_flag == 2)
3077 {
3078 if (!COMPLETE_TYPE_P (current_class_type))
3079 {
3080 maybe_add_class_template_decl_list (current_class_type,
3081 type, /*friend_p=*/0);
3082 CLASSTYPE_NESTED_UDTS (current_class_type) = b->type_decls;
3083 }
3084 }
3085 }
3086
3087 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
3088 /* Use the canonical TYPE_DECL for this node. */
3089 TYPE_STUB_DECL (type) = TYPE_NAME (type);
3090 else
3091 {
3092 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
3093 will be the tagged type we just added to the current
3094 binding level. This fake NULL-named TYPE_DECL node helps
3095 dwarfout.c to know when it needs to output a
3096 representation of a tagged type, and it also gives us a
3097 convenient place to record the "scope start" address for
3098 the tagged type. */
3099
3100 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
3101 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
3102 }
3103
3104 timevar_pop (TV_NAME_LOOKUP);
3105 }
3106
3107 /* Counter used to create anonymous type names. */
3108
3109 static int anon_cnt = 0;
3110
3111 /* Return an IDENTIFIER which can be used as a name for
3112 anonymous structs and unions. */
3113
3114 tree
make_anon_name()3115 make_anon_name ()
3116 {
3117 char buf[32];
3118
3119 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
3120 return get_identifier (buf);
3121 }
3122
3123 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
3124 This keeps dbxout from getting confused. */
3125
3126 void
clear_anon_tags()3127 clear_anon_tags ()
3128 {
3129 register struct cp_binding_level *b;
3130 static int last_cnt = 0;
3131
3132 /* Fast out if no new anon names were declared. */
3133 if (last_cnt == anon_cnt)
3134 return;
3135
3136 b = current_binding_level;
3137 while (b->tag_transparent)
3138 b = b->level_chain;
3139 if (b->type_decls != NULL)
3140 binding_table_remove_anonymous_types (b->type_decls);
3141 last_cnt = anon_cnt;
3142 }
3143
3144 /* Subroutine of duplicate_decls: return truthvalue of whether
3145 or not types of these decls match.
3146
3147 For C++, we must compare the parameter list so that `int' can match
3148 `int&' in a parameter position, but `int&' is not confused with
3149 `const int&'. */
3150
3151 int
decls_match(newdecl,olddecl)3152 decls_match (newdecl, olddecl)
3153 tree newdecl, olddecl;
3154 {
3155 int types_match;
3156
3157 if (newdecl == olddecl)
3158 return 1;
3159
3160 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
3161 /* If the two DECLs are not even the same kind of thing, we're not
3162 interested in their types. */
3163 return 0;
3164
3165 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3166 {
3167 tree f1 = TREE_TYPE (newdecl);
3168 tree f2 = TREE_TYPE (olddecl);
3169 tree p1 = TYPE_ARG_TYPES (f1);
3170 tree p2 = TYPE_ARG_TYPES (f2);
3171
3172 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
3173 && ! (DECL_EXTERN_C_P (newdecl)
3174 && DECL_EXTERN_C_P (olddecl)))
3175 return 0;
3176
3177 if (TREE_CODE (f1) != TREE_CODE (f2))
3178 return 0;
3179
3180 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
3181 {
3182 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
3183 && (DECL_BUILT_IN (olddecl)
3184 #ifndef NO_IMPLICIT_EXTERN_C
3185 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
3186 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
3187 #endif
3188 ))
3189 {
3190 types_match = self_promoting_args_p (p1);
3191 if (p1 == void_list_node)
3192 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3193 }
3194 #ifndef NO_IMPLICIT_EXTERN_C
3195 else if (p1 == NULL_TREE
3196 && (DECL_EXTERN_C_P (olddecl)
3197 && DECL_IN_SYSTEM_HEADER (olddecl)
3198 && !DECL_CLASS_SCOPE_P (olddecl))
3199 && (DECL_EXTERN_C_P (newdecl)
3200 && DECL_IN_SYSTEM_HEADER (newdecl)
3201 && !DECL_CLASS_SCOPE_P (newdecl)))
3202 {
3203 types_match = self_promoting_args_p (p2);
3204 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3205 }
3206 #endif
3207 else
3208 types_match = compparms (p1, p2);
3209 }
3210 else
3211 types_match = 0;
3212 }
3213 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3214 {
3215 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3216 DECL_TEMPLATE_PARMS (olddecl)))
3217 return 0;
3218
3219 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
3220 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
3221 return 0;
3222
3223 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3224 types_match = 1;
3225 else
3226 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3227 DECL_TEMPLATE_RESULT (newdecl));
3228 }
3229 else
3230 {
3231 if (TREE_TYPE (newdecl) == error_mark_node)
3232 types_match = TREE_TYPE (olddecl) == error_mark_node;
3233 else if (TREE_TYPE (olddecl) == NULL_TREE)
3234 types_match = TREE_TYPE (newdecl) == NULL_TREE;
3235 else if (TREE_TYPE (newdecl) == NULL_TREE)
3236 types_match = 0;
3237 else
3238 types_match = comptypes (TREE_TYPE (newdecl),
3239 TREE_TYPE (olddecl),
3240 COMPARE_REDECLARATION);
3241 }
3242
3243 return types_match;
3244 }
3245
3246 /* If NEWDECL is `static' and an `extern' was seen previously,
3247 warn about it. OLDDECL is the previous declaration.
3248
3249 Note that this does not apply to the C++ case of declaring
3250 a variable `extern const' and then later `const'.
3251
3252 Don't complain about built-in functions, since they are beyond
3253 the user's control. */
3254
3255 static void
warn_extern_redeclared_static(newdecl,olddecl)3256 warn_extern_redeclared_static (newdecl, olddecl)
3257 tree newdecl, olddecl;
3258 {
3259 static const char *const explicit_extern_static_warning
3260 = "`%D' was declared `extern' and later `static'";
3261 static const char *const implicit_extern_static_warning
3262 = "`%D' was declared implicitly `extern' and later `static'";
3263
3264 tree name;
3265
3266 if (TREE_CODE (newdecl) == TYPE_DECL
3267 || TREE_CODE (newdecl) == TEMPLATE_DECL
3268 || TREE_CODE (newdecl) == CONST_DECL)
3269 return;
3270
3271 /* Don't get confused by static member functions; that's a different
3272 use of `static'. */
3273 if (TREE_CODE (newdecl) == FUNCTION_DECL
3274 && DECL_STATIC_FUNCTION_P (newdecl))
3275 return;
3276
3277 /* If the old declaration was `static', or the new one isn't, then
3278 then everything is OK. */
3279 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3280 return;
3281
3282 /* It's OK to declare a builtin function as `static'. */
3283 if (TREE_CODE (olddecl) == FUNCTION_DECL
3284 && DECL_ARTIFICIAL (olddecl))
3285 return;
3286
3287 name = DECL_ASSEMBLER_NAME (newdecl);
3288 pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3289 ? implicit_extern_static_warning
3290 : explicit_extern_static_warning, newdecl);
3291 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3292 }
3293
3294 /* Handle when a new declaration NEWDECL has the same name as an old
3295 one OLDDECL in the same binding contour. Prints an error message
3296 if appropriate.
3297
3298 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3299 Otherwise, return 0. */
3300
3301 int
duplicate_decls(newdecl,olddecl)3302 duplicate_decls (newdecl, olddecl)
3303 tree newdecl, olddecl;
3304 {
3305 unsigned olddecl_uid = DECL_UID (olddecl);
3306 int olddecl_friend = 0, types_match = 0;
3307 int new_defines_function = 0;
3308
3309 if (newdecl == olddecl)
3310 return 1;
3311
3312 types_match = decls_match (newdecl, olddecl);
3313
3314 /* If either the type of the new decl or the type of the old decl is an
3315 error_mark_node, then that implies that we have already issued an
3316 error (earlier) for some bogus type specification, and in that case,
3317 it is rather pointless to harass the user with yet more error message
3318 about the same declaration, so just pretend the types match here. */
3319 if (TREE_TYPE (newdecl) == error_mark_node
3320 || TREE_TYPE (olddecl) == error_mark_node)
3321 types_match = 1;
3322
3323 if (DECL_P (olddecl)
3324 && TREE_CODE (newdecl) == FUNCTION_DECL
3325 && TREE_CODE (olddecl) == FUNCTION_DECL
3326 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
3327 {
3328 if (DECL_DECLARED_INLINE_P (newdecl)
3329 && DECL_UNINLINABLE (newdecl)
3330 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
3331 /* Already warned elsewhere. */;
3332 else if (DECL_DECLARED_INLINE_P (olddecl)
3333 && DECL_UNINLINABLE (olddecl)
3334 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
3335 /* Already warned. */;
3336 else if (DECL_DECLARED_INLINE_P (newdecl)
3337 && DECL_UNINLINABLE (olddecl)
3338 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
3339 {
3340 warning_with_decl (newdecl,
3341 "function `%s' redeclared as inline");
3342 warning_with_decl (olddecl,
3343 "previous declaration of function `%s' with attribute noinline");
3344 }
3345 else if (DECL_DECLARED_INLINE_P (olddecl)
3346 && DECL_UNINLINABLE (newdecl)
3347 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
3348 {
3349 warning_with_decl (newdecl,
3350 "function `%s' redeclared with attribute noinline");
3351 warning_with_decl (olddecl,
3352 "previous declaration of function `%s' was inline");
3353 }
3354 }
3355
3356 /* Check for redeclaration and other discrepancies. */
3357 if (TREE_CODE (olddecl) == FUNCTION_DECL
3358 && DECL_ARTIFICIAL (olddecl))
3359 {
3360 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3361 {
3362 /* Avoid warnings redeclaring anticipated built-ins. */
3363 if (DECL_ANTICIPATED (olddecl))
3364 return 0;
3365
3366 /* If you declare a built-in or predefined function name as static,
3367 the old definition is overridden, but optionally warn this was a
3368 bad choice of name. */
3369 if (! TREE_PUBLIC (newdecl))
3370 {
3371 if (warn_shadow)
3372 warning ("shadowing %s function `%#D'",
3373 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3374 olddecl);
3375 /* Discard the old built-in function. */
3376 return 0;
3377 }
3378 /* If the built-in is not ansi, then programs can override
3379 it even globally without an error. */
3380 else if (! DECL_BUILT_IN (olddecl))
3381 warning ("library function `%#D' redeclared as non-function `%#D'",
3382 olddecl, newdecl);
3383 else
3384 {
3385 error ("declaration of `%#D'", newdecl);
3386 error ("conflicts with built-in declaration `%#D'",
3387 olddecl);
3388 }
3389 return 0;
3390 }
3391 else if (!types_match)
3392 {
3393 /* Avoid warnings redeclaring anticipated built-ins. */
3394 if (DECL_ANTICIPATED (olddecl))
3395 ; /* Do nothing yet. */
3396 else if ((DECL_EXTERN_C_P (newdecl)
3397 && DECL_EXTERN_C_P (olddecl))
3398 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3399 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3400 {
3401 /* A near match; override the builtin. */
3402
3403 if (TREE_PUBLIC (newdecl))
3404 {
3405 warning ("new declaration `%#D'", newdecl);
3406 warning ("ambiguates built-in declaration `%#D'",
3407 olddecl);
3408 }
3409 else if (warn_shadow)
3410 warning ("shadowing %s function `%#D'",
3411 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3412 olddecl);
3413 }
3414 else
3415 /* Discard the old built-in function. */
3416 return 0;
3417
3418 /* Replace the old RTL to avoid problems with inlining. */
3419 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
3420 }
3421 /* Even if the types match, prefer the new declarations type
3422 for anitipated built-ins, for exception lists, etc... */
3423 else if (DECL_ANTICIPATED (olddecl))
3424 {
3425 tree type = TREE_TYPE (newdecl);
3426 tree attribs = (*targetm.merge_type_attributes)
3427 (TREE_TYPE (olddecl), type);
3428
3429 type = build_type_attribute_variant (type, attribs);
3430 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
3431 }
3432
3433 /* Whether or not the builtin can throw exceptions has no
3434 bearing on this declarator. */
3435 TREE_NOTHROW (olddecl) = 0;
3436
3437 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3438 {
3439 /* If a builtin function is redeclared as `static', merge
3440 the declarations, but make the original one static. */
3441 DECL_THIS_STATIC (olddecl) = 1;
3442 TREE_PUBLIC (olddecl) = 0;
3443
3444 /* Make the old declaration consistent with the new one so
3445 that all remnants of the builtin-ness of this function
3446 will be banished. */
3447 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
3448 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
3449 }
3450 }
3451 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3452 {
3453 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3454 && TREE_CODE (newdecl) != TYPE_DECL
3455 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3456 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3457 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3458 && TREE_CODE (olddecl) != TYPE_DECL
3459 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3460 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3461 == TYPE_DECL))))
3462 {
3463 /* We do nothing special here, because C++ does such nasty
3464 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3465 get shadowed, and know that if we need to find a TYPE_DECL
3466 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3467 slot of the identifier. */
3468 return 0;
3469 }
3470
3471 if ((TREE_CODE (newdecl) == FUNCTION_DECL
3472 && DECL_FUNCTION_TEMPLATE_P (olddecl))
3473 || (TREE_CODE (olddecl) == FUNCTION_DECL
3474 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3475 return 0;
3476
3477 error ("`%#D' redeclared as different kind of symbol", newdecl);
3478 if (TREE_CODE (olddecl) == TREE_LIST)
3479 olddecl = TREE_VALUE (olddecl);
3480 cp_error_at ("previous declaration of `%#D'", olddecl);
3481
3482 /* New decl is completely inconsistent with the old one =>
3483 tell caller to replace the old one. */
3484
3485 return 0;
3486 }
3487 else if (!types_match)
3488 {
3489 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
3490 /* These are certainly not duplicate declarations; they're
3491 from different scopes. */
3492 return 0;
3493
3494 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3495 {
3496 /* The name of a class template may not be declared to refer to
3497 any other template, class, function, object, namespace, value,
3498 or type in the same scope. */
3499 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3500 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3501 {
3502 error ("declaration of template `%#D'", newdecl);
3503 cp_error_at ("conflicts with previous declaration `%#D'",
3504 olddecl);
3505 }
3506 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3507 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3508 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3509 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3510 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3511 DECL_TEMPLATE_PARMS (olddecl))
3512 /* Template functions can be disambiguated by
3513 return type. */
3514 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
3515 TREE_TYPE (TREE_TYPE (olddecl))))
3516 {
3517 error ("new declaration `%#D'", newdecl);
3518 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3519 }
3520 return 0;
3521 }
3522 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3523 {
3524 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
3525 {
3526 error ("declaration of C function `%#D' conflicts with",
3527 newdecl);
3528 cp_error_at ("previous declaration `%#D' here", olddecl);
3529 }
3530 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3531 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3532 {
3533 error ("new declaration `%#D'", newdecl);
3534 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3535 }
3536 else
3537 return 0;
3538 }
3539
3540 /* Already complained about this, so don't do so again. */
3541 else if (current_class_type == NULL_TREE
3542 || !DECL_ASSEMBLER_NAME_SET_P (newdecl)
3543 || (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl))
3544 != current_class_type))
3545 {
3546 error ("conflicting types for `%#D'", newdecl);
3547 cp_error_at ("previous declaration as `%#D'", olddecl);
3548 }
3549 }
3550 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3551 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3552 && (!DECL_TEMPLATE_INFO (newdecl)
3553 || (DECL_TI_TEMPLATE (newdecl)
3554 != DECL_TI_TEMPLATE (olddecl))))
3555 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3556 && (!DECL_TEMPLATE_INFO (olddecl)
3557 || (DECL_TI_TEMPLATE (olddecl)
3558 != DECL_TI_TEMPLATE (newdecl))))))
3559 /* It's OK to have a template specialization and a non-template
3560 with the same type, or to have specializations of two
3561 different templates with the same type. Note that if one is a
3562 specialization, and the other is an instantiation of the same
3563 template, that we do not exit at this point. That situation
3564 can occur if we instantiate a template class, and then
3565 specialize one of its methods. This situation is valid, but
3566 the declarations must be merged in the usual way. */
3567 return 0;
3568 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3569 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3570 && !DECL_USE_TEMPLATE (newdecl))
3571 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3572 && !DECL_USE_TEMPLATE (olddecl))))
3573 /* One of the declarations is a template instantiation, and the
3574 other is not a template at all. That's OK. */
3575 return 0;
3576 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3577 && DECL_NAMESPACE_ALIAS (newdecl)
3578 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3579 /* Redeclaration of namespace alias, ignore it. */
3580 return 1;
3581 else
3582 {
3583 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3584 if (errmsg)
3585 {
3586 error (errmsg, newdecl);
3587 if (DECL_NAME (olddecl) != NULL_TREE)
3588 cp_error_at ((DECL_INITIAL (olddecl)
3589 && namespace_bindings_p ())
3590 ? "`%#D' previously defined here"
3591 : "`%#D' previously declared here", olddecl);
3592 return 0;
3593 }
3594 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3595 && DECL_INITIAL (olddecl) != NULL_TREE
3596 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3597 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3598 {
3599 /* Prototype decl follows defn w/o prototype. */
3600 cp_warning_at ("prototype for `%#D'", newdecl);
3601 cp_warning_at ("follows non-prototype definition here", olddecl);
3602 }
3603 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3604 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3605 {
3606 /* extern "C" int foo ();
3607 int foo () { bar (); }
3608 is OK. */
3609 if (current_lang_depth () == 0)
3610 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
3611 else
3612 {
3613 cp_error_at ("previous declaration of `%#D' with %L linkage",
3614 olddecl, DECL_LANGUAGE (olddecl));
3615 error ("conflicts with new declaration with %L linkage",
3616 DECL_LANGUAGE (newdecl));
3617 }
3618 }
3619
3620 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3621 ;
3622 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3623 {
3624 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3625 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3626 int i = 1;
3627
3628 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3629 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3630
3631 for (; t1 && t1 != void_list_node;
3632 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3633 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3634 {
3635 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3636 TREE_PURPOSE (t2)))
3637 {
3638 pedwarn ("default argument given for parameter %d of `%#D'",
3639 i, newdecl);
3640 cp_pedwarn_at ("after previous specification in `%#D'",
3641 olddecl);
3642 }
3643 else
3644 {
3645 error ("default argument given for parameter %d of `%#D'",
3646 i, newdecl);
3647 cp_error_at ("after previous specification in `%#D'",
3648 olddecl);
3649 }
3650 }
3651
3652 if (DECL_DECLARED_INLINE_P (newdecl)
3653 && ! DECL_DECLARED_INLINE_P (olddecl)
3654 && TREE_ADDRESSABLE (olddecl) && warn_inline)
3655 {
3656 warning ("`%#D' was used before it was declared inline",
3657 newdecl);
3658 cp_warning_at ("previous non-inline declaration here",
3659 olddecl);
3660 }
3661 }
3662 }
3663
3664 /* Do not merge an implicit typedef with an explicit one. In:
3665
3666 class A;
3667 ...
3668 typedef class A A __attribute__ ((foo));
3669
3670 the attribute should apply only to the typedef. */
3671 if (TREE_CODE (olddecl) == TYPE_DECL
3672 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
3673 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
3674 return 0;
3675
3676 /* If new decl is `static' and an `extern' was seen previously,
3677 warn about it. */
3678 warn_extern_redeclared_static (newdecl, olddecl);
3679
3680 /* We have committed to returning 1 at this point. */
3681 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3682 {
3683 /* Now that functions must hold information normally held
3684 by field decls, there is extra work to do so that
3685 declaration information does not get destroyed during
3686 definition. */
3687 if (DECL_VINDEX (olddecl))
3688 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3689 if (DECL_CONTEXT (olddecl))
3690 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3691 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3692 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3693 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
3694 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3695 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3696 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3697 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
3698 SET_OVERLOADED_OPERATOR_CODE
3699 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
3700 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3701
3702 /* Optionally warn about more than one declaration for the same
3703 name, but don't warn about a function declaration followed by a
3704 definition. */
3705 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3706 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3707 /* Don't warn about extern decl followed by definition. */
3708 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3709 /* Don't warn about friends, let add_friend take care of it. */
3710 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
3711 {
3712 warning ("redundant redeclaration of `%D' in same scope", newdecl);
3713 cp_warning_at ("previous declaration of `%D'", olddecl);
3714 }
3715 }
3716
3717 /* Deal with C++: must preserve virtual function table size. */
3718 if (TREE_CODE (olddecl) == TYPE_DECL)
3719 {
3720 register tree newtype = TREE_TYPE (newdecl);
3721 register tree oldtype = TREE_TYPE (olddecl);
3722
3723 if (newtype != error_mark_node && oldtype != error_mark_node
3724 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3725 CLASSTYPE_FRIEND_CLASSES (newtype)
3726 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3727 \
3728 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
3729 }
3730
3731 /* Copy all the DECL_... slots specified in the new decl
3732 except for any that we copy here from the old type. */
3733 DECL_ATTRIBUTES (newdecl)
3734 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
3735
3736 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3737 {
3738 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3739 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3740 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3741 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3742
3743 /* If the new declaration is a definition, update the file and
3744 line information on the declaration. */
3745 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
3746 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
3747 {
3748 DECL_SOURCE_LOCATION (olddecl)
3749 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
3750 = DECL_SOURCE_LOCATION (newdecl);
3751 }
3752
3753 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
3754 {
3755 DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl))
3756 |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl));
3757 DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl))
3758 |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl));
3759 }
3760
3761 return 1;
3762 }
3763
3764 if (types_match)
3765 {
3766 /* Automatically handles default parameters. */
3767 tree oldtype = TREE_TYPE (olddecl);
3768 tree newtype;
3769
3770 /* Merge the data types specified in the two decls. */
3771 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3772
3773 /* If merge_types produces a non-typedef type, just use the old type. */
3774 if (TREE_CODE (newdecl) == TYPE_DECL
3775 && newtype == DECL_ORIGINAL_TYPE (newdecl))
3776 newtype = oldtype;
3777
3778 if (TREE_CODE (newdecl) == VAR_DECL)
3779 {
3780 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3781 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
3782 }
3783
3784 /* Do this after calling `merge_types' so that default
3785 parameters don't confuse us. */
3786 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3787 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3788 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3789 {
3790 TREE_TYPE (newdecl) = build_exception_variant (newtype,
3791 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3792 TREE_TYPE (olddecl) = build_exception_variant (newtype,
3793 TYPE_RAISES_EXCEPTIONS (oldtype));
3794
3795 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3796 && DECL_SOURCE_LINE (olddecl) != 0
3797 && flag_exceptions
3798 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3799 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3800 {
3801 error ("declaration of `%F' throws different exceptions",
3802 newdecl);
3803 cp_error_at ("than previous declaration `%F'", olddecl);
3804 }
3805 }
3806 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3807
3808 /* Lay the type out, unless already done. */
3809 if (! same_type_p (newtype, oldtype)
3810 && TREE_TYPE (newdecl) != error_mark_node
3811 && !(processing_template_decl && uses_template_parms (newdecl)))
3812 layout_type (TREE_TYPE (newdecl));
3813
3814 if ((TREE_CODE (newdecl) == VAR_DECL
3815 || TREE_CODE (newdecl) == PARM_DECL
3816 || TREE_CODE (newdecl) == RESULT_DECL
3817 || TREE_CODE (newdecl) == FIELD_DECL
3818 || TREE_CODE (newdecl) == TYPE_DECL)
3819 && !(processing_template_decl && uses_template_parms (newdecl)))
3820 layout_decl (newdecl, 0);
3821
3822 /* Merge the type qualifiers. */
3823 if (TREE_READONLY (newdecl))
3824 TREE_READONLY (olddecl) = 1;
3825 if (TREE_THIS_VOLATILE (newdecl))
3826 TREE_THIS_VOLATILE (olddecl) = 1;
3827
3828 /* Merge the initialization information. */
3829 if (DECL_INITIAL (newdecl) == NULL_TREE
3830 && DECL_INITIAL (olddecl) != NULL_TREE)
3831 {
3832 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3833 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
3834 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3835 && DECL_LANG_SPECIFIC (newdecl)
3836 && DECL_LANG_SPECIFIC (olddecl))
3837 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3838 }
3839
3840 /* Merge the section attribute.
3841 We want to issue an error if the sections conflict but that must be
3842 done later in decl_attributes since we are called before attributes
3843 are assigned. */
3844 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3845 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3846
3847 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3848 {
3849 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3850 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3851 DECL_NO_LIMIT_STACK (newdecl)
3852 |= DECL_NO_LIMIT_STACK (olddecl);
3853 /* Keep the old RTL. */
3854 COPY_DECL_RTL (olddecl, newdecl);
3855 }
3856 else if (TREE_CODE (newdecl) == VAR_DECL
3857 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
3858 {
3859 /* Keep the old RTL. We cannot keep the old RTL if the old
3860 declaration was for an incomplete object and the new
3861 declaration is not since many attributes of the RTL will
3862 change. */
3863 COPY_DECL_RTL (olddecl, newdecl);
3864 }
3865 }
3866 /* If cannot merge, then use the new type and qualifiers,
3867 and don't preserve the old rtl. */
3868 else
3869 {
3870 /* Clean out any memory we had of the old declaration. */
3871 tree oldstatic = value_member (olddecl, static_aggregates);
3872 if (oldstatic)
3873 TREE_VALUE (oldstatic) = error_mark_node;
3874
3875 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3876 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3877 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3878 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3879 }
3880
3881 /* Merge the storage class information. */
3882 merge_weak (newdecl, olddecl);
3883
3884 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3885 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
3886 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3887 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3888 if (! DECL_EXTERNAL (olddecl))
3889 DECL_EXTERNAL (newdecl) = 0;
3890
3891 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3892 {
3893 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3894 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3895 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3896 DECL_TEMPLATE_INSTANTIATED (newdecl)
3897 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3898 /* Don't really know how much of the language-specific
3899 values we should copy from old to new. */
3900 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3901 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
3902 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
3903 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3904 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3905 DECL_INITIALIZED_IN_CLASS_P (newdecl)
3906 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
3907 olddecl_friend = DECL_FRIEND_P (olddecl);
3908
3909 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3910 if (TREE_CODE (newdecl) == FUNCTION_DECL
3911 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3912 {
3913 DECL_BEFRIENDING_CLASSES (newdecl)
3914 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3915 DECL_BEFRIENDING_CLASSES (olddecl));
3916 /* DECL_THUNKS is only valid for virtual functions,
3917 otherwise it is a DECL_FRIEND_CONTEXT. */
3918 if (DECL_VIRTUAL_P (newdecl))
3919 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
3920 }
3921 }
3922
3923 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3924 {
3925 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3926 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3927 {
3928 /* If newdecl is not a specialization, then it is not a
3929 template-related function at all. And that means that we
3930 shoud have exited above, returning 0. */
3931 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3932 0);
3933
3934 if (TREE_USED (olddecl))
3935 /* From [temp.expl.spec]:
3936
3937 If a template, a member template or the member of a class
3938 template is explicitly specialized then that
3939 specialization shall be declared before the first use of
3940 that specialization that would cause an implicit
3941 instantiation to take place, in every translation unit in
3942 which such a use occurs. */
3943 error ("explicit specialization of %D after first use",
3944 olddecl);
3945
3946 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3947
3948 /* [temp.expl.spec/14] We don't inline explicit specialization
3949 just because the primary template says so. */
3950 }
3951 else
3952 {
3953 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
3954 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3955
3956 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
3957
3958 /* If either decl says `inline', this fn is inline, unless
3959 its definition was passed already. */
3960 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3961 DECL_INLINE (olddecl) = 1;
3962 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3963
3964 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
3965 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
3966 }
3967
3968 /* Preserve abstractness on cloned [cd]tors. */
3969 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
3970
3971 if (! types_match)
3972 {
3973 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
3974 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
3975 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
3976 }
3977 if (! types_match || new_defines_function)
3978 {
3979 /* These need to be copied so that the names are available.
3980 Note that if the types do match, we'll preserve inline
3981 info and other bits, but if not, we won't. */
3982 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3983 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3984 }
3985 if (new_defines_function)
3986 /* If defining a function declared with other language
3987 linkage, use the previously declared language linkage. */
3988 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
3989 else if (types_match)
3990 {
3991 /* If redeclaring a builtin function, and not a definition,
3992 it stays built in. */
3993 if (DECL_BUILT_IN (olddecl))
3994 {
3995 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3996 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3997 /* If we're keeping the built-in definition, keep the rtl,
3998 regardless of declaration matches. */
3999 SET_DECL_RTL (newdecl, DECL_RTL (olddecl));
4000 }
4001 else
4002 DECL_NUM_STMTS (newdecl) = DECL_NUM_STMTS (olddecl);
4003
4004 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
4005 /* Don't clear out the arguments if we're redefining a function. */
4006 if (DECL_ARGUMENTS (olddecl))
4007 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
4008 }
4009 }
4010 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
4011 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
4012
4013 /* Now preserve various other info from the definition. */
4014 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
4015 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
4016 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
4017 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
4018
4019 if (TREE_CODE (newdecl) == FUNCTION_DECL)
4020 {
4021 int function_size;
4022
4023 function_size = sizeof (struct tree_decl);
4024
4025 memcpy ((char *) olddecl + sizeof (struct tree_common),
4026 (char *) newdecl + sizeof (struct tree_common),
4027 function_size - sizeof (struct tree_common));
4028
4029 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
4030 {
4031 /* If newdecl is a template instantiation, it is possible that
4032 the following sequence of events has occurred:
4033
4034 o A friend function was declared in a class template. The
4035 class template was instantiated.
4036
4037 o The instantiation of the friend declaration was
4038 recorded on the instantiation list, and is newdecl.
4039
4040 o Later, however, instantiate_class_template called pushdecl
4041 on the newdecl to perform name injection. But, pushdecl in
4042 turn called duplicate_decls when it discovered that another
4043 declaration of a global function with the same name already
4044 existed.
4045
4046 o Here, in duplicate_decls, we decided to clobber newdecl.
4047
4048 If we're going to do that, we'd better make sure that
4049 olddecl, and not newdecl, is on the list of
4050 instantiations so that if we try to do the instantiation
4051 again we won't get the clobbered declaration. */
4052
4053 tree tmpl = DECL_TI_TEMPLATE (newdecl);
4054 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
4055
4056 for (; decls; decls = TREE_CHAIN (decls))
4057 if (TREE_VALUE (decls) == newdecl)
4058 TREE_VALUE (decls) = olddecl;
4059 }
4060 }
4061 else
4062 {
4063 memcpy ((char *) olddecl + sizeof (struct tree_common),
4064 (char *) newdecl + sizeof (struct tree_common),
4065 sizeof (struct tree_decl) - sizeof (struct tree_common)
4066 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
4067 }
4068
4069 DECL_UID (olddecl) = olddecl_uid;
4070 if (olddecl_friend)
4071 DECL_FRIEND_P (olddecl) = 1;
4072
4073 /* NEWDECL contains the merged attribute lists.
4074 Update OLDDECL to be the same. */
4075 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
4076
4077 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
4078 so that encode_section_info has a chance to look at the new decl
4079 flags and attributes. */
4080 if (DECL_RTL_SET_P (olddecl)
4081 && (TREE_CODE (olddecl) == FUNCTION_DECL
4082 || (TREE_CODE (olddecl) == VAR_DECL
4083 && TREE_STATIC (olddecl))))
4084 make_decl_rtl (olddecl, NULL);
4085
4086 return 1;
4087 }
4088
4089 /* Record a decl-node X as belonging to the current lexical scope.
4090 Check for errors (such as an incompatible declaration for the same
4091 name already seen in the same scope).
4092
4093 Returns either X or an old decl for the same name.
4094 If an old decl is returned, it may have been smashed
4095 to agree with what X says. */
4096
4097 tree
pushdecl(x)4098 pushdecl (x)
4099 tree x;
4100 {
4101 register tree t;
4102 register tree name;
4103 int need_new_binding;
4104
4105 timevar_push (TV_NAME_LOOKUP);
4106
4107 /* We shouldn't be calling pushdecl when we're generating RTL for a
4108 function that we already did semantic analysis on previously. */
4109 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
4110 19990913);
4111
4112 need_new_binding = 1;
4113
4114 if (DECL_TEMPLATE_PARM_P (x))
4115 /* Template parameters have no context; they are not X::T even
4116 when declared within a class or namespace. */
4117 ;
4118 else
4119 {
4120 if (current_function_decl && x != current_function_decl
4121 /* A local declaration for a function doesn't constitute
4122 nesting. */
4123 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
4124 /* A local declaration for an `extern' variable is in the
4125 scope of the current namespace, not the current
4126 function. */
4127 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
4128 && !DECL_CONTEXT (x))
4129 DECL_CONTEXT (x) = current_function_decl;
4130
4131 /* If this is the declaration for a namespace-scope function,
4132 but the declaration itself is in a local scope, mark the
4133 declaration. */
4134 if (TREE_CODE (x) == FUNCTION_DECL
4135 && DECL_NAMESPACE_SCOPE_P (x)
4136 && current_function_decl
4137 && x != current_function_decl)
4138 DECL_LOCAL_FUNCTION_P (x) = 1;
4139 }
4140
4141 name = DECL_NAME (x);
4142 if (name)
4143 {
4144 int different_binding_level = 0;
4145
4146 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
4147 name = TREE_OPERAND (name, 0);
4148
4149 /* In case this decl was explicitly namespace-qualified, look it
4150 up in its namespace context. */
4151 if ((DECL_CONTEXT (x) && TREE_CODE (DECL_CONTEXT (x)) == NAMESPACE_DECL)
4152 && namespace_bindings_p ())
4153 t = namespace_binding (name, DECL_CONTEXT (x));
4154 else
4155 t = lookup_name_current_level (name);
4156
4157 /* [basic.link] If there is a visible declaration of an entity
4158 with linkage having the same name and type, ignoring entities
4159 declared outside the innermost enclosing namespace scope, the
4160 block scope declaration declares that same entity and
4161 receives the linkage of the previous declaration. */
4162 if (! t && current_function_decl && x != current_function_decl
4163 && (TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
4164 && DECL_EXTERNAL (x))
4165 {
4166 /* Look in block scope. */
4167 t = IDENTIFIER_VALUE (name);
4168 /* Or in the innermost namespace. */
4169 if (! t)
4170 t = namespace_binding (name, DECL_CONTEXT (x));
4171 /* Does it have linkage? Note that if this isn't a DECL, it's an
4172 OVERLOAD, which is OK. */
4173 if (t && DECL_P (t) && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
4174 t = NULL_TREE;
4175 if (t)
4176 different_binding_level = 1;
4177 }
4178
4179 /* If we are declaring a function, and the result of name-lookup
4180 was an OVERLOAD, look for an overloaded instance that is
4181 actually the same as the function we are declaring. (If
4182 there is one, we have to merge our declaration with the
4183 previous declaration.) */
4184 if (t && TREE_CODE (t) == OVERLOAD)
4185 {
4186 tree match;
4187
4188 if (TREE_CODE (x) == FUNCTION_DECL)
4189 for (match = t; match; match = OVL_NEXT (match))
4190 {
4191 if (decls_match (OVL_CURRENT (match), x))
4192 break;
4193 }
4194 else
4195 /* Just choose one. */
4196 match = t;
4197
4198 if (match)
4199 t = OVL_CURRENT (match);
4200 else
4201 t = NULL_TREE;
4202 }
4203
4204 if (t == error_mark_node)
4205 {
4206 /* error_mark_node is 0 for a while during initialization! */
4207 t = NULL_TREE;
4208 cp_error_at ("`%#D' used prior to declaration", x);
4209 }
4210 else if (t != NULL_TREE)
4211 {
4212 if (different_binding_level)
4213 {
4214 if (decls_match (x, t))
4215 /* The standard only says that the local extern
4216 inherits linkage from the previous decl; in
4217 particular, default args are not shared. It would
4218 be nice to propagate inlining info, though. FIXME. */
4219 TREE_PUBLIC (x) = TREE_PUBLIC (t);
4220 }
4221 else if (TREE_CODE (t) == PARM_DECL)
4222 {
4223 if (DECL_CONTEXT (t) == NULL_TREE)
4224 /* This is probaby caused by too many errors, but calling
4225 abort will say that if errors have occurred. */
4226 abort ();
4227
4228 /* Check for duplicate params. */
4229 if (duplicate_decls (x, t))
4230 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4231 }
4232 else if ((DECL_EXTERN_C_FUNCTION_P (x)
4233 || DECL_FUNCTION_TEMPLATE_P (x))
4234 && is_overloaded_fn (t))
4235 /* Don't do anything just yet. */;
4236 else if (t == wchar_decl_node)
4237 {
4238 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
4239 pedwarn ("redeclaration of `wchar_t' as `%T'",
4240 TREE_TYPE (x));
4241
4242 /* Throw away the redeclaration. */
4243 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4244 }
4245 else if (TREE_CODE (t) != TREE_CODE (x))
4246 {
4247 if (duplicate_decls (x, t))
4248 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4249 }
4250 else if (duplicate_decls (x, t))
4251 {
4252 if (TREE_CODE (t) == TYPE_DECL)
4253 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
4254 else if (TREE_CODE (t) == FUNCTION_DECL)
4255 check_default_args (t);
4256
4257 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4258 }
4259 else if (DECL_MAIN_P (x))
4260 {
4261 /* A redeclaration of main, but not a duplicate of the
4262 previous one.
4263
4264 [basic.start.main]
4265
4266 This function shall not be overloaded. */
4267 cp_error_at ("invalid redeclaration of `%D'", t);
4268 error ("as `%D'", x);
4269 /* We don't try to push this declaration since that
4270 causes a crash. */
4271 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
4272 }
4273 }
4274
4275 check_template_shadow (x);
4276
4277 /* If this is a function conjured up by the backend, massage it
4278 so it looks friendly. */
4279 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
4280 {
4281 retrofit_lang_decl (x);
4282 SET_DECL_LANGUAGE (x, lang_c);
4283 }
4284
4285 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
4286 {
4287 t = push_overloaded_decl (x, PUSH_LOCAL);
4288 if (t != x)
4289 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4290 if (!namespace_bindings_p ())
4291 /* We do not need to create a binding for this name;
4292 push_overloaded_decl will have already done so if
4293 necessary. */
4294 need_new_binding = 0;
4295 }
4296 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
4297 {
4298 t = push_overloaded_decl (x, PUSH_GLOBAL);
4299 if (t == x)
4300 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
4301 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4302 }
4303
4304 /* If declaring a type as a typedef, copy the type (unless we're
4305 at line 0), and install this TYPE_DECL as the new type's typedef
4306 name. See the extensive comment in ../c-decl.c (pushdecl). */
4307 if (TREE_CODE (x) == TYPE_DECL)
4308 {
4309 tree type = TREE_TYPE (x);
4310 if (DECL_SOURCE_LINE (x) == 0)
4311 {
4312 if (TYPE_NAME (type) == 0)
4313 TYPE_NAME (type) = x;
4314 }
4315 else if (type != error_mark_node && TYPE_NAME (type) != x
4316 /* We don't want to copy the type when all we're
4317 doing is making a TYPE_DECL for the purposes of
4318 inlining. */
4319 && (!TYPE_NAME (type)
4320 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
4321 {
4322 DECL_ORIGINAL_TYPE (x) = type;
4323 type = build_type_copy (type);
4324 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4325 TYPE_NAME (type) = x;
4326 TREE_TYPE (x) = type;
4327 }
4328
4329 if (type != error_mark_node
4330 && TYPE_NAME (type)
4331 && TYPE_IDENTIFIER (type))
4332 set_identifier_type_value_with_scope (DECL_NAME (x), type,
4333 current_binding_level);
4334
4335 }
4336
4337 /* Multiple external decls of the same identifier ought to match.
4338
4339 We get warnings about inline functions where they are defined.
4340 We get warnings about other functions from push_overloaded_decl.
4341
4342 Avoid duplicate warnings where they are used. */
4343 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
4344 {
4345 tree decl;
4346
4347 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4348 if (decl && TREE_CODE (decl) == OVERLOAD)
4349 decl = OVL_FUNCTION (decl);
4350
4351 if (decl && decl != error_mark_node
4352 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))
4353 /* If different sort of thing, we already gave an error. */
4354 && TREE_CODE (decl) == TREE_CODE (x)
4355 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
4356 {
4357 pedwarn ("type mismatch with previous external decl", x);
4358 cp_pedwarn_at ("previous external decl of `%#D'", decl);
4359 }
4360 }
4361
4362 /* This name is new in its binding level.
4363 Install the new declaration and return it. */
4364 if (namespace_bindings_p ())
4365 {
4366 /* Install a global value. */
4367
4368 /* If the first global decl has external linkage,
4369 warn if we later see static one. */
4370 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
4371 TREE_PUBLIC (name) = 1;
4372
4373 /* Bind the name for the entity. */
4374 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4375 && t != NULL_TREE)
4376 && (TREE_CODE (x) == TYPE_DECL
4377 || TREE_CODE (x) == VAR_DECL
4378 || TREE_CODE (x) == NAMESPACE_DECL
4379 || TREE_CODE (x) == CONST_DECL
4380 || TREE_CODE (x) == TEMPLATE_DECL))
4381 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
4382
4383 /* Don't forget if the function was used via an implicit decl. */
4384 if (IDENTIFIER_IMPLICIT_DECL (name)
4385 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4386 TREE_USED (x) = 1;
4387
4388 /* Don't forget if its address was taken in that way. */
4389 if (IDENTIFIER_IMPLICIT_DECL (name)
4390 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4391 TREE_ADDRESSABLE (x) = 1;
4392
4393 /* Warn about mismatches against previous implicit decl. */
4394 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4395 /* If this real decl matches the implicit, don't complain. */
4396 && ! (TREE_CODE (x) == FUNCTION_DECL
4397 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4398 warning
4399 ("`%D' was previously implicitly declared to return `int'", x);
4400
4401 /* If new decl is `static' and an `extern' was seen previously,
4402 warn about it. */
4403 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4404 warn_extern_redeclared_static (x, t);
4405 }
4406 else
4407 {
4408 /* Here to install a non-global value. */
4409 tree oldlocal = IDENTIFIER_VALUE (name);
4410 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4411
4412 if (need_new_binding)
4413 {
4414 push_local_binding (name, x, 0);
4415 /* Because push_local_binding will hook X on to the
4416 current_binding_level's name list, we don't want to
4417 do that again below. */
4418 need_new_binding = 0;
4419 }
4420
4421 /* If this is a TYPE_DECL, push it into the type value slot. */
4422 if (TREE_CODE (x) == TYPE_DECL)
4423 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
4424 current_binding_level);
4425
4426 /* Clear out any TYPE_DECL shadowed by a namespace so that
4427 we won't think this is a type. The C struct hack doesn't
4428 go through namespaces. */
4429 if (TREE_CODE (x) == NAMESPACE_DECL)
4430 set_identifier_type_value_with_scope (name, NULL_TREE,
4431 current_binding_level);
4432
4433 if (oldlocal)
4434 {
4435 tree d = oldlocal;
4436
4437 while (oldlocal
4438 && TREE_CODE (oldlocal) == VAR_DECL
4439 && DECL_DEAD_FOR_LOCAL (oldlocal))
4440 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4441
4442 if (oldlocal == NULL_TREE)
4443 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4444 }
4445
4446 /* If this is an extern function declaration, see if we
4447 have a global definition or declaration for the function. */
4448 if (oldlocal == NULL_TREE
4449 && DECL_EXTERNAL (x)
4450 && oldglobal != NULL_TREE
4451 && TREE_CODE (x) == FUNCTION_DECL
4452 && TREE_CODE (oldglobal) == FUNCTION_DECL)
4453 {
4454 /* We have one. Their types must agree. */
4455 if (decls_match (x, oldglobal))
4456 /* OK */;
4457 else
4458 {
4459 warning ("extern declaration of `%#D' doesn't match", x);
4460 cp_warning_at ("global declaration `%#D'", oldglobal);
4461 }
4462 }
4463 /* If we have a local external declaration,
4464 and no file-scope declaration has yet been seen,
4465 then if we later have a file-scope decl it must not be static. */
4466 if (oldlocal == NULL_TREE
4467 && oldglobal == NULL_TREE
4468 && DECL_EXTERNAL (x)
4469 && TREE_PUBLIC (x))
4470 TREE_PUBLIC (name) = 1;
4471
4472 /* Warn if shadowing an argument at the top level of the body. */
4473 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4474 /* Inline decls shadow nothing. */
4475 && !DECL_FROM_INLINE (x)
4476 && TREE_CODE (oldlocal) == PARM_DECL
4477 /* Don't check the `this' parameter. */
4478 && !DECL_ARTIFICIAL (oldlocal))
4479 {
4480 bool err = false;
4481
4482 /* Don't complain if it's from an enclosing function. */
4483 if (DECL_CONTEXT (oldlocal) == current_function_decl
4484 && TREE_CODE (x) != PARM_DECL)
4485 {
4486 /* Go to where the parms should be and see if we find
4487 them there. */
4488 struct cp_binding_level *b = current_binding_level->level_chain;
4489
4490 /* ARM $8.3 */
4491 if (b->parm_flag == 1)
4492 {
4493 error ("declaration of `%#D' shadows a parameter",
4494 name);
4495 err = true;
4496 }
4497 }
4498
4499 if (warn_shadow && !err)
4500 shadow_warning ("a parameter", name, oldlocal);
4501 }
4502
4503 /* Maybe warn if shadowing something else. */
4504 else if (warn_shadow && !DECL_EXTERNAL (x)
4505 /* No shadow warnings for internally generated vars. */
4506 && ! DECL_ARTIFICIAL (x)
4507 /* No shadow warnings for vars made for inlining. */
4508 && ! DECL_FROM_INLINE (x))
4509 {
4510 if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4511 && current_class_ptr
4512 && !TREE_STATIC (name))
4513 warning ("declaration of `%s' shadows a member of `this'",
4514 IDENTIFIER_POINTER (name));
4515 else if (oldlocal != NULL_TREE
4516 && TREE_CODE (oldlocal) == VAR_DECL)
4517 shadow_warning ("a previous local", name, oldlocal);
4518 else if (oldglobal != NULL_TREE
4519 && TREE_CODE (oldglobal) == VAR_DECL)
4520 /* XXX shadow warnings in outer-more namespaces */
4521 shadow_warning ("a global declaration", name, oldglobal);
4522 }
4523 }
4524
4525 if (TREE_CODE (x) == FUNCTION_DECL)
4526 check_default_args (x);
4527
4528 if (TREE_CODE (x) == VAR_DECL)
4529 maybe_register_incomplete_var (x);
4530 }
4531
4532 if (need_new_binding)
4533 add_decl_to_level (x,
4534 DECL_NAMESPACE_SCOPE_P (x)
4535 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4536 : current_binding_level);
4537
4538 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
4539 }
4540
4541 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4542 caller to set DECL_CONTEXT properly. */
4543
4544 static tree
pushdecl_with_scope(x,level)4545 pushdecl_with_scope (x, level)
4546 tree x;
4547 struct cp_binding_level *level;
4548 {
4549 register struct cp_binding_level *b;
4550 tree function_decl = current_function_decl;
4551
4552 timevar_push (TV_NAME_LOOKUP);
4553
4554 current_function_decl = NULL_TREE;
4555 if (level->parm_flag == 2)
4556 {
4557 b = class_binding_level;
4558 class_binding_level = level;
4559 pushdecl_class_level (x);
4560 class_binding_level = b;
4561 }
4562 else
4563 {
4564 b = current_binding_level;
4565 current_binding_level = level;
4566 x = pushdecl (x);
4567 current_binding_level = b;
4568 }
4569 current_function_decl = function_decl;
4570 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
4571 }
4572
4573 /* Like pushdecl, only it places X in the current namespace,
4574 if appropriate. */
4575
4576 tree
pushdecl_namespace_level(x)4577 pushdecl_namespace_level (x)
4578 tree x;
4579 {
4580 register struct cp_binding_level *b = current_binding_level;
4581 register tree t;
4582
4583 timevar_push (TV_NAME_LOOKUP);
4584 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4585
4586 /* Now, the type_shadowed stack may screw us. Munge it so it does
4587 what we want. */
4588 if (TREE_CODE (x) == TYPE_DECL)
4589 {
4590 tree name = DECL_NAME (x);
4591 tree newval;
4592 tree *ptr = (tree *)0;
4593 for (; !global_scope_p (b); b = b->level_chain)
4594 {
4595 tree shadowed = b->type_shadowed;
4596 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4597 if (TREE_PURPOSE (shadowed) == name)
4598 {
4599 ptr = &TREE_VALUE (shadowed);
4600 /* Can't break out of the loop here because sometimes
4601 a binding level will have duplicate bindings for
4602 PT names. It's gross, but I haven't time to fix it. */
4603 }
4604 }
4605 newval = TREE_TYPE (x);
4606 if (ptr == (tree *)0)
4607 {
4608 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4609 up here if this is changed to an assertion. --KR */
4610 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4611 }
4612 else
4613 {
4614 *ptr = newval;
4615 }
4616 }
4617 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4618 }
4619
4620 /* Like pushdecl, only it places X in the global scope if appropriate.
4621 Calls cp_finish_decl to register the variable, initializing it with
4622 *INIT, if INIT is non-NULL. */
4623
4624 static tree
pushdecl_top_level_1(tree x,tree * init)4625 pushdecl_top_level_1 (tree x, tree *init)
4626 {
4627 timevar_push (TV_NAME_LOOKUP);
4628 push_to_top_level ();
4629 x = pushdecl_namespace_level (x);
4630 if (init)
4631 cp_finish_decl (x, *init, NULL_TREE, 0);
4632 pop_from_top_level ();
4633 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
4634 }
4635
4636 /* Like pushdecl, only it places X in the global scope if appropriate. */
4637
4638 tree
pushdecl_top_level(tree x)4639 pushdecl_top_level (tree x)
4640 {
4641 return pushdecl_top_level_1 (x, NULL);
4642 }
4643
4644 /* Like pushdecl, only it places X in the global scope if
4645 appropriate. Calls cp_finish_decl to register the variable,
4646 initializing it with INIT. */
4647
4648 tree
pushdecl_top_level_and_finish(tree x,tree init)4649 pushdecl_top_level_and_finish (tree x, tree init)
4650 {
4651 return pushdecl_top_level_1 (x, &init);
4652 }
4653
4654 /* Make the declaration of X appear in CLASS scope. */
4655
4656 bool
pushdecl_class_level(x)4657 pushdecl_class_level (x)
4658 tree x;
4659 {
4660 tree name;
4661 bool is_valid = true;
4662
4663 timevar_push (TV_NAME_LOOKUP);
4664 /* Get the name of X. */
4665 if (TREE_CODE (x) == OVERLOAD)
4666 name = DECL_NAME (get_first_fn (x));
4667 else
4668 name = DECL_NAME (x);
4669
4670 if (name)
4671 {
4672 is_valid = push_class_level_binding (name, x);
4673 if (TREE_CODE (x) == TYPE_DECL)
4674 set_identifier_type_value (name, TREE_TYPE (x));
4675 }
4676 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4677 {
4678 /* If X is an anonymous aggregate, all of its members are
4679 treated as if they were members of the class containing the
4680 aggregate, for naming purposes. */
4681 tree f;
4682
4683 for (f = TYPE_FIELDS (TREE_TYPE (x)); f; f = TREE_CHAIN (f))
4684 {
4685 push_srcloc (DECL_SOURCE_FILE (f), DECL_SOURCE_LINE (f));
4686 if (!pushdecl_class_level (f))
4687 is_valid = false;
4688 pop_srcloc ();
4689 }
4690 }
4691 timevar_pop (TV_NAME_LOOKUP);
4692
4693 return is_valid;
4694 }
4695
4696 /* Enter DECL into the symbol table, if that's appropriate. Returns
4697 DECL, or a modified version thereof. */
4698
4699 tree
maybe_push_decl(decl)4700 maybe_push_decl (decl)
4701 tree decl;
4702 {
4703 tree type = TREE_TYPE (decl);
4704
4705 /* Add this decl to the current binding level, but not if it comes
4706 from another scope, e.g. a static member variable. TEM may equal
4707 DECL or it may be a previous decl of the same name. */
4708 if (decl == error_mark_node
4709 || (TREE_CODE (decl) != PARM_DECL
4710 && DECL_CONTEXT (decl) != NULL_TREE
4711 /* Definitions of namespace members outside their namespace are
4712 possible. */
4713 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4714 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4715 || TREE_CODE (type) == UNKNOWN_TYPE
4716 /* The declaration of a template specialization does not affect
4717 the functions available for overload resolution, so we do not
4718 call pushdecl. */
4719 || (TREE_CODE (decl) == FUNCTION_DECL
4720 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4721 return decl;
4722 else
4723 return pushdecl (decl);
4724 }
4725
4726 /* Make the declaration(s) of X appear in CLASS scope under the name
4727 NAME. Returns true if the binding is valid. */
4728
4729 bool
push_class_level_binding(tree name,tree x)4730 push_class_level_binding (tree name, tree x)
4731 {
4732 cxx_binding *binding;
4733
4734 timevar_push (TV_NAME_LOOKUP);
4735 /* The class_binding_level will be NULL if x is a template
4736 parameter name in a member template. */
4737 if (!class_binding_level)
4738 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
4739
4740 /* Make sure that this new member does not have the same name
4741 as a template parameter. */
4742 if (TYPE_BEING_DEFINED (current_class_type))
4743 check_template_shadow (x);
4744
4745 /* If this declaration shadows a declaration from an enclosing
4746 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4747 we leave this class. Record the shadowed declaration here. */
4748 binding = IDENTIFIER_BINDING (name);
4749 if (binding
4750 && ((TREE_CODE (x) == OVERLOAD
4751 && BINDING_VALUE (binding)
4752 && is_overloaded_fn (BINDING_VALUE (binding)))
4753 || INHERITED_VALUE_BINDING_P (binding)))
4754 {
4755 tree shadow;
4756 tree old_decl;
4757
4758 /* If the old binding was from a base class, and was for a tag
4759 name, slide it over to make room for the new binding. The
4760 old binding is still visible if explicitly qualified with a
4761 class-key. */
4762 if (INHERITED_VALUE_BINDING_P (binding)
4763 && BINDING_VALUE (binding)
4764 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4765 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4766 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4767 {
4768 old_decl = BINDING_TYPE (binding);
4769 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4770 BINDING_VALUE (binding) = NULL_TREE;
4771 INHERITED_VALUE_BINDING_P (binding) = 0;
4772 }
4773 else
4774 old_decl = BINDING_VALUE (binding);
4775
4776 /* Find the previous binding of name on the class-shadowed
4777 list, and update it. */
4778 for (shadow = class_binding_level->class_shadowed;
4779 shadow;
4780 shadow = TREE_CHAIN (shadow))
4781 if (TREE_PURPOSE (shadow) == name
4782 && TREE_TYPE (shadow) == old_decl)
4783 {
4784 BINDING_VALUE (binding) = x;
4785 INHERITED_VALUE_BINDING_P (binding) = 0;
4786 TREE_TYPE (shadow) = x;
4787 IDENTIFIER_CLASS_VALUE (name) = x;
4788 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
4789 }
4790 }
4791
4792 /* If we didn't replace an existing binding, put the binding on the
4793 stack of bindings for the identifier, and update the shadowed list. */
4794 if (push_class_binding (name, x))
4795 {
4796 class_binding_level->class_shadowed
4797 = tree_cons (name, NULL,
4798 class_binding_level->class_shadowed);
4799 /* Record the value we are binding NAME to so that we can know
4800 what to pop later. */
4801 TREE_TYPE (class_binding_level->class_shadowed) = x;
4802 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
4803 }
4804
4805 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, false);
4806 }
4807
4808 /* Insert another USING_DECL into the current binding level, returning
4809 this declaration. If this is a redeclaration, do nothing, and
4810 return NULL_TREE if this not in namespace scope (in namespace
4811 scope, a using decl might extend any previous bindings). */
4812
4813 tree
push_using_decl(scope,name)4814 push_using_decl (scope, name)
4815 tree scope;
4816 tree name;
4817 {
4818 tree decl;
4819
4820 timevar_push (TV_NAME_LOOKUP);
4821
4822 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4823 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4824 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4825 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4826 break;
4827 if (decl)
4828 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
4829 namespace_bindings_p () ? decl : NULL_TREE);
4830 decl = build_lang_decl (USING_DECL, name, void_type_node);
4831 DECL_INITIAL (decl) = scope;
4832 TREE_CHAIN (decl) = current_binding_level->usings;
4833 current_binding_level->usings = decl;
4834 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
4835 }
4836
4837 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4838 changed (i.e. there was already a directive), or the fresh
4839 TREE_LIST otherwise. */
4840
4841 tree
push_using_directive(used)4842 push_using_directive (used)
4843 tree used;
4844 {
4845 tree ud = current_binding_level->using_directives;
4846 tree iter, ancestor;
4847
4848 timevar_push (TV_NAME_LOOKUP);
4849
4850 /* Check if we already have this. */
4851 if (purpose_member (used, ud) != NULL_TREE)
4852 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
4853
4854 ancestor = namespace_ancestor (current_decl_namespace (), used);
4855 ud = current_binding_level->using_directives;
4856 ud = tree_cons (used, ancestor, ud);
4857 current_binding_level->using_directives = ud;
4858
4859 /* Recursively add all namespaces used. */
4860 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4861 push_using_directive (TREE_PURPOSE (iter));
4862
4863 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ud);
4864 }
4865
4866 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4867 other definitions already in place. We get around this by making
4868 the value of the identifier point to a list of all the things that
4869 want to be referenced by that name. It is then up to the users of
4870 that name to decide what to do with that list.
4871
4872 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4873 DECL_TEMPLATE_RESULT. It is dealt with the same way.
4874
4875 FLAGS is a bitwise-or of the following values:
4876 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4877 namespace scope.
4878 PUSH_USING: DECL is being pushed as the result of a using
4879 declaration.
4880
4881 The value returned may be a previous declaration if we guessed wrong
4882 about what language DECL should belong to (C or C++). Otherwise,
4883 it's always DECL (and never something that's not a _DECL). */
4884
4885 tree
push_overloaded_decl(decl,flags)4886 push_overloaded_decl (decl, flags)
4887 tree decl;
4888 int flags;
4889 {
4890 tree name = DECL_NAME (decl);
4891 tree old;
4892 tree new_binding;
4893 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4894
4895 timevar_push (TV_NAME_LOOKUP);
4896
4897 if (doing_global)
4898 old = namespace_binding (name, DECL_CONTEXT (decl));
4899 else
4900 old = lookup_name_current_level (name);
4901
4902 if (old)
4903 {
4904 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4905 {
4906 tree t = TREE_TYPE (old);
4907 if (IS_AGGR_TYPE (t) && warn_shadow
4908 && (! DECL_IN_SYSTEM_HEADER (decl)
4909 || ! DECL_IN_SYSTEM_HEADER (old)))
4910 warning ("`%#D' hides constructor for `%#T'", decl, t);
4911 old = NULL_TREE;
4912 }
4913 else if (is_overloaded_fn (old))
4914 {
4915 tree tmp;
4916
4917 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4918 {
4919 tree fn = OVL_CURRENT (tmp);
4920
4921 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4922 && !(flags & PUSH_USING)
4923 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4924 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4925 error ("`%#D' conflicts with previous using declaration `%#D'",
4926 decl, fn);
4927
4928 if (duplicate_decls (decl, fn))
4929 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, fn);
4930 }
4931 }
4932 else if (old == error_mark_node)
4933 /* Ignore the undefined symbol marker. */
4934 old = NULL_TREE;
4935 else
4936 {
4937 cp_error_at ("previous non-function declaration `%#D'", old);
4938 error ("conflicts with function declaration `%#D'", decl);
4939 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
4940 }
4941 }
4942
4943 if (old || TREE_CODE (decl) == TEMPLATE_DECL
4944 /* If it's a using declaration, we always need to build an OVERLOAD,
4945 because it's the only way to remember that the declaration comes
4946 from 'using', and have the lookup behave correctly. */
4947 || (flags & PUSH_USING))
4948 {
4949 if (old && TREE_CODE (old) != OVERLOAD)
4950 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4951 else
4952 new_binding = ovl_cons (decl, old);
4953 if (flags & PUSH_USING)
4954 OVL_USED (new_binding) = 1;
4955 }
4956 else
4957 /* NAME is not ambiguous. */
4958 new_binding = decl;
4959
4960 if (doing_global)
4961 set_namespace_binding (name, current_namespace, new_binding);
4962 else
4963 {
4964 /* We only create an OVERLOAD if there was a previous binding at
4965 this level, or if decl is a template. In the former case, we
4966 need to remove the old binding and replace it with the new
4967 binding. We must also run through the NAMES on the binding
4968 level where the name was bound to update the chain. */
4969
4970 if (TREE_CODE (new_binding) == OVERLOAD && old)
4971 {
4972 tree *d;
4973
4974 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4975 *d;
4976 d = &TREE_CHAIN (*d))
4977 if (*d == old
4978 || (TREE_CODE (*d) == TREE_LIST
4979 && TREE_VALUE (*d) == old))
4980 {
4981 if (TREE_CODE (*d) == TREE_LIST)
4982 /* Just replace the old binding with the new. */
4983 TREE_VALUE (*d) = new_binding;
4984 else
4985 /* Build a TREE_LIST to wrap the OVERLOAD. */
4986 *d = tree_cons (NULL_TREE, new_binding,
4987 TREE_CHAIN (*d));
4988
4989 /* And update the cxx_binding node. */
4990 BINDING_VALUE (IDENTIFIER_BINDING (name))
4991 = new_binding;
4992 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
4993 }
4994
4995 /* We should always find a previous binding in this case. */
4996 abort ();
4997 }
4998
4999 /* Install the new binding. */
5000 push_local_binding (name, new_binding, flags);
5001 }
5002
5003 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
5004 }
5005
5006 /* Generate an implicit declaration for identifier FUNCTIONID
5007 as a function of type int (). Print a warning if appropriate. */
5008
5009 tree
implicitly_declare(functionid)5010 implicitly_declare (functionid)
5011 tree functionid;
5012 {
5013 register tree decl;
5014
5015 /* We used to reuse an old implicit decl here,
5016 but this loses with inline functions because it can clobber
5017 the saved decl chains. */
5018 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
5019
5020 DECL_EXTERNAL (decl) = 1;
5021 TREE_PUBLIC (decl) = 1;
5022
5023 /* ISO standard says implicit declarations are in the innermost block.
5024 So we record the decl in the standard fashion. */
5025 pushdecl (decl);
5026 rest_of_decl_compilation (decl, NULL, 0, 0);
5027
5028 if (warn_implicit
5029 /* Only one warning per identifier. */
5030 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
5031 {
5032 pedwarn ("implicit declaration of function `%#D'", decl);
5033 }
5034
5035 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
5036
5037 return decl;
5038 }
5039
5040 /* Return zero if the declaration NEWDECL is valid
5041 when the declaration OLDDECL (assumed to be for the same name)
5042 has already been seen.
5043 Otherwise return an error message format string with a %s
5044 where the identifier should go. */
5045
5046 static const char *
redeclaration_error_message(newdecl,olddecl)5047 redeclaration_error_message (newdecl, olddecl)
5048 tree newdecl, olddecl;
5049 {
5050 if (TREE_CODE (newdecl) == TYPE_DECL)
5051 {
5052 /* Because C++ can put things into name space for free,
5053 constructs like "typedef struct foo { ... } foo"
5054 would look like an erroneous redeclaration. */
5055 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
5056 return 0;
5057 else
5058 return "redefinition of `%#D'";
5059 }
5060 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
5061 {
5062 /* If this is a pure function, its olddecl will actually be
5063 the original initialization to `0' (which we force to call
5064 abort()). Don't complain about redefinition in this case. */
5065 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
5066 return 0;
5067
5068 /* If both functions come from different namespaces, this is not
5069 a redeclaration - this is a conflict with a used function. */
5070 if (DECL_NAMESPACE_SCOPE_P (olddecl)
5071 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
5072 return "`%D' conflicts with used function";
5073
5074 /* We'll complain about linkage mismatches in
5075 warn_extern_redeclared_static. */
5076
5077 /* Defining the same name twice is no good. */
5078 if (DECL_INITIAL (olddecl) != NULL_TREE
5079 && DECL_INITIAL (newdecl) != NULL_TREE)
5080 {
5081 if (DECL_NAME (olddecl) == NULL_TREE)
5082 return "`%#D' not declared in class";
5083 else
5084 return "redefinition of `%#D'";
5085 }
5086 return 0;
5087 }
5088 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
5089 {
5090 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
5091 && (DECL_TEMPLATE_RESULT (newdecl)
5092 != DECL_TEMPLATE_RESULT (olddecl))
5093 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
5094 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
5095 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
5096 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
5097 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
5098 return "redefinition of `%#D'";
5099 return 0;
5100 }
5101 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
5102 {
5103 /* Objects declared at top level: */
5104 /* If at least one is a reference, it's ok. */
5105 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
5106 return 0;
5107 /* Reject two definitions. */
5108 return "redefinition of `%#D'";
5109 }
5110 else
5111 {
5112 /* Objects declared with block scope: */
5113 /* Reject two definitions, and reject a definition
5114 together with an external reference. */
5115 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
5116 return "redeclaration of `%#D'";
5117 return 0;
5118 }
5119 }
5120
5121 /* Create a new label, named ID. */
5122
5123 static tree
make_label_decl(id,local_p)5124 make_label_decl (id, local_p)
5125 tree id;
5126 int local_p;
5127 {
5128 tree decl;
5129
5130 decl = build_decl (LABEL_DECL, id, void_type_node);
5131 if (expanding_p)
5132 /* Make sure every label has an rtx. */
5133 label_rtx (decl);
5134
5135 DECL_CONTEXT (decl) = current_function_decl;
5136 DECL_MODE (decl) = VOIDmode;
5137 C_DECLARED_LABEL_FLAG (decl) = local_p;
5138
5139 /* Say where one reference is to the label, for the sake of the
5140 error if it is not defined. */
5141 DECL_SOURCE_LINE (decl) = lineno;
5142 DECL_SOURCE_FILE (decl) = input_filename;
5143
5144 /* Record the fact that this identifier is bound to this label. */
5145 SET_IDENTIFIER_LABEL_VALUE (id, decl);
5146
5147 return decl;
5148 }
5149
5150 /* Record this label on the list of used labels so that we can check
5151 at the end of the function to see whether or not the label was
5152 actually defined, and so we can check when the label is defined whether
5153 this use is valid. */
5154
5155 static void
use_label(decl)5156 use_label (decl)
5157 tree decl;
5158 {
5159 if (named_label_uses == NULL
5160 || named_label_uses->names_in_scope != current_binding_level->names
5161 || named_label_uses->label_decl != decl)
5162 {
5163 struct named_label_use_list *new_ent;
5164 new_ent = ((struct named_label_use_list *)
5165 ggc_alloc (sizeof (struct named_label_use_list)));
5166 new_ent->label_decl = decl;
5167 new_ent->names_in_scope = current_binding_level->names;
5168 new_ent->binding_level = current_binding_level;
5169 new_ent->lineno_o_goto = lineno;
5170 new_ent->filename_o_goto = input_filename;
5171 new_ent->next = named_label_uses;
5172 named_label_uses = new_ent;
5173 }
5174 }
5175
5176 /* Look for a label named ID in the current function. If one cannot
5177 be found, create one. (We keep track of used, but undefined,
5178 labels, and complain about them at the end of a function.) */
5179
5180 tree
lookup_label(id)5181 lookup_label (id)
5182 tree id;
5183 {
5184 tree decl;
5185 struct named_label_list *ent;
5186
5187 timevar_push (TV_NAME_LOOKUP);
5188
5189 /* You can't use labels at global scope. */
5190 if (current_function_decl == NULL_TREE)
5191 {
5192 error ("label `%s' referenced outside of any function",
5193 IDENTIFIER_POINTER (id));
5194 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
5195 }
5196
5197 /* See if we've already got this label. */
5198 decl = IDENTIFIER_LABEL_VALUE (id);
5199 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
5200 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
5201
5202 /* Record this label on the list of labels used in this function.
5203 We do this before calling make_label_decl so that we get the
5204 IDENTIFIER_LABEL_VALUE before the new label is declared. */
5205 ent = ((struct named_label_list *)
5206 ggc_alloc_cleared (sizeof (struct named_label_list)));
5207 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
5208 ent->next = named_labels;
5209 named_labels = ent;
5210
5211 /* We need a new label. */
5212 decl = make_label_decl (id, /*local_p=*/0);
5213
5214 /* Now fill in the information we didn't have before. */
5215 ent->label_decl = decl;
5216
5217 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
5218 }
5219
5220 /* Declare a local label named ID. */
5221
5222 tree
declare_local_label(id)5223 declare_local_label (id)
5224 tree id;
5225 {
5226 tree decl;
5227
5228 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
5229 this scope we can restore the old value of
5230 IDENTIFIER_TYPE_VALUE. */
5231 current_binding_level->shadowed_labels
5232 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
5233 current_binding_level->shadowed_labels);
5234 /* Look for the label. */
5235 decl = make_label_decl (id, /*local_p=*/1);
5236 /* Now fill in the information we didn't have before. */
5237 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
5238
5239 return decl;
5240 }
5241
5242 /* Returns nonzero if it is ill-formed to jump past the declaration of
5243 DECL. Returns 2 if it's also a real problem. */
5244
5245 static int
decl_jump_unsafe(decl)5246 decl_jump_unsafe (decl)
5247 tree decl;
5248 {
5249 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5250 return 0;
5251
5252 if (DECL_INITIAL (decl) == NULL_TREE
5253 && pod_type_p (TREE_TYPE (decl)))
5254 return 0;
5255
5256 /* This is really only important if we're crossing an initialization.
5257 The POD stuff is just pedantry; why should it matter if the class
5258 contains a field of pointer to member type? */
5259 if (DECL_INITIAL (decl)
5260 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
5261 return 2;
5262 return 1;
5263 }
5264
5265 /* Check that a single previously seen jump to a newly defined label
5266 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
5267 the jump context; NAMES are the names in scope in LEVEL at the jump
5268 context; FILE and LINE are the source position of the jump or 0. */
5269
5270 static void
check_previous_goto_1(decl,level,names,file,line)5271 check_previous_goto_1 (decl, level, names, file, line)
5272 tree decl;
5273 struct cp_binding_level *level;
5274 tree names;
5275 const char *file;
5276 int line;
5277 {
5278 int identified = 0;
5279 int saw_eh = 0;
5280 struct cp_binding_level *b = current_binding_level;
5281 for (; b; b = b->level_chain)
5282 {
5283 tree new_decls = b->names;
5284 tree old_decls = (b == level ? names : NULL_TREE);
5285 for (; new_decls != old_decls;
5286 new_decls = TREE_CHAIN (new_decls))
5287 {
5288 int problem = decl_jump_unsafe (new_decls);
5289 if (! problem)
5290 continue;
5291
5292 if (! identified)
5293 {
5294 if (decl)
5295 pedwarn ("jump to label `%D'", decl);
5296 else
5297 pedwarn ("jump to case label");
5298
5299 if (file)
5300 pedwarn_with_file_and_line (file, line, " from here");
5301 identified = 1;
5302 }
5303
5304 if (problem > 1)
5305 cp_error_at (" crosses initialization of `%#D'",
5306 new_decls);
5307 else
5308 cp_pedwarn_at (" enters scope of non-POD `%#D'",
5309 new_decls);
5310 }
5311
5312 if (b == level)
5313 break;
5314 if ((b->is_try_scope || b->is_catch_scope) && ! saw_eh)
5315 {
5316 if (! identified)
5317 {
5318 if (decl)
5319 pedwarn ("jump to label `%D'", decl);
5320 else
5321 pedwarn ("jump to case label");
5322
5323 if (file)
5324 pedwarn_with_file_and_line (file, line, " from here");
5325 identified = 1;
5326 }
5327 if (b->is_try_scope)
5328 error (" enters try block");
5329 else
5330 error (" enters catch block");
5331 saw_eh = 1;
5332 }
5333 }
5334 }
5335
5336 static void
check_previous_goto(use)5337 check_previous_goto (use)
5338 struct named_label_use_list *use;
5339 {
5340 check_previous_goto_1 (use->label_decl, use->binding_level,
5341 use->names_in_scope, use->filename_o_goto,
5342 use->lineno_o_goto);
5343 }
5344
5345 static void
check_switch_goto(level)5346 check_switch_goto (level)
5347 struct cp_binding_level *level;
5348 {
5349 check_previous_goto_1 (NULL_TREE, level, level->names, NULL, 0);
5350 }
5351
5352 /* Check that any previously seen jumps to a newly defined label DECL
5353 are OK. Called by define_label. */
5354
5355 static void
check_previous_gotos(decl)5356 check_previous_gotos (decl)
5357 tree decl;
5358 {
5359 struct named_label_use_list **usep;
5360
5361 if (! TREE_USED (decl))
5362 return;
5363
5364 for (usep = &named_label_uses; *usep; )
5365 {
5366 struct named_label_use_list *use = *usep;
5367 if (use->label_decl == decl)
5368 {
5369 check_previous_goto (use);
5370 *usep = use->next;
5371 }
5372 else
5373 usep = &(use->next);
5374 }
5375 }
5376
5377 /* Check that a new jump to a label DECL is OK. Called by
5378 finish_goto_stmt. */
5379
5380 void
check_goto(decl)5381 check_goto (decl)
5382 tree decl;
5383 {
5384 int identified = 0;
5385 tree bad;
5386 struct named_label_list *lab;
5387
5388 /* We can't know where a computed goto is jumping. So we assume
5389 that it's OK. */
5390 if (! DECL_P (decl))
5391 return;
5392
5393 /* If the label hasn't been defined yet, defer checking. */
5394 if (! DECL_INITIAL (decl))
5395 {
5396 use_label (decl);
5397 return;
5398 }
5399
5400 for (lab = named_labels; lab; lab = lab->next)
5401 if (decl == lab->label_decl)
5402 break;
5403
5404 /* If the label is not on named_labels it's a gcc local label, so
5405 it must be in an outer scope, so jumping to it is always OK. */
5406 if (lab == 0)
5407 return;
5408
5409 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
5410 && !identified)
5411 {
5412 cp_pedwarn_at ("jump to label `%D'", decl);
5413 pedwarn (" from here");
5414 identified = 1;
5415 }
5416
5417 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
5418 {
5419 tree b = TREE_VALUE (bad);
5420 int u = decl_jump_unsafe (b);
5421
5422 if (u > 1 && DECL_ARTIFICIAL (b))
5423 /* Can't skip init of __exception_info. */
5424 cp_error_at (" enters catch block", b);
5425 else if (u > 1)
5426 cp_error_at (" skips initialization of `%#D'", b);
5427 else
5428 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
5429 }
5430
5431 if (lab->in_try_scope)
5432 error (" enters try block");
5433 else if (lab->in_catch_scope)
5434 error (" enters catch block");
5435 }
5436
5437 /* Define a label, specifying the location in the source file.
5438 Return the LABEL_DECL node for the label. */
5439
5440 tree
define_label(filename,line,name)5441 define_label (filename, line, name)
5442 const char *filename;
5443 int line;
5444 tree name;
5445 {
5446 tree decl = lookup_label (name);
5447 struct named_label_list *ent;
5448 register struct cp_binding_level *p;
5449
5450 timevar_push (TV_NAME_LOOKUP);
5451
5452 for (ent = named_labels; ent; ent = ent->next)
5453 if (ent->label_decl == decl)
5454 break;
5455
5456 /* After labels, make any new cleanups in the function go into their
5457 own new (temporary) binding contour. */
5458 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5459 p->more_cleanups_ok = 0;
5460
5461 if (name == get_identifier ("wchar_t"))
5462 pedwarn ("label named wchar_t");
5463
5464 if (DECL_INITIAL (decl) != NULL_TREE)
5465 error ("duplicate label `%D'", decl);
5466 else
5467 {
5468 /* Mark label as having been defined. */
5469 DECL_INITIAL (decl) = error_mark_node;
5470 /* Say where in the source. */
5471 DECL_SOURCE_FILE (decl) = filename;
5472 DECL_SOURCE_LINE (decl) = line;
5473 if (ent)
5474 {
5475 ent->names_in_scope = current_binding_level->names;
5476 ent->binding_level = current_binding_level;
5477 }
5478 check_previous_gotos (decl);
5479 }
5480
5481 timevar_pop (TV_NAME_LOOKUP);
5482 return decl;
5483 }
5484
5485 struct cp_switch
5486 {
5487 struct cp_binding_level *level;
5488 struct cp_switch *next;
5489 /* The SWITCH_STMT being built. */
5490 tree switch_stmt;
5491 /* A splay-tree mapping the low element of a case range to the high
5492 element, or NULL_TREE if there is no high element. Used to
5493 determine whether or not a new case label duplicates an old case
5494 label. We need a tree, rather than simply a hash table, because
5495 of the GNU case range extension. */
5496 splay_tree cases;
5497 };
5498
5499 /* A stack of the currently active switch statements. The innermost
5500 switch statement is on the top of the stack. There is no need to
5501 mark the stack for garbage collection because it is only active
5502 during the processing of the body of a function, and we never
5503 collect at that point. */
5504
5505 static struct cp_switch *switch_stack;
5506
5507 /* Called right after a switch-statement condition is parsed.
5508 SWITCH_STMT is the switch statement being parsed. */
5509
5510 void
push_switch(switch_stmt)5511 push_switch (switch_stmt)
5512 tree switch_stmt;
5513 {
5514 struct cp_switch *p
5515 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
5516 p->level = current_binding_level;
5517 p->next = switch_stack;
5518 p->switch_stmt = switch_stmt;
5519 p->cases = splay_tree_new (case_compare, NULL, NULL);
5520 switch_stack = p;
5521 }
5522
5523 void
pop_switch()5524 pop_switch ()
5525 {
5526 struct cp_switch *cs;
5527
5528 cs = switch_stack;
5529 splay_tree_delete (cs->cases);
5530 switch_stack = switch_stack->next;
5531 free (cs);
5532 }
5533
5534 /* Note that we've seen a definition of a case label, and complain if this
5535 is a bad place for one. */
5536
5537 tree
finish_case_label(low_value,high_value)5538 finish_case_label (low_value, high_value)
5539 tree low_value;
5540 tree high_value;
5541 {
5542 tree cond, r;
5543 register struct cp_binding_level *p;
5544
5545 if (! switch_stack)
5546 {
5547 if (high_value)
5548 error ("case label not within a switch statement");
5549 else if (low_value)
5550 error ("case label `%E' not within a switch statement",
5551 low_value);
5552 else
5553 error ("`default' label not within a switch statement");
5554 return NULL_TREE;
5555 }
5556
5557 if (processing_template_decl)
5558 {
5559 tree label;
5560
5561 /* For templates, just add the case label; we'll do semantic
5562 analysis at instantiation-time. */
5563 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
5564 return add_stmt (build_case_label (low_value, high_value, label));
5565 }
5566
5567 /* Find the condition on which this switch statement depends. */
5568 cond = SWITCH_COND (switch_stack->switch_stmt);
5569 if (cond && TREE_CODE (cond) == TREE_LIST)
5570 cond = TREE_VALUE (cond);
5571
5572 r = c_add_case_label (switch_stack->cases, cond, low_value, high_value);
5573 if (r == error_mark_node)
5574 r = NULL_TREE;
5575
5576 check_switch_goto (switch_stack->level);
5577
5578 /* After labels, make any new cleanups in the function go into their
5579 own new (temporary) binding contour. */
5580 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5581 p->more_cleanups_ok = 0;
5582
5583 return r;
5584 }
5585
5586 /* Return the list of declarations of the current level.
5587 Note that this list is in reverse order unless/until
5588 you nreverse it; and when you do nreverse it, you must
5589 store the result back using `storedecls' or you will lose. */
5590
5591 tree
getdecls()5592 getdecls ()
5593 {
5594 return current_binding_level->names;
5595 }
5596
5597 /* Store the list of declarations of the current level.
5598 This is done for the parameter declarations of a function being defined,
5599 after they are modified in the light of any missing parameters. */
5600
5601 static void
storedecls(decls)5602 storedecls (decls)
5603 tree decls;
5604 {
5605 current_binding_level->names = decls;
5606 }
5607
5608 /* Set the current binding TABLE for type declarations.. This is a
5609 temporary workaround of the fact that the data structure classtypes
5610 does not currently carry its allocated cxx_scope structure. */
5611 void
cxx_remember_type_decls(binding_table table)5612 cxx_remember_type_decls (binding_table table)
5613 {
5614 current_binding_level->type_decls = table;
5615 }
5616
5617
5618 /* Return the type that should be used when TYPE's name is preceded
5619 by a tag such as 'struct' or 'union', or null if the name cannot
5620 be used in this way.
5621
5622 For example, when processing the third line of:
5623
5624 struct A;
5625 typedef struct A A;
5626 struct A;
5627
5628 lookup of A will find the typedef. Given A's typedef, this function
5629 will return the type associated with "struct A". For the tag to be
5630 anything other than TYPE, TYPE must be a typedef whose original type
5631 has the same name and context as TYPE itself.
5632
5633 It is not valid for a typedef of an anonymous type to be used with
5634 an explicit tag:
5635
5636 typedef struct { ... } B;
5637 struct B;
5638
5639 Return null for this case. */
5640
5641 static tree
follow_tag_typedef(type)5642 follow_tag_typedef (type)
5643 tree type;
5644 {
5645 tree original;
5646
5647 original = original_type (type);
5648 if (! TYPE_NAME (original))
5649 return NULL_TREE;
5650 if (TYPE_IDENTIFIER (original) == TYPE_IDENTIFIER (type)
5651 && (CP_DECL_CONTEXT (TYPE_NAME (original))
5652 == CP_DECL_CONTEXT (TYPE_NAME (type)))
5653 && !(CLASS_TYPE_P (original) && TYPE_WAS_ANONYMOUS (original)))
5654 return original;
5655 else
5656 return NULL_TREE;
5657 }
5658
5659 /* Given NAME, an IDENTIFIER_NODE,
5660 return the structure (or union or enum) definition for that name.
5661 Searches binding levels from BINDING_LEVEL up to the global level.
5662 If THISLEVEL_ONLY is nonzero, searches only the specified context
5663 (but skips any tag-transparent contexts to find one that is
5664 meaningful for tags).
5665 FORM says which kind of type the caller wants;
5666 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5667 If the wrong kind of type is found, and it's not a template, an error is
5668 reported. */
5669
5670 static tree
lookup_tag(form,name,binding_level,thislevel_only)5671 lookup_tag (form, name, binding_level, thislevel_only)
5672 enum tree_code form;
5673 tree name;
5674 struct cp_binding_level *binding_level;
5675 int thislevel_only;
5676 {
5677 register struct cp_binding_level *level;
5678 /* Nonzero if, we should look past a template parameter level, even
5679 if THISLEVEL_ONLY. */
5680 int allow_template_parms_p = 1;
5681 bool type_is_anonymous = ANON_AGGRNAME_P (name);
5682
5683 timevar_push (TV_NAME_LOOKUP);
5684
5685 for (level = binding_level; level; level = level->level_chain)
5686 {
5687 register tree tail;
5688 if (type_is_anonymous && level->type_decls != NULL)
5689 {
5690 tree type = binding_table_find_anon_type (level->type_decls, name);
5691 /* There's no need for error checking here, because
5692 anon names are unique throughout the compilation. */
5693 if (type != NULL)
5694 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, type);
5695 }
5696 else if (level->namespace_p)
5697 /* Do namespace lookup. */
5698 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5699 {
5700 cxx_binding *binding =
5701 cxx_scope_find_binding_for_name (tail, name);
5702 tree old;
5703
5704 /* If we just skipped past a template parameter level,
5705 even though THISLEVEL_ONLY, and we find a template
5706 class declaration, then we use the _TYPE node for the
5707 template. See the example below. */
5708 if (thislevel_only && !allow_template_parms_p
5709 && binding && BINDING_VALUE (binding)
5710 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (binding)))
5711 old = TREE_TYPE (BINDING_VALUE (binding));
5712 else if (binding)
5713 old = BINDING_TYPE (binding);
5714 else
5715 old = NULL;
5716
5717 if (old)
5718 {
5719 /* We've found something at this binding level. If it is
5720 a typedef, extract the tag it refers to. Lookup fails
5721 if the typedef doesn't refer to a taggable type. */
5722 old = follow_tag_typedef (old);
5723 if (!old)
5724 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
5725 if (TREE_CODE (old) != form
5726 && (form == ENUMERAL_TYPE
5727 || TREE_CODE (old) == ENUMERAL_TYPE))
5728 {
5729 error ("`%#D' redeclared as %C", old, form);
5730 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
5731 }
5732 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, old);
5733 }
5734 if (thislevel_only || tail == global_namespace)
5735 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
5736 }
5737 else if (level->type_decls != NULL)
5738 {
5739 binding_entry entry = binding_table_find (level->type_decls, name);
5740 if (entry != NULL)
5741 {
5742 enum tree_code code = TREE_CODE (entry->type);
5743
5744 if (code != form
5745 && (form == ENUMERAL_TYPE || code == ENUMERAL_TYPE))
5746 {
5747 /* Definition isn't the kind we were looking for. */
5748 error ("`%#D' redeclared as %C", entry->type, form);
5749 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
5750 }
5751 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, entry->type);
5752 }
5753 }
5754 if (thislevel_only && ! level->tag_transparent)
5755 {
5756 if (level->template_parms_p && allow_template_parms_p)
5757 {
5758 /* We must deal with cases like this:
5759
5760 template <class T> struct S;
5761 template <class T> struct S {};
5762
5763 When looking up `S', for the second declaration, we
5764 would like to find the first declaration. But, we
5765 are in the pseudo-global level created for the
5766 template parameters, rather than the (surrounding)
5767 namespace level. Thus, we keep going one more level,
5768 even though THISLEVEL_ONLY is nonzero. */
5769 allow_template_parms_p = 0;
5770 continue;
5771 }
5772 else
5773 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
5774 }
5775 }
5776 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
5777 }
5778
5779 #if 0
5780 void
5781 set_current_level_tags_transparency (tags_transparent)
5782 int tags_transparent;
5783 {
5784 current_binding_level->tag_transparent = tags_transparent;
5785 }
5786 #endif
5787
5788 /* Given a type, find the tag that was defined for it and return the tag name.
5789 Otherwise return 0. However, the value can never be 0
5790 in the cases in which this is used.
5791
5792 C++: If NAME is nonzero, this is the new name to install. This is
5793 done when replacing anonymous tags with real tag names. */
5794
5795 static tree
lookup_tag_reverse(type,name)5796 lookup_tag_reverse (type, name)
5797 tree type;
5798 tree name;
5799 {
5800 register struct cp_binding_level *level;
5801
5802 timevar_push (TV_NAME_LOOKUP);
5803
5804 for (level = current_binding_level; level; level = level->level_chain)
5805 {
5806 binding_entry entry = level->type_decls == NULL
5807 ? NULL
5808 : binding_table_reverse_maybe_remap (level->type_decls, type, name);
5809 if (entry)
5810 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, entry->name);
5811 }
5812 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
5813 }
5814
5815 /* Look up NAME in the NAMESPACE. */
5816
5817 tree
lookup_namespace_name(namespace,name)5818 lookup_namespace_name (namespace, name)
5819 tree namespace, name;
5820 {
5821 tree val;
5822 tree template_id = NULL_TREE;
5823 cxx_binding binding;
5824
5825 timevar_push (TV_NAME_LOOKUP);
5826
5827 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5828
5829 if (TREE_CODE (name) == NAMESPACE_DECL)
5830 /* This happens for A::B<int> when B is a namespace. */
5831 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, name);
5832 else if (TREE_CODE (name) == TEMPLATE_DECL)
5833 {
5834 /* This happens for A::B where B is a template, and there are no
5835 template arguments. */
5836 error ("invalid use of `%D'", name);
5837 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5838 }
5839
5840 namespace = ORIGINAL_NAMESPACE (namespace);
5841
5842 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5843 {
5844 template_id = name;
5845 name = TREE_OPERAND (name, 0);
5846 if (TREE_CODE (name) == OVERLOAD)
5847 name = DECL_NAME (OVL_CURRENT (name));
5848 else if (DECL_P (name))
5849 name = DECL_NAME (name);
5850 }
5851
5852 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5853
5854 cxx_binding_clear (&binding);
5855 if (!qualified_lookup_using_namespace (name, namespace, &binding, 0))
5856 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5857
5858 if (binding.value)
5859 {
5860 val = binding.value;
5861
5862 if (template_id)
5863 {
5864 if (DECL_CLASS_TEMPLATE_P (val))
5865 val = lookup_template_class (val,
5866 TREE_OPERAND (template_id, 1),
5867 /*in_decl=*/NULL_TREE,
5868 /*context=*/NULL_TREE,
5869 /*entering_scope=*/0,
5870 tf_error | tf_warning);
5871 else if (DECL_FUNCTION_TEMPLATE_P (val)
5872 || TREE_CODE (val) == OVERLOAD)
5873 val = lookup_template_function (val,
5874 TREE_OPERAND (template_id, 1));
5875 else
5876 {
5877 error ("`%D::%D' is not a template",
5878 namespace, name);
5879 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5880 }
5881 }
5882
5883 /* If we have a single function from a using decl, pull it out. */
5884 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5885 val = OVL_FUNCTION (val);
5886
5887 /* Ignore built-in functions that haven't been prototyped yet. */
5888 if (!val || !DECL_P(val)
5889 || !DECL_LANG_SPECIFIC(val)
5890 || !DECL_ANTICIPATED (val))
5891 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
5892 }
5893
5894 error ("`%D' undeclared in namespace `%D'", name, namespace);
5895 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5896 }
5897
5898 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5899
5900 static hashval_t
typename_hash(k)5901 typename_hash (k)
5902 const void * k;
5903 {
5904 hashval_t hash;
5905 tree t = (tree) k;
5906
5907 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
5908 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
5909
5910 return hash;
5911 }
5912
5913 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5914
5915 static int
typename_compare(k1,k2)5916 typename_compare (k1, k2)
5917 const void * k1;
5918 const void * k2;
5919 {
5920 tree t1;
5921 tree t2;
5922 tree d1;
5923 tree d2;
5924
5925 t1 = (tree) k1;
5926 t2 = (tree) k2;
5927 d1 = TYPE_NAME (t1);
5928 d2 = TYPE_NAME (t2);
5929
5930 return (DECL_NAME (d1) == DECL_NAME (d2)
5931 && TYPE_CONTEXT (t1) == TYPE_CONTEXT (t2)
5932 && ((TREE_TYPE (t1) != NULL_TREE)
5933 == (TREE_TYPE (t2) != NULL_TREE))
5934 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5935 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5936 }
5937
5938 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5939 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5940 is non-NULL, this type is being created by the implicit typename
5941 extension, and BASE_TYPE is a type named `t' in some base class of
5942 `T' which depends on template parameters.
5943
5944 Returns the new TYPENAME_TYPE. */
5945
5946 static GTY ((param_is (union tree_node))) htab_t typename_htab;
5947
5948 tree
build_typename_type(context,name,fullname,base_type)5949 build_typename_type (context, name, fullname, base_type)
5950 tree context;
5951 tree name;
5952 tree fullname;
5953 tree base_type;
5954 {
5955 tree t;
5956 tree d;
5957 PTR *e;
5958
5959 if (typename_htab == NULL)
5960 {
5961 typename_htab = htab_create_ggc (61, &typename_hash,
5962 &typename_compare, NULL);
5963 }
5964
5965 /* Build the TYPENAME_TYPE. */
5966 t = make_aggr_type (TYPENAME_TYPE);
5967 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5968 TYPENAME_TYPE_FULLNAME (t) = fullname;
5969 TREE_TYPE (t) = base_type;
5970
5971 /* Build the corresponding TYPE_DECL. */
5972 d = build_decl (TYPE_DECL, name, t);
5973 TYPE_NAME (TREE_TYPE (d)) = d;
5974 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5975 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5976 DECL_ARTIFICIAL (d) = 1;
5977
5978 /* See if we already have this type. */
5979 e = htab_find_slot (typename_htab, t, INSERT);
5980 if (*e)
5981 t = (tree) *e;
5982 else
5983 *e = t;
5984
5985 return t;
5986 }
5987
5988 /* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5989 unless an error occurs, in which case error_mark_node is returned.
5990 If we locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is
5991 set, we return that, rather than the _TYPE it corresponds to, in
5992 other cases we look through the type decl. If TF_ERROR is set,
5993 complain about errors, otherwise be quiet. */
5994
5995 tree
make_typename_type(context,name,complain)5996 make_typename_type (context, name, complain)
5997 tree context, name;
5998 tsubst_flags_t complain;
5999 {
6000 tree fullname;
6001
6002 if (TYPE_P (name))
6003 {
6004 if (!(TYPE_LANG_SPECIFIC (name)
6005 && (CLASSTYPE_IS_TEMPLATE (name)
6006 || CLASSTYPE_USE_TEMPLATE (name))))
6007 name = TYPE_IDENTIFIER (name);
6008 else
6009 /* Create a TEMPLATE_ID_EXPR for the type. */
6010 name = build_nt (TEMPLATE_ID_EXPR,
6011 CLASSTYPE_TI_TEMPLATE (name),
6012 CLASSTYPE_TI_ARGS (name));
6013 }
6014 else if (TREE_CODE (name) == TYPE_DECL)
6015 name = DECL_NAME (name);
6016
6017 fullname = name;
6018
6019 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
6020 {
6021 name = TREE_OPERAND (name, 0);
6022 if (TREE_CODE (name) == TEMPLATE_DECL)
6023 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
6024 }
6025 if (TREE_CODE (name) == TEMPLATE_DECL)
6026 {
6027 error ("`%D' used without template parameters", name);
6028 return error_mark_node;
6029 }
6030 if (TREE_CODE (name) != IDENTIFIER_NODE)
6031 abort ();
6032
6033 if (TREE_CODE (context) == NAMESPACE_DECL)
6034 {
6035 /* We can get here from typename_sub0 in the explicit_template_type
6036 expansion. Just fail. */
6037 if (complain & tf_error)
6038 error ("no class template named `%#T' in `%#T'",
6039 name, context);
6040 return error_mark_node;
6041 }
6042
6043 if (! uses_template_parms (context)
6044 || currently_open_class (context))
6045 {
6046 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
6047 {
6048 tree tmpl = NULL_TREE;
6049 if (IS_AGGR_TYPE (context))
6050 tmpl = lookup_field (context, name, 0, 0);
6051 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6052 {
6053 if (complain & tf_error)
6054 error ("no class template named `%#T' in `%#T'",
6055 name, context);
6056 return error_mark_node;
6057 }
6058
6059 if (complain & tf_error)
6060 {
6061 if (complain & tf_parsing)
6062 type_access_control (context, tmpl);
6063 else
6064 enforce_access (context, tmpl);
6065 }
6066
6067 return lookup_template_class (tmpl,
6068 TREE_OPERAND (fullname, 1),
6069 NULL_TREE, context,
6070 /*entering_scope=*/0,
6071 tf_error | tf_warning);
6072 }
6073 else
6074 {
6075 tree t;
6076
6077 if (!IS_AGGR_TYPE (context))
6078 {
6079 if (complain & tf_error)
6080 error ("no type named `%#T' in `%#T'", name, context);
6081 return error_mark_node;
6082 }
6083
6084 t = lookup_field (context, name, 0, 1);
6085 if (t)
6086 {
6087 if (TREE_CODE (t) != TYPE_DECL)
6088 {
6089 if (complain & tf_error)
6090 error ("no type named `%#T' in `%#T'", name, context);
6091 return error_mark_node;
6092 }
6093
6094 if (complain & tf_error)
6095 {
6096 if (complain & tf_parsing)
6097 type_access_control (context, t);
6098 else
6099 enforce_access (context, t);
6100 }
6101
6102 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
6103 t = TREE_TYPE (t);
6104 if (IMPLICIT_TYPENAME_P (t))
6105 {
6106 /* Lookup found an implicit typename that we had
6107 injected into the current scope. Doing things
6108 properly would have located the exact same type,
6109 so there is no error here. We must remove the
6110 implicitness so that we do not warn about it. */
6111 t = copy_node (t);
6112 TREE_TYPE (t) = NULL_TREE;
6113 }
6114
6115 return t;
6116 }
6117 }
6118 }
6119
6120 /* If the CONTEXT is not a template type, then either the field is
6121 there now or its never going to be. */
6122 if (!uses_template_parms (context))
6123 {
6124 if (complain & tf_error)
6125 error ("no type named `%#T' in `%#T'", name, context);
6126 return error_mark_node;
6127 }
6128
6129 return build_typename_type (context, name, fullname, NULL_TREE);
6130 }
6131
6132 /* Resolve `CONTEXT::template NAME'. Returns an appropriate type,
6133 unless an error occurs, in which case error_mark_node is returned.
6134 If we locate a TYPE_DECL, we return that, rather than the _TYPE it
6135 corresponds to. If COMPLAIN zero, don't complain about any errors
6136 that occur. */
6137
6138 tree
make_unbound_class_template(context,name,complain)6139 make_unbound_class_template (context, name, complain)
6140 tree context, name;
6141 tsubst_flags_t complain;
6142 {
6143 tree t;
6144 tree d;
6145
6146 if (TYPE_P (name))
6147 name = TYPE_IDENTIFIER (name);
6148 else if (DECL_P (name))
6149 name = DECL_NAME (name);
6150 if (TREE_CODE (name) != IDENTIFIER_NODE)
6151 abort ();
6152
6153 if (!uses_template_parms (context)
6154 || currently_open_class (context))
6155 {
6156 tree tmpl = NULL_TREE;
6157
6158 if (IS_AGGR_TYPE (context))
6159 tmpl = lookup_field (context, name, 0, 0);
6160
6161 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6162 {
6163 if (complain & tf_error)
6164 error ("no class template named `%#T' in `%#T'", name, context);
6165 return error_mark_node;
6166 }
6167
6168 if (complain & tf_error)
6169 {
6170 if (complain & tf_parsing)
6171 type_access_control (context, tmpl);
6172 else
6173 enforce_access (context, tmpl);
6174 }
6175
6176 return tmpl;
6177 }
6178
6179 /* Build the UNBOUND_CLASS_TEMPLATE. */
6180 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
6181 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
6182 TREE_TYPE (t) = NULL_TREE;
6183
6184 /* Build the corresponding TEMPLATE_DECL. */
6185 d = build_decl (TEMPLATE_DECL, name, t);
6186 TYPE_NAME (TREE_TYPE (d)) = d;
6187 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
6188 DECL_CONTEXT (d) = FROB_CONTEXT (context);
6189 DECL_ARTIFICIAL (d) = 1;
6190
6191 return t;
6192 }
6193
6194 /* Select the right _DECL from multiple choices. */
6195
6196 static tree
select_decl(cxx_binding * binding,int flags)6197 select_decl (cxx_binding *binding, int flags)
6198 {
6199 tree val;
6200
6201 timevar_push (TV_NAME_LOOKUP);
6202
6203 val = BINDING_VALUE (binding);
6204
6205 if (LOOKUP_NAMESPACES_ONLY (flags))
6206 {
6207 /* We are not interested in types. */
6208 if (val && TREE_CODE (val) == NAMESPACE_DECL)
6209 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
6210 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
6211 }
6212
6213 /* If we could have a type and
6214 we have nothing or we need a type and have none. */
6215 if (BINDING_TYPE (binding)
6216 && (!val || ((flags & LOOKUP_PREFER_TYPES)
6217 && TREE_CODE (val) != TYPE_DECL)))
6218 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
6219 /* Don't return non-types if we really prefer types. */
6220 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
6221 && (TREE_CODE (val) != TEMPLATE_DECL
6222 || !DECL_CLASS_TEMPLATE_P (val)))
6223 val = NULL_TREE;
6224
6225 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
6226 }
6227
6228 /* Unscoped lookup of a global: iterate over current namespaces,
6229 considering using-directives. If SPACESP is non-NULL, store a list
6230 of the namespaces we've considered in it. */
6231
6232 tree
unqualified_namespace_lookup(name,flags,spacesp)6233 unqualified_namespace_lookup (name, flags, spacesp)
6234 tree name;
6235 int flags;
6236 tree *spacesp;
6237 {
6238 tree initial = current_decl_namespace ();
6239 tree scope = initial;
6240 tree siter;
6241 struct cp_binding_level *level;
6242 tree val = NULL_TREE;
6243 cxx_binding binding;
6244
6245 timevar_push (TV_NAME_LOOKUP);
6246 cxx_binding_clear (&binding);
6247 if (spacesp)
6248 *spacesp = NULL_TREE;
6249
6250 for (; !val; scope = CP_DECL_CONTEXT (scope))
6251 {
6252 cxx_binding *b;
6253 if (spacesp)
6254 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
6255 b = cxx_scope_find_binding_for_name (scope, name);
6256
6257 /* Ignore anticipated built-in functions. */
6258 if (b && BINDING_VALUE (b) && DECL_P (BINDING_VALUE (b))
6259 && DECL_LANG_SPECIFIC (BINDING_VALUE (b))
6260 && DECL_ANTICIPATED (BINDING_VALUE (b)))
6261 /* Keep binding cleared. */;
6262 else if (b)
6263 {
6264 /* Initialize binding for this context. */
6265 binding.value = BINDING_VALUE (b);
6266 binding.type = BINDING_TYPE (b);
6267 }
6268
6269 /* Add all _DECLs seen through local using-directives. */
6270 for (level = current_binding_level;
6271 !level->namespace_p;
6272 level = level->level_chain)
6273 if (!lookup_using_namespace (name, &binding, level->using_directives,
6274 scope, flags, spacesp))
6275 /* Give up because of error. */
6276 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6277
6278 /* Add all _DECLs seen through global using-directives. */
6279 /* XXX local and global using lists should work equally. */
6280 siter = initial;
6281 while (1)
6282 {
6283 if (!lookup_using_namespace (name, &binding,
6284 DECL_NAMESPACE_USING (siter),
6285 scope, flags, spacesp))
6286 /* Give up because of error. */
6287 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6288 if (siter == scope) break;
6289 siter = CP_DECL_CONTEXT (siter);
6290 }
6291
6292 val = select_decl (&binding, flags);
6293 if (scope == global_namespace)
6294 break;
6295 }
6296 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
6297 }
6298
6299 /* Combine prefer_type and namespaces_only into flags. */
6300
6301 static int
lookup_flags(prefer_type,namespaces_only)6302 lookup_flags (prefer_type, namespaces_only)
6303 int prefer_type, namespaces_only;
6304 {
6305 if (namespaces_only)
6306 return LOOKUP_PREFER_NAMESPACES;
6307 if (prefer_type > 1)
6308 return LOOKUP_PREFER_TYPES;
6309 if (prefer_type > 0)
6310 return LOOKUP_PREFER_BOTH;
6311 return 0;
6312 }
6313
6314 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
6315 ignore it or not. Subroutine of lookup_name_real. */
6316
6317 static tree
qualify_lookup(val,flags)6318 qualify_lookup (val, flags)
6319 tree val;
6320 int flags;
6321 {
6322 if (val == NULL_TREE)
6323 return val;
6324 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
6325 return val;
6326 if ((flags & LOOKUP_PREFER_TYPES)
6327 && (TREE_CODE (val) == TYPE_DECL
6328 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
6329 && DECL_CLASS_TEMPLATE_P (val))))
6330 return val;
6331 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
6332 return NULL_TREE;
6333 return val;
6334 }
6335
6336 /* Any other BINDING overrides an implicit TYPENAME. Warn about
6337 that. */
6338
6339 static void
warn_about_implicit_typename_lookup(typename,binding)6340 warn_about_implicit_typename_lookup (typename, binding)
6341 tree typename;
6342 tree binding;
6343 {
6344 tree subtype = TREE_TYPE (TREE_TYPE (typename));
6345 tree name = DECL_NAME (typename);
6346
6347 if (! (TREE_CODE (binding) == TEMPLATE_DECL
6348 && CLASS_TYPE_P (subtype)
6349 && CLASSTYPE_TEMPLATE_INFO (subtype)
6350 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
6351 && ! (TREE_CODE (binding) == TYPE_DECL
6352 && same_type_p (TREE_TYPE (binding), subtype)))
6353 {
6354 warning ("lookup of `%D' finds `%#D'",
6355 name, binding);
6356 warning (" instead of `%D' from dependent base class",
6357 typename);
6358 warning (" (use `typename %T::%D' if that's what you meant)",
6359 constructor_name (current_class_type), name);
6360 }
6361 }
6362
6363 /* Check to see whether or not DECL is a variable that would have been
6364 in scope under the ARM, but is not in scope under the ANSI/ISO
6365 standard. If so, issue an error message. If name lookup would
6366 work in both cases, but return a different result, this function
6367 returns the result of ANSI/ISO lookup. Otherwise, it returns
6368 DECL. */
6369
6370 tree
check_for_out_of_scope_variable(tree decl)6371 check_for_out_of_scope_variable (tree decl)
6372 {
6373 tree shadowed;
6374
6375 /* We only care about out of scope variables. */
6376 if (!(TREE_CODE (decl) == VAR_DECL && DECL_DEAD_FOR_LOCAL (decl)))
6377 return decl;
6378
6379 shadowed = DECL_SHADOWED_FOR_VAR (decl);
6380 while (shadowed != NULL_TREE && TREE_CODE (shadowed) == VAR_DECL
6381 && DECL_DEAD_FOR_LOCAL (shadowed))
6382 shadowed = DECL_SHADOWED_FOR_VAR (shadowed);
6383 if (!shadowed)
6384 shadowed = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (decl));
6385 if (shadowed)
6386 {
6387 if (!DECL_ERROR_REPORTED (decl))
6388 {
6389 warning ("name lookup of `%D' changed",
6390 DECL_NAME (decl));
6391 cp_warning_at (" matches this `%D' under ISO standard rules",
6392 shadowed);
6393 cp_warning_at (" matches this `%D' under old rules", decl);
6394 DECL_ERROR_REPORTED (decl) = 1;
6395 }
6396 return shadowed;
6397 }
6398
6399 /* If we have already complained about this declaration, there's no
6400 need to do it again. */
6401 if (DECL_ERROR_REPORTED (decl))
6402 return decl;
6403
6404 DECL_ERROR_REPORTED (decl) = 1;
6405 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6406 {
6407 error ("name lookup of `%D' changed for new ISO `for' scoping",
6408 DECL_NAME (decl));
6409 cp_error_at (" cannot use obsolete binding at `%D' because it has a destructor", decl);
6410 return error_mark_node;
6411 }
6412 else
6413 {
6414 pedwarn ("name lookup of `%D' changed for new ISO `for' scoping",
6415 DECL_NAME (decl));
6416 cp_pedwarn_at (" using obsolete binding at `%D'", decl);
6417 }
6418
6419 return decl;
6420 }
6421
6422 /* Look up NAME in the current binding level and its superiors in the
6423 namespace of variables, functions and typedefs. Return a ..._DECL
6424 node of some kind representing its definition if there is only one
6425 such declaration, or return a TREE_LIST with all the overloaded
6426 definitions if there are many, or return 0 if it is undefined.
6427
6428 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
6429 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
6430 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
6431 Otherwise we prefer non-TYPE_DECLs.
6432
6433 If NONCLASS is nonzero, we don't look for the NAME in class scope,
6434 using IDENTIFIER_CLASS_VALUE. */
6435
6436 static tree
lookup_name_real(name,prefer_type,nonclass,namespaces_only)6437 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
6438 tree name;
6439 int prefer_type, nonclass, namespaces_only;
6440 {
6441 tree t;
6442 tree val = NULL_TREE;
6443 int yylex = 0;
6444 tree from_obj = NULL_TREE;
6445 int flags;
6446 int val_is_implicit_typename = 0;
6447 cxx_binding *iter;
6448
6449 timevar_push (TV_NAME_LOOKUP);
6450
6451 /* Hack: copy flag set by parser, if set. */
6452 if (only_namespace_names)
6453 namespaces_only = 1;
6454
6455 if (prefer_type == -2)
6456 {
6457 extern int looking_for_typename;
6458 tree type = NULL_TREE;
6459
6460 yylex = 1;
6461 prefer_type = looking_for_typename;
6462
6463 flags = lookup_flags (prefer_type, namespaces_only);
6464 /* If the next thing is '<', class templates are types. */
6465 if (looking_for_template)
6466 flags |= LOOKUP_TEMPLATES_EXPECTED;
6467
6468 if (got_scope)
6469 type = got_scope;
6470 else if (got_object != error_mark_node)
6471 type = got_object;
6472
6473 if (type)
6474 {
6475 if (type == error_mark_node)
6476 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6477 if (IMPLICIT_TYPENAME_P (type))
6478 type = TREE_TYPE (type);
6479
6480 if (TYPE_P (type))
6481 type = complete_type (type);
6482
6483 if (TREE_CODE (type) == VOID_TYPE)
6484 type = global_namespace;
6485 if (TREE_CODE (type) == NAMESPACE_DECL)
6486 {
6487 cxx_binding b;
6488 cxx_binding_clear (&b);
6489 flags |= LOOKUP_COMPLAIN;
6490 if (!qualified_lookup_using_namespace (name, type, &b, flags))
6491 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
6492 val = select_decl (&b, flags);
6493 }
6494 else if (! IS_AGGR_TYPE (type)
6495 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
6496 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
6497 || TREE_CODE (type) == TYPENAME_TYPE)
6498 /* Someone else will give an error about this if needed. */
6499 val = NULL_TREE;
6500 else if (type == current_class_type)
6501 val = IDENTIFIER_CLASS_VALUE (name);
6502 else
6503 {
6504 val = lookup_member (type, name, 0, prefer_type);
6505 if (!uses_template_parms (type))
6506 type_access_control (type, val);
6507
6508 /* Restore the containing TYPENAME_TYPE if we looked
6509 through it before. */
6510 if (got_scope && got_scope != type
6511 && val && TREE_CODE (val) == TYPE_DECL
6512 && TREE_CODE (TREE_TYPE (val)) == TYPENAME_TYPE)
6513 {
6514 val = TREE_TYPE (val);
6515 val = build_typename_type (got_scope, name,
6516 TYPENAME_TYPE_FULLNAME (val),
6517 TREE_TYPE (val));
6518 val = TYPE_STUB_DECL (val);
6519 }
6520 }
6521 }
6522 else
6523 val = NULL_TREE;
6524
6525 if (got_scope)
6526 goto done;
6527 else if (got_object && val)
6528 {
6529 from_obj = val;
6530 val = NULL_TREE;
6531 }
6532 }
6533 else
6534 {
6535 flags = lookup_flags (prefer_type, namespaces_only);
6536 /* If we're not parsing, we need to complain. */
6537 flags |= LOOKUP_COMPLAIN;
6538 }
6539
6540 /* Conversion operators are handled specially because ordinary
6541 unqualified name lookup will not find template conversion
6542 operators. */
6543 if (IDENTIFIER_TYPENAME_P (name))
6544 {
6545 struct cp_binding_level *level;
6546
6547 for (level = current_binding_level;
6548 level && !level->namespace_p;
6549 level = level->level_chain)
6550 {
6551 tree class_type;
6552 tree operators;
6553
6554 /* A conversion operator can only be declared in a class
6555 scope. */
6556 if (level->parm_flag != 2)
6557 continue;
6558
6559 /* Lookup the conversion operator in the class. */
6560 class_type = level->this_class;
6561 operators = lookup_fnfields (class_type, name, /*protect=*/0);
6562 if (operators)
6563 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, operators);
6564 }
6565
6566 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
6567 }
6568
6569 /* First, look in non-namespace scopes. */
6570
6571 if (current_class_type == NULL_TREE)
6572 nonclass = 1;
6573
6574 for (iter = IDENTIFIER_BINDING (name); iter; iter = iter->previous)
6575 {
6576 tree binding;
6577
6578 if (!LOCAL_BINDING_P (iter) && nonclass)
6579 /* We're not looking for class-scoped bindings, so keep going. */
6580 continue;
6581
6582 /* If this is the kind of thing we're looking for, we're done. */
6583 if (qualify_lookup (BINDING_VALUE (iter), flags))
6584 binding = BINDING_VALUE (iter);
6585 else if ((flags & LOOKUP_PREFER_TYPES)
6586 && qualify_lookup (BINDING_TYPE (iter), flags))
6587 binding = BINDING_TYPE (iter);
6588 else
6589 binding = NULL_TREE;
6590
6591 /* Handle access control on types from enclosing or base classes. */
6592 if (binding && ! yylex
6593 && BINDING_LEVEL (iter) && BINDING_LEVEL (iter)->parm_flag == 2)
6594 type_access_control (BINDING_LEVEL (iter)->this_class, binding);
6595
6596 if (binding
6597 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
6598 {
6599 if (val_is_implicit_typename && !yylex)
6600 warn_about_implicit_typename_lookup (val, binding);
6601 val = binding;
6602 val_is_implicit_typename
6603 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
6604 if (!val_is_implicit_typename)
6605 break;
6606 }
6607 }
6608
6609 /* The name might be from an enclosing class of the current scope. */
6610 if (!val && !nonclass && current_class_type)
6611 val = qualify_lookup (lookup_nested_field (name, !yylex), flags);
6612
6613 /* Now lookup in namespace scopes. */
6614 if (!val || val_is_implicit_typename)
6615 {
6616 t = unqualified_namespace_lookup (name, flags, 0);
6617 if (t)
6618 {
6619 if (val_is_implicit_typename && !yylex)
6620 warn_about_implicit_typename_lookup (val, t);
6621 val = t;
6622 }
6623 }
6624
6625 done:
6626 if (val)
6627 {
6628 /* This should only warn about types used in qualified-ids. */
6629 if (from_obj && from_obj != val)
6630 {
6631 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
6632 && TREE_CODE (val) == TYPE_DECL
6633 && ! same_type_p (TREE_TYPE (from_obj), TREE_TYPE (val)))
6634 pedwarn ("\
6635 lookup of `%D' in the scope of `%#T' (`%#D') \
6636 does not match lookup in the current scope (`%#D')",
6637 name, got_object, from_obj, val);
6638
6639 /* We don't change val to from_obj if got_object depends on
6640 template parms because that breaks implicit typename for
6641 destructor calls. */
6642 if (! uses_template_parms (got_object))
6643 val = from_obj;
6644 }
6645
6646 /* If we have a single function from a using decl, pull it out. */
6647 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
6648 val = OVL_FUNCTION (val);
6649 }
6650 else if (from_obj)
6651 val = from_obj;
6652
6653 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
6654 }
6655
6656 tree
lookup_name_nonclass(name)6657 lookup_name_nonclass (name)
6658 tree name;
6659 {
6660 return lookup_name_real (name, 0, 1, 0);
6661 }
6662
6663 tree
lookup_function_nonclass(name,args)6664 lookup_function_nonclass (name, args)
6665 tree name;
6666 tree args;
6667 {
6668 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
6669 }
6670
6671 tree
lookup_name_namespace_only(name)6672 lookup_name_namespace_only (name)
6673 tree name;
6674 {
6675 /* type-or-namespace, nonclass, namespace_only */
6676 return lookup_name_real (name, 1, 1, 1);
6677 }
6678
6679 tree
lookup_name(name,prefer_type)6680 lookup_name (name, prefer_type)
6681 tree name;
6682 int prefer_type;
6683 {
6684 return lookup_name_real (name, prefer_type, 0, 0);
6685 }
6686
6687 /* Similar to `lookup_name' but look only in the innermost non-class
6688 binding level. */
6689
6690 tree
lookup_name_current_level(name)6691 lookup_name_current_level (name)
6692 tree name;
6693 {
6694 struct cp_binding_level *b;
6695 tree t = NULL_TREE;
6696
6697 timevar_push (TV_NAME_LOOKUP);
6698
6699 b = current_binding_level;
6700 while (b->parm_flag == 2)
6701 b = b->level_chain;
6702
6703 if (b->namespace_p)
6704 {
6705 t = IDENTIFIER_NAMESPACE_VALUE (name);
6706
6707 /* extern "C" function() */
6708 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
6709 t = TREE_VALUE (t);
6710 }
6711 else if (IDENTIFIER_BINDING (name)
6712 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
6713 {
6714 while (1)
6715 {
6716 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6717 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, IDENTIFIER_VALUE (name));
6718
6719 if (b->keep == 2)
6720 b = b->level_chain;
6721 else
6722 break;
6723 }
6724 }
6725
6726 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
6727 }
6728
6729 /* Like lookup_name_current_level, but for types. */
6730
6731 tree
lookup_type_current_level(name)6732 lookup_type_current_level (name)
6733 tree name;
6734 {
6735 register tree t = NULL_TREE;
6736
6737 timevar_push (TV_NAME_LOOKUP);
6738
6739 my_friendly_assert (! current_binding_level->namespace_p, 980716);
6740
6741 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6742 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6743 {
6744 struct cp_binding_level *b = current_binding_level;
6745 while (1)
6746 {
6747 if (purpose_member (name, b->type_shadowed))
6748 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
6749 REAL_IDENTIFIER_TYPE_VALUE (name));
6750 if (b->keep == 2)
6751 b = b->level_chain;
6752 else
6753 break;
6754 }
6755 }
6756
6757 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
6758 }
6759
6760 void
begin_only_namespace_names()6761 begin_only_namespace_names ()
6762 {
6763 only_namespace_names = 1;
6764 }
6765
6766 void
end_only_namespace_names()6767 end_only_namespace_names ()
6768 {
6769 only_namespace_names = 0;
6770 }
6771
6772 /* Push the declarations of builtin types into the namespace.
6773 RID_INDEX is the index of the builtin type
6774 in the array RID_POINTERS. NAME is the name used when looking
6775 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6776
6777 void
record_builtin_type(rid_index,name,type)6778 record_builtin_type (rid_index, name, type)
6779 enum rid rid_index;
6780 const char *name;
6781 tree type;
6782 {
6783 tree rname = NULL_TREE, tname = NULL_TREE;
6784 tree tdecl = NULL_TREE;
6785
6786 if ((int) rid_index < (int) RID_MAX)
6787 rname = ridpointers[(int) rid_index];
6788 if (name)
6789 tname = get_identifier (name);
6790
6791 TYPE_BUILT_IN (type) = 1;
6792
6793 if (tname)
6794 {
6795 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
6796 set_identifier_type_value (tname, NULL_TREE);
6797 if ((int) rid_index < (int) RID_MAX)
6798 /* Built-in types live in the global namespace. */
6799 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
6800 }
6801 if (rname != NULL_TREE)
6802 {
6803 if (tname != NULL_TREE)
6804 {
6805 set_identifier_type_value (rname, NULL_TREE);
6806 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
6807 }
6808 else
6809 {
6810 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
6811 set_identifier_type_value (rname, NULL_TREE);
6812 }
6813 }
6814 }
6815
6816 /* Record one of the standard Java types.
6817 * Declare it as having the given NAME.
6818 * If SIZE > 0, it is the size of one of the integral types;
6819 * otherwise it is the negative of the size of one of the other types. */
6820
6821 static tree
record_builtin_java_type(name,size)6822 record_builtin_java_type (name, size)
6823 const char *name;
6824 int size;
6825 {
6826 tree type, decl;
6827 if (size > 0)
6828 type = make_signed_type (size);
6829 else if (size > -32)
6830 { /* "__java_char" or ""__java_boolean". */
6831 type = make_unsigned_type (-size);
6832 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6833 }
6834 else
6835 { /* "__java_float" or ""__java_double". */
6836 type = make_node (REAL_TYPE);
6837 TYPE_PRECISION (type) = - size;
6838 layout_type (type);
6839 }
6840 record_builtin_type (RID_MAX, name, type);
6841 decl = TYPE_NAME (type);
6842
6843 /* Suppress generate debug symbol entries for these types,
6844 since for normal C++ they are just clutter.
6845 However, push_lang_context undoes this if extern "Java" is seen. */
6846 DECL_IGNORED_P (decl) = 1;
6847
6848 TYPE_FOR_JAVA (type) = 1;
6849 return type;
6850 }
6851
6852 /* Push a type into the namespace so that the back-ends ignore it. */
6853
6854 static void
record_unknown_type(type,name)6855 record_unknown_type (type, name)
6856 tree type;
6857 const char *name;
6858 {
6859 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6860 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6861 DECL_IGNORED_P (decl) = 1;
6862 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6863 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6864 TYPE_ALIGN (type) = 1;
6865 TYPE_USER_ALIGN (type) = 0;
6866 TYPE_MODE (type) = TYPE_MODE (void_type_node);
6867 }
6868
6869 /* An string for which we should create an IDENTIFIER_NODE at
6870 startup. */
6871
6872 typedef struct predefined_identifier
6873 {
6874 /* The name of the identifier. */
6875 const char *const name;
6876 /* The place where the IDENTIFIER_NODE should be stored. */
6877 tree *const node;
6878 /* Nonzero if this is the name of a constructor or destructor. */
6879 const int ctor_or_dtor_p;
6880 } predefined_identifier;
6881
6882 /* Create all the predefined identifiers. */
6883
6884 static void
initialize_predefined_identifiers()6885 initialize_predefined_identifiers ()
6886 {
6887 const predefined_identifier *pid;
6888
6889 /* A table of identifiers to create at startup. */
6890 static const predefined_identifier predefined_identifiers[] = {
6891 { "C++", &lang_name_cplusplus, 0 },
6892 { "C", &lang_name_c, 0 },
6893 { "Java", &lang_name_java, 0 },
6894 { CTOR_NAME, &ctor_identifier, 1 },
6895 { "__base_ctor", &base_ctor_identifier, 1 },
6896 { "__comp_ctor", &complete_ctor_identifier, 1 },
6897 { DTOR_NAME, &dtor_identifier, 1 },
6898 { "__comp_dtor", &complete_dtor_identifier, 1 },
6899 { "__base_dtor", &base_dtor_identifier, 1 },
6900 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6901 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6902 { "nelts", &nelts_identifier, 0 },
6903 { THIS_NAME, &this_identifier, 0 },
6904 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6905 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6906 { "_vptr", &vptr_identifier, 0 },
6907 { "__vtt_parm", &vtt_parm_identifier, 0 },
6908 { "std", &std_identifier, 0 },
6909 { NULL, NULL, 0 }
6910 };
6911
6912 for (pid = predefined_identifiers; pid->name; ++pid)
6913 {
6914 *pid->node = get_identifier (pid->name);
6915 if (pid->ctor_or_dtor_p)
6916 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6917 }
6918 }
6919
6920 /* Create the predefined scalar types of C,
6921 and some nodes representing standard constants (0, 1, (void *)0).
6922 Initialize the global binding level.
6923 Make definitions for built-in primitive functions. */
6924
6925 void
cxx_init_decl_processing()6926 cxx_init_decl_processing ()
6927 {
6928 tree void_ftype;
6929 tree void_ftype_ptr;
6930
6931 /* Create all the identifiers we need. */
6932 initialize_predefined_identifiers ();
6933
6934 /* Fill in back-end hooks. */
6935 lang_missing_noreturn_ok_p = &cp_missing_noreturn_ok_p;
6936
6937 /* Create the global variables. */
6938 push_to_top_level ();
6939
6940 /* Enter the global namespace. */
6941 my_friendly_assert (global_namespace == NULL_TREE, 375);
6942 push_namespace (get_identifier ("::"));
6943 global_namespace = current_namespace;
6944 current_lang_name = NULL_TREE;
6945
6946 /* Adjust various flags based on command-line settings. */
6947 if (!flag_permissive)
6948 flag_pedantic_errors = 1;
6949 if (!flag_no_inline)
6950 {
6951 flag_inline_trees = 1;
6952 flag_no_inline = 1;
6953 }
6954 if (flag_inline_functions)
6955 {
6956 flag_inline_trees = 2;
6957 flag_inline_functions = 0;
6958 }
6959
6960 /* Force minimum function alignment if using the least significant
6961 bit of function pointers to store the virtual bit. */
6962 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6963 && force_align_functions_log < 1)
6964 force_align_functions_log = 1;
6965
6966 /* Initially, C. */
6967 current_lang_name = lang_name_c;
6968
6969 current_function_decl = NULL_TREE;
6970 current_binding_level = NULL_BINDING_LEVEL;
6971 free_binding_level = NULL_BINDING_LEVEL;
6972
6973 build_common_tree_nodes (flag_signed_char);
6974
6975 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6976 TREE_TYPE (error_mark_list) = error_mark_node;
6977
6978 /* Make the binding_level structure for global names. */
6979 pushlevel (0);
6980 current_binding_level->type_decls = binding_table_new (GLOBAL_SCOPE_HT_SIZE);
6981 /* The global level is the namespace level of ::. */
6982 NAMESPACE_LEVEL (global_namespace) = current_binding_level;
6983 declare_namespace_level ();
6984
6985 VARRAY_TREE_INIT (current_binding_level->static_decls,
6986 200,
6987 "Static declarations");
6988
6989 /* Create the `std' namespace. */
6990 push_namespace (std_identifier);
6991 std_node = current_namespace;
6992 pop_namespace ();
6993
6994 c_common_nodes_and_builtins ();
6995
6996 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6997 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6998 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6999 java_long_type_node = record_builtin_java_type ("__java_long", 64);
7000 java_float_type_node = record_builtin_java_type ("__java_float", -32);
7001 java_double_type_node = record_builtin_java_type ("__java_double", -64);
7002 java_char_type_node = record_builtin_java_type ("__java_char", -16);
7003 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
7004
7005 integer_two_node = build_int_2 (2, 0);
7006 TREE_TYPE (integer_two_node) = integer_type_node;
7007 integer_three_node = build_int_2 (3, 0);
7008 TREE_TYPE (integer_three_node) = integer_type_node;
7009
7010 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
7011 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
7012 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
7013 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
7014 TYPE_PRECISION (boolean_type_node) = 1;
7015 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
7016 boolean_false_node = build_int_2 (0, 0);
7017 TREE_TYPE (boolean_false_node) = boolean_type_node;
7018 boolean_true_node = build_int_2 (1, 0);
7019 TREE_TYPE (boolean_true_node) = boolean_type_node;
7020
7021 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
7022
7023 #if 0
7024 record_builtin_type (RID_MAX, NULL, string_type_node);
7025 #endif
7026
7027 delta_type_node = ptrdiff_type_node;
7028 vtable_index_type = ptrdiff_type_node;
7029
7030 vtt_parm_type = build_pointer_type (const_ptr_type_node);
7031 void_ftype = build_function_type (void_type_node, void_list_node);
7032 void_ftype_ptr = build_function_type (void_type_node,
7033 tree_cons (NULL_TREE,
7034 ptr_type_node,
7035 void_list_node));
7036 void_ftype_ptr
7037 = build_exception_variant (void_ftype_ptr, empty_except_spec);
7038
7039 /* C++ extensions */
7040
7041 unknown_type_node = make_node (UNKNOWN_TYPE);
7042 record_unknown_type (unknown_type_node, "unknown type");
7043
7044 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
7045 TREE_TYPE (unknown_type_node) = unknown_type_node;
7046
7047 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
7048 result. */
7049 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
7050 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
7051
7052 {
7053 /* Make sure we get a unique function type, so we can give
7054 its pointer type a name. (This wins for gdb.) */
7055 tree vfunc_type = make_node (FUNCTION_TYPE);
7056 TREE_TYPE (vfunc_type) = integer_type_node;
7057 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
7058 layout_type (vfunc_type);
7059
7060 vtable_entry_type = build_pointer_type (vfunc_type);
7061 }
7062 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
7063
7064 vtbl_type_node
7065 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
7066 layout_type (vtbl_type_node);
7067 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
7068 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
7069 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
7070 layout_type (vtbl_ptr_type_node);
7071 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
7072
7073 push_namespace (get_identifier ("__cxxabiv1"));
7074 abi_node = current_namespace;
7075 pop_namespace ();
7076
7077 global_type_node = make_node (LANG_TYPE);
7078 record_unknown_type (global_type_node, "global type");
7079
7080 /* Now, C++. */
7081 current_lang_name = lang_name_cplusplus;
7082
7083 {
7084 tree bad_alloc_type_node, newtype, deltype;
7085 tree ptr_ftype_sizetype;
7086
7087 push_namespace (std_identifier);
7088 bad_alloc_type_node
7089 = xref_tag (class_type, get_identifier ("bad_alloc"),
7090 /*attributes=*/NULL_TREE, 1);
7091 pop_namespace ();
7092 ptr_ftype_sizetype
7093 = build_function_type (ptr_type_node,
7094 tree_cons (NULL_TREE,
7095 size_type_node,
7096 void_list_node));
7097 newtype = build_exception_variant
7098 (ptr_ftype_sizetype, add_exception_specifier
7099 (NULL_TREE, bad_alloc_type_node, -1));
7100 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
7101 push_cp_library_fn (NEW_EXPR, newtype);
7102 push_cp_library_fn (VEC_NEW_EXPR, newtype);
7103 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
7104 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
7105 }
7106
7107 abort_fndecl
7108 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
7109
7110 /* Perform other language dependent initializations. */
7111 init_class_processing ();
7112 init_search_processing ();
7113 init_rtti_processing ();
7114
7115 if (flag_exceptions)
7116 init_exception_processing ();
7117
7118 if (! supports_one_only ())
7119 flag_weak = 0;
7120
7121 make_fname_decl = cp_make_fname_decl;
7122 start_fname_decls ();
7123
7124 /* Show we use EH for cleanups. */
7125 using_eh_for_cleanups ();
7126
7127 /* Maintain consistency. Perhaps we should just complain if they
7128 say -fwritable-strings? */
7129 if (flag_writable_strings)
7130 flag_const_strings = 0;
7131 }
7132
7133 /* Generate an initializer for a function naming variable from
7134 NAME. NAME may be NULL, in which case we generate a special
7135 ERROR_MARK node which should be replaced later. */
7136
7137 tree
cp_fname_init(name)7138 cp_fname_init (name)
7139 const char *name;
7140 {
7141 tree domain = NULL_TREE;
7142 tree type;
7143 tree init = NULL_TREE;
7144 size_t length = 0;
7145
7146 if (name)
7147 {
7148 length = strlen (name);
7149 domain = build_index_type (size_int (length));
7150 init = build_string (length + 1, name);
7151 }
7152
7153 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
7154 type = build_cplus_array_type (type, domain);
7155
7156 if (init)
7157 TREE_TYPE (init) = type;
7158 else
7159 /* We don't know the value until instantiation time. Make
7160 something which will be digested now, but replaced later. */
7161 init = build (ERROR_MARK, type);
7162
7163 return init;
7164 }
7165
7166 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
7167 decl, NAME is the initialization string and TYPE_DEP indicates whether
7168 NAME depended on the type of the function. We make use of that to detect
7169 __PRETTY_FUNCTION__ inside a template fn. This is being done
7170 lazily at the point of first use, so we musn't push the decl now. */
7171
7172 static tree
cp_make_fname_decl(id,type_dep)7173 cp_make_fname_decl (id, type_dep)
7174 tree id;
7175 int type_dep;
7176 {
7177 const char *const name = (type_dep && processing_template_decl
7178 ? NULL : fname_as_string (type_dep));
7179 tree init = cp_fname_init (name);
7180 tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init));
7181
7182 /* As we don't push the decl here, we must set the context. */
7183 DECL_CONTEXT (decl) = current_function_decl;
7184 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
7185
7186 TREE_STATIC (decl) = 1;
7187 TREE_READONLY (decl) = 1;
7188 DECL_ARTIFICIAL (decl) = 1;
7189 DECL_INITIAL (decl) = init;
7190
7191 TREE_USED (decl) = 1;
7192
7193 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
7194
7195 return decl;
7196 }
7197
7198 /* Make a definition for a builtin function named NAME in the current
7199 namespace, whose data type is TYPE and whose context is CONTEXT.
7200 TYPE should be a function type with argument types.
7201
7202 CLASS and CODE tell later passes how to compile calls to this function.
7203 See tree.h for possible values.
7204
7205 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
7206 the name to be called if we can't opencode the function.
7207 If ATTRS is nonzero, use that for the function's attribute
7208 list. */
7209
7210 static tree
builtin_function_1(name,type,context,code,class,libname,attrs)7211 builtin_function_1 (name, type, context, code, class, libname, attrs)
7212 const char *name;
7213 tree type;
7214 tree context;
7215 int code;
7216 enum built_in_class class;
7217 const char *libname;
7218 tree attrs;
7219 {
7220 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
7221 DECL_BUILT_IN_CLASS (decl) = class;
7222 DECL_FUNCTION_CODE (decl) = code;
7223 DECL_CONTEXT (decl) = context;
7224
7225 pushdecl (decl);
7226
7227 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
7228 we cannot change DECL_ASSEMBLER_NAME until we have installed this
7229 function in the namespace. */
7230 if (libname)
7231 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
7232 make_decl_rtl (decl, NULL);
7233
7234 /* Warn if a function in the namespace for users
7235 is used without an occasion to consider it declared. */
7236 if (name[0] != '_' || name[1] != '_')
7237 DECL_ANTICIPATED (decl) = 1;
7238
7239 /* Possibly apply some default attributes to this built-in function. */
7240 if (attrs)
7241 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
7242 else
7243 decl_attributes (&decl, NULL_TREE, 0);
7244
7245 return decl;
7246 }
7247
7248 /* Entry point for the benefit of c_common_nodes_and_builtins.
7249
7250 Make a defintion for a builtin function named NAME and whose data type
7251 is TYPE. TYPE should be a function type with argument types. This
7252 function places the anticipated declaration in the global namespace
7253 and additionally in the std namespace if appropriate.
7254
7255 CLASS and CODE tell later passes how to compile calls to this function.
7256 See tree.h for possible values.
7257
7258 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
7259 the name to be called if we can't opencode the function.
7260
7261 If ATTRS is nonzero, use that for the function's attribute
7262 list. */
7263
7264 tree
builtin_function(name,type,code,class,libname,attrs)7265 builtin_function (name, type, code, class, libname, attrs)
7266 const char *name;
7267 tree type;
7268 int code;
7269 enum built_in_class class;
7270 const char *libname;
7271 tree attrs;
7272 {
7273 /* All builtins that don't begin with an '_' should additionally
7274 go in the 'std' namespace. */
7275 if (name[0] != '_')
7276 {
7277 push_namespace (std_identifier);
7278 builtin_function_1 (name, type, std_node, code, class, libname, attrs);
7279 pop_namespace ();
7280 }
7281
7282 return builtin_function_1 (name, type, NULL_TREE, code,
7283 class, libname, attrs);
7284 }
7285
7286 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
7287 function. Not called directly. */
7288
7289 static tree
build_library_fn_1(name,operator_code,type)7290 build_library_fn_1 (name, operator_code, type)
7291 tree name;
7292 enum tree_code operator_code;
7293 tree type;
7294 {
7295 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
7296 DECL_EXTERNAL (fn) = 1;
7297 TREE_PUBLIC (fn) = 1;
7298 DECL_ARTIFICIAL (fn) = 1;
7299 TREE_NOTHROW (fn) = 1;
7300 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
7301 SET_DECL_LANGUAGE (fn, lang_c);
7302 return fn;
7303 }
7304
7305 /* Returns the _DECL for a library function with C linkage.
7306 We assume that such functions never throw; if this is incorrect,
7307 callers should unset TREE_NOTHROW. */
7308
7309 tree
build_library_fn(name,type)7310 build_library_fn (name, type)
7311 tree name;
7312 tree type;
7313 {
7314 return build_library_fn_1 (name, ERROR_MARK, type);
7315 }
7316
7317 /* Returns the _DECL for a library function with C++ linkage. */
7318
7319 static tree
build_cp_library_fn(name,operator_code,type)7320 build_cp_library_fn (name, operator_code, type)
7321 tree name;
7322 enum tree_code operator_code;
7323 tree type;
7324 {
7325 tree fn = build_library_fn_1 (name, operator_code, type);
7326 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
7327 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
7328 SET_DECL_LANGUAGE (fn, lang_cplusplus);
7329 set_mangled_name_for_decl (fn);
7330 return fn;
7331 }
7332
7333 /* Like build_library_fn, but takes a C string instead of an
7334 IDENTIFIER_NODE. */
7335
7336 tree
build_library_fn_ptr(name,type)7337 build_library_fn_ptr (name, type)
7338 const char *name;
7339 tree type;
7340 {
7341 return build_library_fn (get_identifier (name), type);
7342 }
7343
7344 /* Like build_cp_library_fn, but takes a C string instead of an
7345 IDENTIFIER_NODE. */
7346
7347 tree
build_cp_library_fn_ptr(name,type)7348 build_cp_library_fn_ptr (name, type)
7349 const char *name;
7350 tree type;
7351 {
7352 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
7353 }
7354
7355 /* Like build_library_fn, but also pushes the function so that we will
7356 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
7357
7358 tree
push_library_fn(name,type)7359 push_library_fn (name, type)
7360 tree name, type;
7361 {
7362 tree fn = build_library_fn (name, type);
7363 pushdecl_top_level (fn);
7364 return fn;
7365 }
7366
7367 /* Like build_cp_library_fn, but also pushes the function so that it
7368 will be found by normal lookup. */
7369
7370 static tree
push_cp_library_fn(operator_code,type)7371 push_cp_library_fn (operator_code, type)
7372 enum tree_code operator_code;
7373 tree type;
7374 {
7375 tree fn = build_cp_library_fn (ansi_opname (operator_code),
7376 operator_code,
7377 type);
7378 pushdecl (fn);
7379 return fn;
7380 }
7381
7382 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
7383 a FUNCTION_TYPE. */
7384
7385 tree
push_void_library_fn(name,parmtypes)7386 push_void_library_fn (name, parmtypes)
7387 tree name, parmtypes;
7388 {
7389 tree type = build_function_type (void_type_node, parmtypes);
7390 return push_library_fn (name, type);
7391 }
7392
7393 /* Like push_library_fn, but also note that this function throws
7394 and does not return. Used for __throw_foo and the like. */
7395
7396 tree
push_throw_library_fn(name,type)7397 push_throw_library_fn (name, type)
7398 tree name, type;
7399 {
7400 tree fn = push_library_fn (name, type);
7401 TREE_THIS_VOLATILE (fn) = 1;
7402 TREE_NOTHROW (fn) = 0;
7403 return fn;
7404 }
7405
7406 /* Apply default attributes to a function, if a system function with default
7407 attributes. */
7408
7409 void
cxx_insert_default_attributes(decl)7410 cxx_insert_default_attributes (decl)
7411 tree decl;
7412 {
7413 if (!DECL_EXTERN_C_FUNCTION_P (decl))
7414 return;
7415 if (!TREE_PUBLIC (decl))
7416 return;
7417 c_common_insert_default_attributes (decl);
7418 }
7419
7420 /* When we call finish_struct for an anonymous union, we create
7421 default copy constructors and such. But, an anonymous union
7422 shouldn't have such things; this function undoes the damage to the
7423 anonymous union type T.
7424
7425 (The reason that we create the synthesized methods is that we don't
7426 distinguish `union { int i; }' from `typedef union { int i; } U'.
7427 The first is an anonymous union; the second is just an ordinary
7428 union type.) */
7429
7430 void
fixup_anonymous_aggr(t)7431 fixup_anonymous_aggr (t)
7432 tree t;
7433 {
7434 tree *q;
7435
7436 /* Wipe out memory of synthesized methods */
7437 TYPE_HAS_CONSTRUCTOR (t) = 0;
7438 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
7439 TYPE_HAS_INIT_REF (t) = 0;
7440 TYPE_HAS_CONST_INIT_REF (t) = 0;
7441 TYPE_HAS_ASSIGN_REF (t) = 0;
7442 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
7443
7444 /* Splice the implicitly generated functions out of the TYPE_METHODS
7445 list. */
7446 q = &TYPE_METHODS (t);
7447 while (*q)
7448 {
7449 if (DECL_ARTIFICIAL (*q))
7450 *q = TREE_CHAIN (*q);
7451 else
7452 q = &TREE_CHAIN (*q);
7453 }
7454
7455 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
7456 if (TYPE_METHODS (t))
7457 cp_error_at ("an anonymous union cannot have function members", t);
7458
7459 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
7460 assignment operators (because they cannot have these methods themselves).
7461 For anonymous unions this is already checked because they are not allowed
7462 in any union, otherwise we have to check it. */
7463 if (TREE_CODE (t) != UNION_TYPE)
7464 {
7465 tree field, type;
7466
7467 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
7468 if (TREE_CODE (field) == FIELD_DECL)
7469 {
7470 type = TREE_TYPE (field);
7471 if (CLASS_TYPE_P (type))
7472 {
7473 if (TYPE_NEEDS_CONSTRUCTING (type))
7474 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
7475 field);
7476 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7477 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
7478 field);
7479 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
7480 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
7481 field);
7482 }
7483 }
7484 }
7485 }
7486
7487 /* Make sure that a declaration with no declarator is well-formed, i.e.
7488 just defines a tagged type or anonymous union.
7489
7490 Returns the type defined, if any. */
7491
7492 tree
check_tag_decl(declspecs)7493 check_tag_decl (declspecs)
7494 tree declspecs;
7495 {
7496 int found_type = 0;
7497 int saw_friend = 0;
7498 int saw_typedef = 0;
7499 tree ob_modifier = NULL_TREE;
7500 register tree link;
7501 register tree t = NULL_TREE;
7502
7503 for (link = declspecs; link; link = TREE_CHAIN (link))
7504 {
7505 register tree value = TREE_VALUE (link);
7506
7507 if (TYPE_P (value)
7508 || TREE_CODE (value) == TYPE_DECL
7509 || (TREE_CODE (value) == IDENTIFIER_NODE
7510 && IDENTIFIER_GLOBAL_VALUE (value)
7511 && TREE_CODE (IDENTIFIER_GLOBAL_VALUE (value)) == TYPE_DECL))
7512 {
7513 ++found_type;
7514
7515 if (found_type == 2 && TREE_CODE (value) == IDENTIFIER_NODE)
7516 {
7517 if (! in_system_header)
7518 pedwarn ("redeclaration of C++ built-in type `%T'", value);
7519 return NULL_TREE;
7520 }
7521
7522 if (TYPE_P (value)
7523 && ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
7524 || TREE_CODE (value) == ENUMERAL_TYPE))
7525 {
7526 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
7527 t = value;
7528 }
7529 }
7530 else if (value == ridpointers[(int) RID_TYPEDEF])
7531 saw_typedef = 1;
7532 else if (value == ridpointers[(int) RID_FRIEND])
7533 {
7534 if (current_class_type == NULL_TREE
7535 || current_scope () != current_class_type)
7536 ob_modifier = value;
7537 else
7538 saw_friend = 1;
7539 }
7540 else if (value == ridpointers[(int) RID_STATIC]
7541 || value == ridpointers[(int) RID_EXTERN]
7542 || value == ridpointers[(int) RID_AUTO]
7543 || value == ridpointers[(int) RID_REGISTER]
7544 || value == ridpointers[(int) RID_INLINE]
7545 || value == ridpointers[(int) RID_VIRTUAL]
7546 || value == ridpointers[(int) RID_CONST]
7547 || value == ridpointers[(int) RID_VOLATILE]
7548 || value == ridpointers[(int) RID_EXPLICIT]
7549 || value == ridpointers[(int) RID_THREAD])
7550 ob_modifier = value;
7551 }
7552
7553 if (found_type > 1)
7554 error ("multiple types in one declaration");
7555
7556 if (t == NULL_TREE && ! saw_friend)
7557 pedwarn ("declaration does not declare anything");
7558
7559 /* Check for an anonymous union. */
7560 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
7561 && TYPE_ANONYMOUS_P (t))
7562 {
7563 /* 7/3 In a simple-declaration, the optional init-declarator-list
7564 can be omitted only when declaring a class (clause 9) or
7565 enumeration (7.2), that is, when the decl-specifier-seq contains
7566 either a class-specifier, an elaborated-type-specifier with
7567 a class-key (9.1), or an enum-specifier. In these cases and
7568 whenever a class-specifier or enum-specifier is present in the
7569 decl-specifier-seq, the identifiers in these specifiers are among
7570 the names being declared by the declaration (as class-name,
7571 enum-names, or enumerators, depending on the syntax). In such
7572 cases, and except for the declaration of an unnamed bit-field (9.6),
7573 the decl-specifier-seq shall introduce one or more names into the
7574 program, or shall redeclare a name introduced by a previous
7575 declaration. [Example:
7576 enum { }; // ill-formed
7577 typedef class { }; // ill-formed
7578 --end example] */
7579 if (saw_typedef)
7580 {
7581 error ("missing type-name in typedef-declaration");
7582 return NULL_TREE;
7583 }
7584 /* Anonymous unions are objects, so they can have specifiers. */;
7585 SET_ANON_AGGR_TYPE_P (t);
7586
7587 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
7588 pedwarn ("ISO C++ prohibits anonymous structs");
7589 }
7590
7591 else if (ob_modifier)
7592 {
7593 if (ob_modifier == ridpointers[(int) RID_INLINE]
7594 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
7595 error ("`%D' can only be specified for functions", ob_modifier);
7596 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
7597 error ("`%D' can only be specified inside a class", ob_modifier);
7598 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
7599 error ("`%D' can only be specified for constructors",
7600 ob_modifier);
7601 else
7602 error ("`%D' can only be specified for objects and functions",
7603 ob_modifier);
7604 }
7605
7606 return t;
7607 }
7608
7609 /* Called when a declaration is seen that contains no names to declare.
7610 If its type is a reference to a structure, union or enum inherited
7611 from a containing scope, shadow that tag name for the current scope
7612 with a forward reference.
7613 If its type defines a new named structure or union
7614 or defines an enum, it is valid but we need not do anything here.
7615 Otherwise, it is an error.
7616
7617 C++: may have to grok the declspecs to learn about static,
7618 complain for anonymous unions. */
7619
7620 void
shadow_tag(declspecs)7621 shadow_tag (declspecs)
7622 tree declspecs;
7623 {
7624 tree t = check_tag_decl (declspecs);
7625
7626 if (t)
7627 maybe_process_partial_specialization (t);
7628
7629 /* This is where the variables in an anonymous union are
7630 declared. An anonymous union declaration looks like:
7631 union { ... } ;
7632 because there is no declarator after the union, the parser
7633 sends that declaration here. */
7634 if (t && ANON_AGGR_TYPE_P (t))
7635 {
7636 fixup_anonymous_aggr (t);
7637
7638 if (TYPE_FIELDS (t))
7639 {
7640 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
7641 NULL);
7642 finish_anon_union (decl);
7643 }
7644 }
7645 }
7646
7647 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
7648
7649 tree
groktypename(typename)7650 groktypename (typename)
7651 tree typename;
7652 {
7653 tree specs, attrs;
7654 tree type;
7655 if (TREE_CODE (typename) != TREE_LIST)
7656 return typename;
7657 split_specs_attrs (TREE_PURPOSE (typename), &specs, &attrs);
7658 type = grokdeclarator (TREE_VALUE (typename), specs,
7659 TYPENAME, 0, &attrs);
7660 if (attrs)
7661 cplus_decl_attributes (&type, attrs, 0);
7662 return type;
7663 }
7664
7665 /* Decode a declarator in an ordinary declaration or data definition.
7666 This is called as soon as the type information and variable name
7667 have been parsed, before parsing the initializer if any.
7668 Here we create the ..._DECL node, fill in its type,
7669 and put it on the list of decls for the current context.
7670 The ..._DECL node is returned as the value.
7671
7672 Exception: for arrays where the length is not specified,
7673 the type is left null, to be filled in by `cp_finish_decl'.
7674
7675 Function definitions do not come here; they go to start_function
7676 instead. However, external and forward declarations of functions
7677 do go through here. Structure field declarations are done by
7678 grokfield and not through here. */
7679
7680 tree
start_decl(declarator,declspecs,initialized,attributes,prefix_attributes)7681 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
7682 tree declarator, declspecs;
7683 int initialized;
7684 tree attributes, prefix_attributes;
7685 {
7686 tree decl;
7687 register tree type, tem;
7688 tree context;
7689
7690 #if 0
7691 /* See code below that used this. */
7692 int init_written = initialized;
7693 #endif
7694
7695 /* This should only be done once on the top most decl. */
7696 if (have_extern_spec)
7697 {
7698 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"),
7699 declspecs);
7700 have_extern_spec = false;
7701 }
7702
7703 /* An object declared as __attribute__((deprecated)) suppresses
7704 warnings of uses of other deprecated items. */
7705 if (lookup_attribute ("deprecated", attributes))
7706 deprecated_state = DEPRECATED_SUPPRESS;
7707
7708 attributes = chainon (attributes, prefix_attributes);
7709
7710 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
7711 &attributes);
7712
7713 deprecated_state = DEPRECATED_NORMAL;
7714
7715 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
7716 return NULL_TREE;
7717
7718 type = TREE_TYPE (decl);
7719
7720 if (type == error_mark_node)
7721 return NULL_TREE;
7722
7723 context = DECL_CONTEXT (decl);
7724
7725 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7726 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7727 {
7728 /* When parsing the initializer, lookup should use the object's
7729 namespace. */
7730 push_decl_namespace (context);
7731 }
7732
7733 /* We are only interested in class contexts, later. */
7734 if (context && TREE_CODE (context) == NAMESPACE_DECL)
7735 context = NULL_TREE;
7736
7737 if (initialized)
7738 /* Is it valid for this decl to have an initializer at all?
7739 If not, set INITIALIZED to zero, which will indirectly
7740 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
7741 switch (TREE_CODE (decl))
7742 {
7743 case TYPE_DECL:
7744 error ("typedef `%D' is initialized (use __typeof__ instead)", decl);
7745 initialized = 0;
7746 break;
7747
7748 case FUNCTION_DECL:
7749 error ("function `%#D' is initialized like a variable", decl);
7750 initialized = 0;
7751 break;
7752
7753 default:
7754 break;
7755 }
7756
7757 if (initialized)
7758 {
7759 if (! toplevel_bindings_p ()
7760 && DECL_EXTERNAL (decl))
7761 warning ("declaration of `%#D' has `extern' and is initialized",
7762 decl);
7763 DECL_EXTERNAL (decl) = 0;
7764 if (toplevel_bindings_p ())
7765 TREE_STATIC (decl) = 1;
7766
7767 /* Tell `pushdecl' this is an initialized decl
7768 even though we don't yet have the initializer expression.
7769 Also tell `cp_finish_decl' it may store the real initializer. */
7770 DECL_INITIAL (decl) = error_mark_node;
7771 }
7772
7773 /* Set attributes here so if duplicate decl, will have proper attributes. */
7774 cplus_decl_attributes (&decl, attributes, 0);
7775
7776 /* If #pragma weak was used, mark the decl weak now. */
7777 if (global_scope_p (current_binding_level))
7778 maybe_apply_pragma_weak (decl);
7779
7780 if (TREE_CODE (decl) == FUNCTION_DECL
7781 && DECL_DECLARED_INLINE_P (decl)
7782 && DECL_UNINLINABLE (decl)
7783 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
7784 warning_with_decl (decl,
7785 "inline function `%s' given attribute noinline");
7786
7787 if (context && COMPLETE_TYPE_P (complete_type (context)))
7788 {
7789 push_nested_class (context, 2);
7790
7791 if (TREE_CODE (decl) == VAR_DECL)
7792 {
7793 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7794 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7795 error ("`%#D' is not a static member of `%#T'", decl, context);
7796 else
7797 {
7798 if (DECL_CONTEXT (field) != context)
7799 {
7800 pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
7801 DECL_CONTEXT (field), DECL_NAME (decl),
7802 context, DECL_NAME (decl));
7803 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7804 }
7805 /* Static data member are tricky; an in-class initialization
7806 still doesn't provide a definition, so the in-class
7807 declaration will have DECL_EXTERNAL set, but will have an
7808 initialization. Thus, duplicate_decls won't warn
7809 about this situation, and so we check here. */
7810 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7811 error ("duplicate initialization of %D", decl);
7812 if (duplicate_decls (decl, field))
7813 decl = field;
7814 }
7815 }
7816 else
7817 {
7818 tree field = check_classfn (context, decl);
7819 if (field && duplicate_decls (decl, field))
7820 decl = field;
7821 }
7822
7823 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
7824 DECL_IN_AGGR_P (decl) = 0;
7825 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
7826 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
7827 {
7828 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7829 /* [temp.expl.spec] An explicit specialization of a static data
7830 member of a template is a definition if the declaration
7831 includes an initializer; otherwise, it is a declaration.
7832
7833 We check for processing_specialization so this only applies
7834 to the new specialization syntax. */
7835 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7836 DECL_EXTERNAL (decl) = 1;
7837 }
7838
7839 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7840 pedwarn ("declaration of `%#D' outside of class is not definition",
7841 decl);
7842 }
7843
7844 /* Enter this declaration into the symbol table. */
7845 tem = maybe_push_decl (decl);
7846
7847 if (processing_template_decl)
7848 tem = push_template_decl (tem);
7849
7850 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7851 /* Tell the back-end to use or not use .common as appropriate. If we say
7852 -fconserve-space, we want this to save .data space, at the expense of
7853 wrong semantics. If we say -fno-conserve-space, we want this to
7854 produce errors about redefs; to do this we force variables into the
7855 data segment. */
7856 DECL_COMMON (tem) = ((TREE_CODE (tem) != VAR_DECL
7857 || !DECL_THREAD_LOCAL (tem))
7858 && (flag_conserve_space || ! TREE_PUBLIC (tem)));
7859 #endif
7860
7861 if (! processing_template_decl)
7862 start_decl_1 (tem);
7863
7864 return tem;
7865 }
7866
7867 void
start_decl_1(decl)7868 start_decl_1 (decl)
7869 tree decl;
7870 {
7871 tree type = TREE_TYPE (decl);
7872 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7873
7874 if (type == error_mark_node)
7875 return;
7876
7877 if (initialized)
7878 /* Is it valid for this decl to have an initializer at all?
7879 If not, set INITIALIZED to zero, which will indirectly
7880 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
7881 {
7882 /* Don't allow initializations for incomplete types except for
7883 arrays which might be completed by the initialization. */
7884 if (COMPLETE_TYPE_P (complete_type (type)))
7885 ; /* A complete type is ok. */
7886 else if (TREE_CODE (type) != ARRAY_TYPE)
7887 {
7888 error ("variable `%#D' has initializer but incomplete type",
7889 decl);
7890 initialized = 0;
7891 type = TREE_TYPE (decl) = error_mark_node;
7892 }
7893 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
7894 {
7895 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7896 error ("elements of array `%#D' have incomplete type", decl);
7897 /* else we already gave an error in start_decl. */
7898 initialized = 0;
7899 }
7900 }
7901
7902 if (!initialized
7903 && TREE_CODE (decl) != TYPE_DECL
7904 && TREE_CODE (decl) != TEMPLATE_DECL
7905 && type != error_mark_node
7906 && IS_AGGR_TYPE (type)
7907 && ! DECL_EXTERNAL (decl))
7908 {
7909 if ((! processing_template_decl || ! uses_template_parms (type))
7910 && !COMPLETE_TYPE_P (complete_type (type)))
7911 {
7912 error ("aggregate `%#D' has incomplete type and cannot be defined",
7913 decl);
7914 /* Change the type so that assemble_variable will give
7915 DECL an rtl we can live with: (mem (const_int 0)). */
7916 type = TREE_TYPE (decl) = error_mark_node;
7917 }
7918 else
7919 {
7920 /* If any base type in the hierarchy of TYPE needs a constructor,
7921 then we set initialized to 1. This way any nodes which are
7922 created for the purposes of initializing this aggregate
7923 will live as long as it does. This is necessary for global
7924 aggregates which do not have their initializers processed until
7925 the end of the file. */
7926 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7927 }
7928 }
7929
7930 if (! initialized)
7931 DECL_INITIAL (decl) = NULL_TREE;
7932
7933 /* Create a new scope to hold this declaration if necessary.
7934 Whether or not a new scope is necessary cannot be determined
7935 until after the type has been completed; if the type is a
7936 specialization of a class template it is not until after
7937 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
7938 will be set correctly. */
7939 maybe_push_cleanup_level (type);
7940 }
7941
7942 /* Handle initialization of references. DECL, TYPE, and INIT have the
7943 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
7944 but will be set to a new CLEANUP_STMT if a temporary is created
7945 that must be destroeyd subsequently.
7946
7947 Returns an initializer expression to use to initialize DECL, or
7948 NULL if the initialization can be performed statically.
7949
7950 Quotes on semantics can be found in ARM 8.4.3. */
7951
7952 static tree
grok_reference_init(tree decl,tree type,tree init,tree * cleanup)7953 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
7954 {
7955 tree tmp;
7956
7957 if (init == NULL_TREE)
7958 {
7959 if ((DECL_LANG_SPECIFIC (decl) == 0
7960 || DECL_IN_AGGR_P (decl) == 0)
7961 && ! DECL_THIS_EXTERN (decl))
7962 error ("`%D' declared as reference but not initialized", decl);
7963 return NULL_TREE;
7964 }
7965
7966 if (init == error_mark_node)
7967 return NULL_TREE;
7968
7969 if (TREE_CODE (init) == CONSTRUCTOR)
7970 {
7971 error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
7972 return NULL_TREE;
7973 }
7974
7975 if (TREE_CODE (init) == TREE_LIST)
7976 init = build_compound_expr (init);
7977
7978 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7979 init = convert_from_reference (init);
7980
7981 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7982 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7983 {
7984 /* Note: default conversion is only called in very special cases. */
7985 init = default_conversion (init);
7986 }
7987
7988 /* Convert INIT to the reference type TYPE. This may involve the
7989 creation of a temporary, whose lifetime must be the same as that
7990 of the reference. If so, a DECL_STMT for the temporary will be
7991 added just after the DECL_STMT for DECL. That's why we don't set
7992 DECL_INITIAL for local references (instead assigning to them
7993 explicitly); we need to allow the temporary to be initialized
7994 first. */
7995 tmp = initialize_reference (type, init, decl, cleanup);
7996
7997 if (tmp == error_mark_node)
7998 return NULL_TREE;
7999 else if (tmp == NULL_TREE)
8000 {
8001 error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
8002 return NULL_TREE;
8003 }
8004
8005 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
8006 return tmp;
8007
8008 DECL_INITIAL (decl) = tmp;
8009
8010 return NULL_TREE;
8011 }
8012
8013 /* When parsing `int a[] = {1, 2};' we don't know the size of the
8014 array until we finish parsing the initializer. If that's the
8015 situation we're in, update DECL accordingly. */
8016
8017 static void
maybe_deduce_size_from_array_init(decl,init)8018 maybe_deduce_size_from_array_init (decl, init)
8019 tree decl;
8020 tree init;
8021 {
8022 tree type = TREE_TYPE (decl);
8023
8024 if (TREE_CODE (type) == ARRAY_TYPE
8025 && TYPE_DOMAIN (type) == NULL_TREE
8026 && TREE_CODE (decl) != TYPE_DECL)
8027 {
8028 /* do_default is really a C-ism to deal with tentative definitions.
8029 But let's leave it here to ease the eventual merge. */
8030 int do_default = !DECL_EXTERNAL (decl);
8031 tree initializer = init ? init : DECL_INITIAL (decl);
8032 int failure = complete_array_type (type, initializer, do_default);
8033
8034 if (failure == 1)
8035 error ("initializer fails to determine size of `%D'", decl);
8036
8037 if (failure == 2)
8038 {
8039 if (do_default)
8040 error ("array size missing in `%D'", decl);
8041 /* If a `static' var's size isn't known, make it extern as
8042 well as static, so it does not get allocated. If it's not
8043 `static', then don't mark it extern; finish_incomplete_decl
8044 will give it a default size and it will get allocated. */
8045 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
8046 DECL_EXTERNAL (decl) = 1;
8047 }
8048
8049 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
8050 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
8051 integer_zero_node))
8052 error ("zero-size array `%D'", decl);
8053
8054 layout_decl (decl, 0);
8055 }
8056 }
8057
8058 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
8059 any appropriate error messages regarding the layout. */
8060
8061 static void
layout_var_decl(decl)8062 layout_var_decl (decl)
8063 tree decl;
8064 {
8065 tree type = TREE_TYPE (decl);
8066 #if 0
8067 tree ttype = target_type (type);
8068 #endif
8069
8070 /* If we haven't already layed out this declaration, do so now.
8071 Note that we must not call complete type for an external object
8072 because it's type might involve templates that we are not
8073 supposed to isntantiate yet. (And it's perfectly valid to say
8074 `extern X x' for some incomplete type `X'.) */
8075 if (!DECL_EXTERNAL (decl))
8076 complete_type (type);
8077 if (!DECL_SIZE (decl)
8078 && TREE_TYPE (decl) != error_mark_node
8079 && (COMPLETE_TYPE_P (type)
8080 || (TREE_CODE (type) == ARRAY_TYPE
8081 && !TYPE_DOMAIN (type)
8082 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
8083 layout_decl (decl, 0);
8084
8085 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
8086 {
8087 /* An automatic variable with an incomplete type: that is an error.
8088 Don't talk about array types here, since we took care of that
8089 message in grokdeclarator. */
8090 error ("storage size of `%D' isn't known", decl);
8091 TREE_TYPE (decl) = error_mark_node;
8092 }
8093 #if 0
8094 /* Keep this code around in case we later want to control debug info
8095 based on whether a type is "used". (jason 1999-11-11) */
8096
8097 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
8098 /* Let debugger know it should output info for this type. */
8099 note_debug_info_needed (ttype);
8100
8101 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
8102 note_debug_info_needed (DECL_CONTEXT (decl));
8103 #endif
8104
8105 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8106 && DECL_SIZE (decl) != NULL_TREE
8107 && ! TREE_CONSTANT (DECL_SIZE (decl)))
8108 {
8109 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
8110 constant_expression_warning (DECL_SIZE (decl));
8111 else
8112 error ("storage size of `%D' isn't constant", decl);
8113 }
8114
8115 if (TREE_STATIC (decl)
8116 && !DECL_ARTIFICIAL (decl)
8117 && current_function_decl
8118 && DECL_CONTEXT (decl) == current_function_decl)
8119 push_local_name (decl);
8120 }
8121
8122 /* If a local static variable is declared in an inline function, or if
8123 we have a weak definition, we must endeavor to create only one
8124 instance of the variable at link-time. */
8125
8126 static void
maybe_commonize_var(decl)8127 maybe_commonize_var (decl)
8128 tree decl;
8129 {
8130 /* Static data in a function with comdat linkage also has comdat
8131 linkage. */
8132 if (TREE_STATIC (decl)
8133 /* Don't mess with __FUNCTION__. */
8134 && ! DECL_ARTIFICIAL (decl)
8135 && DECL_FUNCTION_SCOPE_P (decl)
8136 /* Unfortunately, import_export_decl has not always been called
8137 before the function is processed, so we cannot simply check
8138 DECL_COMDAT. */
8139 && (DECL_COMDAT (DECL_CONTEXT (decl))
8140 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
8141 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
8142 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
8143 {
8144 if (flag_weak)
8145 {
8146 /* With weak symbols, we simply make the variable COMDAT;
8147 that will cause copies in multiple translations units to
8148 be merged. */
8149 comdat_linkage (decl);
8150 }
8151 else
8152 {
8153 if (DECL_INITIAL (decl) == NULL_TREE
8154 || DECL_INITIAL (decl) == error_mark_node)
8155 {
8156 /* Without weak symbols, we can use COMMON to merge
8157 uninitialized variables. */
8158 TREE_PUBLIC (decl) = 1;
8159 DECL_COMMON (decl) = 1;
8160 }
8161 else
8162 {
8163 /* While for initialized variables, we must use internal
8164 linkage -- which means that multiple copies will not
8165 be merged. */
8166 TREE_PUBLIC (decl) = 0;
8167 DECL_COMMON (decl) = 0;
8168 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
8169 cp_warning_at (" you can work around this by removing the initializer", decl);
8170 }
8171 }
8172 }
8173 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
8174 /* Set it up again; we might have set DECL_INITIAL since the last
8175 time. */
8176 comdat_linkage (decl);
8177 }
8178
8179 /* Issue an error message if DECL is an uninitialized const variable. */
8180
8181 static void
check_for_uninitialized_const_var(decl)8182 check_for_uninitialized_const_var (decl)
8183 tree decl;
8184 {
8185 tree type = TREE_TYPE (decl);
8186
8187 /* ``Unless explicitly declared extern, a const object does not have
8188 external linkage and must be initialized. ($8.4; $12.1)'' ARM
8189 7.1.6 */
8190 if (TREE_CODE (decl) == VAR_DECL
8191 && TREE_CODE (type) != REFERENCE_TYPE
8192 && CP_TYPE_CONST_P (type)
8193 && !TYPE_NEEDS_CONSTRUCTING (type)
8194 && !DECL_INITIAL (decl))
8195 error ("uninitialized const `%D'", decl);
8196 }
8197
8198 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
8199 returned is the next FIELD_DECL (possibly FIELD itself) that can be
8200 initialized. If there are no more such fields, the return value
8201 will be NULL. */
8202
8203 static tree
next_initializable_field(tree field)8204 next_initializable_field (tree field)
8205 {
8206 while (field
8207 && (TREE_CODE (field) != FIELD_DECL
8208 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
8209 || DECL_ARTIFICIAL (field)))
8210 field = TREE_CHAIN (field);
8211
8212 return field;
8213 }
8214
8215 /* Subroutine of reshape_init. Reshape the constructor for an array. INITP
8216 is the pointer to the old constructor list (to the CONSTRUCTOR_ELTS of
8217 the CONSTRUCTOR we are processing), while NEW_INIT is the CONSTRUCTOR we
8218 are building.
8219 ELT_TYPE is the element type of the array. MAX_INDEX is an INTEGER_CST
8220 representing the size of the array minus one (the maximum index), or
8221 NULL_TREE if the array was declared without specifying the size. */
8222
8223 static bool
reshape_init_array(tree elt_type,tree max_index,tree * initp,tree new_init)8224 reshape_init_array (tree elt_type, tree max_index,
8225 tree *initp, tree new_init)
8226 {
8227 bool sized_array_p = (max_index != NULL_TREE);
8228 HOST_WIDE_INT max_index_cst = 0;
8229 HOST_WIDE_INT index;
8230
8231 if (sized_array_p)
8232 /* HWI is either 32bit or 64bit, so it must be enough to represent the
8233 array size. */
8234 max_index_cst = tree_low_cst (max_index, 1);
8235
8236 /* Loop until there are no more initializers. */
8237 for (index = 0;
8238 *initp && (!sized_array_p || index <= max_index_cst);
8239 ++index)
8240 {
8241 tree element_init;
8242 tree designated_index;
8243
8244 element_init = reshape_init (elt_type, initp);
8245 if (element_init == error_mark_node)
8246 return false;
8247 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
8248 CONSTRUCTOR_ELTS (new_init) = element_init;
8249 designated_index = TREE_PURPOSE (element_init);
8250 if (designated_index)
8251 {
8252 if (TREE_CODE (designated_index) != INTEGER_CST)
8253 abort ();
8254 if (sized_array_p
8255 && tree_int_cst_lt (max_index, designated_index))
8256 {
8257 error ("Designated initializer `%E' larger than array "
8258 "size", designated_index);
8259 TREE_PURPOSE (element_init) = NULL_TREE;
8260 }
8261 else
8262 index = tree_low_cst (designated_index, 1);
8263 }
8264 }
8265
8266 return true;
8267 }
8268
8269 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
8270 brace-enclosed aggregate initializer.
8271
8272 *INITP is one of a list of initializers describing a brace-enclosed
8273 initializer for an entity of the indicated aggregate TYPE. It may
8274 not presently match the shape of the TYPE; for example:
8275
8276 struct S { int a; int b; };
8277 struct S a[] = { 1, 2, 3, 4 };
8278
8279 Here *INITP will point to TREE_LIST of four elements, rather than a
8280 list of two elements, each itself a list of two elements. This
8281 routine transforms INIT from the former form into the latter. The
8282 revised initializer is returned. */
8283
8284 static tree
reshape_init(tree type,tree * initp)8285 reshape_init (tree type, tree *initp)
8286 {
8287 tree inits;
8288 tree old_init;
8289 tree old_init_value;
8290 tree new_init;
8291 bool brace_enclosed_p;
8292
8293 old_init = *initp;
8294 old_init_value = (TREE_CODE (*initp) == TREE_LIST
8295 ? TREE_VALUE (*initp) : old_init);
8296
8297 /* For some parse errors, OLD_INIT_VALUE may be NULL. */
8298 if (!old_init_value)
8299 {
8300 my_friendly_assert (TREE_CODE (old_init) == TREE_LIST, 20021202);
8301 TREE_VALUE (old_init) = error_mark_node;
8302 *initp = TREE_CHAIN (old_init);
8303 return old_init;
8304 }
8305
8306 /* If the initializer is brace-enclosed, pull initializers from the
8307 enclosed elements. Advance past the brace-enclosed initializer
8308 now. */
8309 if (TREE_CODE (old_init_value) == CONSTRUCTOR
8310 && TREE_TYPE (old_init_value) == NULL_TREE
8311 && TREE_HAS_CONSTRUCTOR (old_init_value))
8312 {
8313 *initp = TREE_CHAIN (old_init);
8314 TREE_CHAIN (old_init) = NULL_TREE;
8315 inits = CONSTRUCTOR_ELTS (old_init_value);
8316 initp = &inits;
8317 brace_enclosed_p = true;
8318 }
8319 else
8320 {
8321 inits = NULL_TREE;
8322 brace_enclosed_p = false;
8323 }
8324
8325 /* A non-aggregate type is always initialized with a single
8326 initializer. */
8327 if (!CP_AGGREGATE_TYPE_P (type))
8328 {
8329 *initp = TREE_CHAIN (old_init);
8330 TREE_CHAIN (old_init) = NULL_TREE;
8331 /* It is invalid to initialize a non-aggregate type with a
8332 brace-enclosed initializer. */
8333 if (brace_enclosed_p)
8334 {
8335 error ("brace-enclosed initializer used to initialize `%T'",
8336 type);
8337 if (TREE_CODE (old_init) == TREE_LIST)
8338 TREE_VALUE (old_init) = error_mark_node;
8339 else
8340 old_init = error_mark_node;
8341 }
8342
8343 return old_init;
8344 }
8345
8346 /* [dcl.init.aggr]
8347
8348 All implicit type conversions (clause _conv_) are considered when
8349 initializing the aggregate member with an initializer from an
8350 initializer-list. If the initializer can initialize a member,
8351 the member is initialized. Otherwise, if the member is itself a
8352 non-empty subaggregate, brace elision is assumed and the
8353 initializer is considered for the initialization of the first
8354 member of the subaggregate. */
8355 if (!brace_enclosed_p
8356 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
8357 {
8358 *initp = TREE_CHAIN (old_init);
8359 TREE_CHAIN (old_init) = NULL_TREE;
8360 return old_init;
8361 }
8362
8363 if (TREE_CODE (old_init_value) == STRING_CST
8364 && TREE_CODE (type) == ARRAY_TYPE
8365 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
8366 {
8367 /* [dcl.init.string]
8368
8369 A char array (whether plain char, signed char, or unsigned char)
8370 can be initialized by a string-literal (optionally enclosed in
8371 braces); a wchar_t array can be initialized by a wide
8372 string-literal (optionally enclosed in braces). */
8373 new_init = old_init;
8374 /* Move past the initializer. */
8375 *initp = TREE_CHAIN (old_init);
8376 TREE_CHAIN (old_init) = NULL_TREE;
8377 }
8378 else
8379 {
8380 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
8381 new_init = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
8382 TREE_HAS_CONSTRUCTOR (new_init) = 1;
8383
8384 if (CLASS_TYPE_P (type))
8385 {
8386 tree field;
8387
8388 field = next_initializable_field (TYPE_FIELDS (type));
8389
8390 if (!field)
8391 {
8392 /* [dcl.init.aggr]
8393
8394 An initializer for an aggregate member that is an
8395 empty class shall have the form of an empty
8396 initializer-list {}. */
8397 if (!brace_enclosed_p)
8398 {
8399 error ("initializer for `%T' must be brace-enclosed",
8400 type);
8401 return error_mark_node;
8402 }
8403 }
8404 else
8405 {
8406 /* Loop through the initializable fields, gathering
8407 initializers. */
8408 while (*initp)
8409 {
8410 tree field_init;
8411
8412 /* Handle designated initializers, as an extension. */
8413 if (TREE_PURPOSE (*initp))
8414 {
8415 if (pedantic)
8416 pedwarn ("ISO C++ does not allow designated initializers");
8417 field = lookup_field_1 (type, TREE_PURPOSE (*initp),
8418 /*want_type=*/false);
8419 if (!field || TREE_CODE (field) != FIELD_DECL)
8420 error ("`%T' has no non-static data member named `%D'",
8421 type, TREE_PURPOSE (*initp));
8422 }
8423 if (!field)
8424 break;
8425
8426 field_init = reshape_init (TREE_TYPE (field), initp);
8427 if (field_init == error_mark_node)
8428 return error_mark_node;
8429 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
8430 CONSTRUCTOR_ELTS (new_init) = field_init;
8431 /* [dcl.init.aggr]
8432
8433 When a union is initialized with a brace-enclosed
8434 initializer, the braces shall only contain an
8435 initializer for the first member of the union. */
8436 if (TREE_CODE (type) == UNION_TYPE)
8437 break;
8438 field = next_initializable_field (TREE_CHAIN (field));
8439 }
8440 }
8441 }
8442 else if ((TREE_CODE (type) == ARRAY_TYPE)|| (TREE_CODE (type) == VECTOR_TYPE))
8443 {
8444 tree max_index;
8445
8446 /* If the bound of the array is known, take no more initializers
8447 than are allowed. */
8448 max_index = ((TYPE_DOMAIN (type) && (TREE_CODE (type) == ARRAY_TYPE))
8449 ? array_type_nelts (type) : NULL_TREE);
8450 if (!reshape_init_array (TREE_TYPE (type), max_index,
8451 initp, new_init))
8452 return error_mark_node;
8453 }
8454 else
8455 abort ();
8456
8457 /* The initializers were placed in reverse order in the
8458 CONSTRUCTOR. */
8459 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
8460
8461 if (TREE_CODE (old_init) == TREE_LIST)
8462 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
8463 }
8464
8465 /* If this was a brace-enclosed initializer and all of the
8466 initializers were not used up, there is a problem. */
8467 if (brace_enclosed_p && *initp)
8468 error ("too many initializers for `%T'", type);
8469
8470 return new_init;
8471 }
8472
8473 /* Verify INIT (the initializer for DECL), and record the
8474 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
8475 grok_reference_init.
8476
8477 If the return value is non-NULL, it is an expression that must be
8478 evaluated dynamically to initialize DECL. */
8479
8480 static tree
check_initializer(tree decl,tree init,int flags,tree * cleanup)8481 check_initializer (tree decl, tree init, int flags, tree *cleanup)
8482 {
8483 tree type = TREE_TYPE (decl);
8484 tree init_code = NULL;
8485
8486 /* If `start_decl' didn't like having an initialization, ignore it now. */
8487 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
8488 init = NULL_TREE;
8489
8490 /* If an initializer is present, DECL_INITIAL has been
8491 error_mark_node, to indicate that an as-of-yet unevaluated
8492 initialization will occur. From now on, DECL_INITIAL reflects
8493 the static initialization -- if any -- of DECL. */
8494 DECL_INITIAL (decl) = NULL_TREE;
8495
8496 /* Things that are going to be initialized need to have complete
8497 type. */
8498 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
8499
8500 if (type == error_mark_node)
8501 /* We will have already complained. */
8502 init = NULL_TREE;
8503 else if (init && COMPLETE_TYPE_P (type)
8504 && !TREE_CONSTANT (TYPE_SIZE (type)))
8505 {
8506 error ("variable-sized object `%D' may not be initialized", decl);
8507 init = NULL_TREE;
8508 }
8509 else if (TREE_CODE (type) == ARRAY_TYPE
8510 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
8511 {
8512 error ("elements of array `%#D' have incomplete type", decl);
8513 init = NULL_TREE;
8514 }
8515 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
8516 {
8517 error ("`%D' has incomplete type", decl);
8518 TREE_TYPE (decl) = error_mark_node;
8519 init = NULL_TREE;
8520 }
8521
8522 if (TREE_CODE (decl) == CONST_DECL)
8523 {
8524 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
8525
8526 DECL_INITIAL (decl) = init;
8527
8528 my_friendly_assert (init != NULL_TREE, 149);
8529 init = NULL_TREE;
8530 }
8531 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
8532 init = grok_reference_init (decl, type, init, cleanup);
8533 else if (init)
8534 {
8535 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
8536 {
8537 /* [dcl.init] paragraph 13,
8538 If T is a scalar type, then a declaration of the form
8539 T x = { a };
8540 is equivalent to
8541 T x = a;
8542
8543 reshape_init will complain about the extra braces,
8544 and doesn't do anything useful in the case where TYPE is
8545 scalar, so just don't call it. */
8546 if (CP_AGGREGATE_TYPE_P (type))
8547 init = reshape_init (type, &init);
8548 }
8549
8550 /* If DECL has an array type without a specific bound, deduce the
8551 array size from the initializer. */
8552 maybe_deduce_size_from_array_init (decl, init);
8553 type = TREE_TYPE (decl);
8554 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
8555 TREE_TYPE (init) = type;
8556
8557 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
8558 {
8559 if (TREE_CODE (type) == ARRAY_TYPE)
8560 goto initialize_aggr;
8561 else if (TREE_CODE (init) == CONSTRUCTOR
8562 && TREE_HAS_CONSTRUCTOR (init))
8563 {
8564 if (TYPE_NON_AGGREGATE_CLASS (type))
8565 {
8566 error ("`%D' must be initialized by constructor, not by `{...}'",
8567 decl);
8568 init = error_mark_node;
8569 }
8570 else
8571 goto dont_use_constructor;
8572 }
8573 else
8574 {
8575 int saved_stmts_are_full_exprs_p;
8576
8577 initialize_aggr:
8578 saved_stmts_are_full_exprs_p = 0;
8579 if (building_stmt_tree ())
8580 {
8581 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
8582 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
8583 }
8584 init = build_aggr_init (decl, init, flags);
8585 if (building_stmt_tree ())
8586 current_stmt_tree ()->stmts_are_full_exprs_p =
8587 saved_stmts_are_full_exprs_p;
8588 return init;
8589 }
8590 }
8591 else
8592 {
8593 dont_use_constructor:
8594 if (TREE_CODE (init) != TREE_VEC)
8595 {
8596 init_code = store_init_value (decl, init);
8597 init = NULL;
8598 }
8599 }
8600 }
8601 else if (DECL_EXTERNAL (decl))
8602 ;
8603 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
8604 goto initialize_aggr;
8605 else if (IS_AGGR_TYPE (type))
8606 {
8607 tree core_type = strip_array_types (type);
8608
8609 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
8610 error ("structure `%D' with uninitialized const members", decl);
8611 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
8612 error ("structure `%D' with uninitialized reference members",
8613 decl);
8614
8615 check_for_uninitialized_const_var (decl);
8616 }
8617 else
8618 check_for_uninitialized_const_var (decl);
8619
8620 if (init && init != error_mark_node)
8621 init_code = build (INIT_EXPR, type, decl, init);
8622
8623 return init_code;
8624 }
8625
8626 /* If DECL is not a local variable, give it RTL. */
8627
8628 static void
make_rtl_for_nonlocal_decl(decl,init,asmspec)8629 make_rtl_for_nonlocal_decl (decl, init, asmspec)
8630 tree decl;
8631 tree init;
8632 const char *asmspec;
8633 {
8634 int toplev = toplevel_bindings_p ();
8635 int defer_p;
8636
8637 /* Handle non-variables up front. */
8638 if (TREE_CODE (decl) != VAR_DECL)
8639 {
8640 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8641 return;
8642 }
8643
8644 /* If we see a class member here, it should be a static data
8645 member. */
8646 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
8647 {
8648 my_friendly_assert (TREE_STATIC (decl), 19990828);
8649 /* An in-class declaration of a static data member should be
8650 external; it is only a declaration, and not a definition. */
8651 if (init == NULL_TREE)
8652 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
8653 }
8654
8655 /* Set the DECL_ASSEMBLER_NAME for the variable. */
8656 if (asmspec)
8657 {
8658 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
8659 /* The `register' keyword, when used together with an
8660 asm-specification, indicates that the variable should be
8661 placed in a particular register. */
8662 if (DECL_REGISTER (decl))
8663 DECL_C_HARD_REGISTER (decl) = 1;
8664 }
8665
8666 /* We don't create any RTL for local variables. */
8667 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
8668 return;
8669
8670 /* We defer emission of local statics until the corresponding
8671 DECL_STMT is expanded. */
8672 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
8673
8674 /* We try to defer namespace-scope static constants so that they are
8675 not emitted into the object file unnecessarily. */
8676 if (!DECL_VIRTUAL_P (decl)
8677 && TREE_READONLY (decl)
8678 && DECL_INITIAL (decl) != NULL_TREE
8679 && DECL_INITIAL (decl) != error_mark_node
8680 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
8681 && toplev
8682 && !TREE_PUBLIC (decl))
8683 {
8684 /* Fool with the linkage of static consts according to #pragma
8685 interface. */
8686 if (!interface_unknown && !TREE_PUBLIC (decl))
8687 {
8688 TREE_PUBLIC (decl) = 1;
8689 DECL_EXTERNAL (decl) = interface_only;
8690 }
8691
8692 defer_p = 1;
8693 }
8694 /* Likewise for template instantiations. */
8695 else if (DECL_COMDAT (decl))
8696 defer_p = 1;
8697
8698 /* If we're deferring the variable, we only need to make RTL if
8699 there's an ASMSPEC. Otherwise, we'll lazily create it later when
8700 we need it. (There's no way to lazily create RTL for things that
8701 have assembly specs because the information about the specifier
8702 isn't stored in the tree, yet) */
8703 if (defer_p && asmspec)
8704 make_decl_rtl (decl, asmspec);
8705 /* If we're not deferring, go ahead and assemble the variable. */
8706 else if (!defer_p)
8707 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8708 }
8709
8710 /* The old ARM scoping rules injected variables declared in the
8711 initialization statement of a for-statement into the surrounding
8712 scope. We support this usage, in order to be backward-compatible.
8713 DECL is a just-declared VAR_DECL; if necessary inject its
8714 declaration into the surrounding scope. */
8715
8716 void
maybe_inject_for_scope_var(decl)8717 maybe_inject_for_scope_var (decl)
8718 tree decl;
8719 {
8720 timevar_push (TV_NAME_LOOKUP);
8721
8722 if (!DECL_NAME (decl))
8723 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
8724
8725 /* Declarations of __FUNCTION__ and its ilk appear magically when
8726 the variable is first used. If that happens to be inside a
8727 for-loop, we don't want to do anything special. */
8728 if (DECL_PRETTY_FUNCTION_P (decl))
8729 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
8730
8731 if (current_binding_level->is_for_scope)
8732 {
8733 struct cp_binding_level *outer
8734 = current_binding_level->level_chain;
8735
8736 /* Check to see if the same name is already bound at the outer
8737 level, either because it was directly declared, or because a
8738 dead for-decl got preserved. In either case, the code would
8739 not have been valid under the ARM scope rules, so clear
8740 is_for_scope for the current_binding_level.
8741
8742 Otherwise, we need to preserve the temp slot for decl to last
8743 into the outer binding level. */
8744
8745 cxx_binding *outer_binding
8746 = IDENTIFIER_BINDING (DECL_NAME (decl))->previous;
8747
8748 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
8749 && (TREE_CODE (BINDING_VALUE (outer_binding))
8750 == VAR_DECL)
8751 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
8752 {
8753 BINDING_VALUE (outer_binding)
8754 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
8755 current_binding_level->is_for_scope = 0;
8756 }
8757 else if (DECL_IN_MEMORY_P (decl))
8758 preserve_temp_slots (DECL_RTL (decl));
8759 }
8760
8761 timevar_pop (TV_NAME_LOOKUP);
8762 }
8763
8764 /* Generate code to initialize DECL (a local variable). */
8765
8766 static void
initialize_local_var(decl,init)8767 initialize_local_var (decl, init)
8768 tree decl;
8769 tree init;
8770 {
8771 tree type = TREE_TYPE (decl);
8772 tree cleanup;
8773
8774 my_friendly_assert (TREE_CODE (decl) == VAR_DECL
8775 || TREE_CODE (decl) == RESULT_DECL,
8776 20021010);
8777 my_friendly_assert (!TREE_STATIC (decl), 20021010);
8778
8779 if (DECL_SIZE (decl) == NULL_TREE)
8780 {
8781 /* If we used it already as memory, it must stay in memory. */
8782 DECL_INITIAL (decl) = NULL_TREE;
8783 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
8784 }
8785
8786 if (DECL_SIZE (decl) && type != error_mark_node)
8787 {
8788 int already_used;
8789
8790 /* Compute and store the initial value. */
8791 already_used = TREE_USED (decl) || TREE_USED (type);
8792
8793 /* Perform the initialization. */
8794 if (init)
8795 {
8796 int saved_stmts_are_full_exprs_p;
8797
8798 my_friendly_assert (building_stmt_tree (), 20000906);
8799 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
8800 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
8801 finish_expr_stmt (init);
8802 current_stmt_tree ()->stmts_are_full_exprs_p =
8803 saved_stmts_are_full_exprs_p;
8804 }
8805
8806 /* Set this to 0 so we can tell whether an aggregate which was
8807 initialized was ever used. Don't do this if it has a
8808 destructor, so we don't complain about the 'resource
8809 allocation is initialization' idiom. Now set
8810 attribute((unused)) on types so decls of that type will be
8811 marked used. (see TREE_USED, above.) */
8812 if (TYPE_NEEDS_CONSTRUCTING (type)
8813 && ! already_used
8814 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
8815 && DECL_NAME (decl))
8816 TREE_USED (decl) = 0;
8817 else if (already_used)
8818 TREE_USED (decl) = 1;
8819 }
8820
8821 /* Generate a cleanup, if necessary. */
8822 cleanup = cxx_maybe_build_cleanup (decl);
8823 if (DECL_SIZE (decl) && cleanup)
8824 finish_decl_cleanup (decl, cleanup);
8825 }
8826
8827 /* Finish processing of a declaration;
8828 install its line number and initial value.
8829 If the length of an array type is not known before,
8830 it must be determined now, from the initial value, or it is an error.
8831
8832 INIT holds the value of an initializer that should be allowed to escape
8833 the normal rules.
8834
8835 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
8836 if the (init) syntax was used. */
8837
8838 void
cp_finish_decl(decl,init,asmspec_tree,flags)8839 cp_finish_decl (decl, init, asmspec_tree, flags)
8840 tree decl, init;
8841 tree asmspec_tree;
8842 int flags;
8843 {
8844 tree type;
8845 tree ttype = NULL_TREE;
8846 tree cleanup;
8847 const char *asmspec = NULL;
8848 int was_readonly = 0;
8849
8850 if (! decl)
8851 {
8852 if (init)
8853 error ("assignment (not initialization) in declaration");
8854 return;
8855 }
8856
8857 /* Assume no cleanup is required. */
8858 cleanup = NULL_TREE;
8859
8860 /* If a name was specified, get the string. */
8861 if (global_scope_p (current_binding_level))
8862 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
8863 if (asmspec_tree)
8864 asmspec = TREE_STRING_POINTER (asmspec_tree);
8865
8866 if (init && TREE_CODE (init) == NAMESPACE_DECL)
8867 {
8868 error ("cannot initialize `%D' to namespace `%D'",
8869 decl, init);
8870 init = NULL_TREE;
8871 }
8872
8873 if (current_class_type
8874 && CP_DECL_CONTEXT (decl) == current_class_type
8875 && TYPE_BEING_DEFINED (current_class_type)
8876 && (DECL_INITIAL (decl) || init))
8877 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
8878
8879 if (TREE_CODE (decl) == VAR_DECL
8880 && DECL_CONTEXT (decl)
8881 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
8882 && DECL_CONTEXT (decl) != current_namespace
8883 && init)
8884 {
8885 /* Leave the namespace of the object. */
8886 pop_decl_namespace ();
8887 }
8888
8889 type = TREE_TYPE (decl);
8890
8891 if (type == error_mark_node)
8892 return;
8893
8894 if (TYPE_HAS_MUTABLE_P (type))
8895 TREE_READONLY (decl) = 0;
8896
8897 if (processing_template_decl)
8898 {
8899 /* Add this declaration to the statement-tree. */
8900 if (at_function_scope_p ()
8901 && TREE_CODE (decl) != RESULT_DECL)
8902 add_decl_stmt (decl);
8903
8904 if (init && DECL_INITIAL (decl))
8905 DECL_INITIAL (decl) = init;
8906 goto finish_end0;
8907 }
8908
8909 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
8910 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
8911
8912 /* Take care of TYPE_DECLs up front. */
8913 if (TREE_CODE (decl) == TYPE_DECL)
8914 {
8915 if (type != error_mark_node
8916 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8917 {
8918 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8919 warning ("shadowing previous type declaration of `%#D'", decl);
8920 set_identifier_type_value (DECL_NAME (decl), type);
8921 CLASSTYPE_GOT_SEMICOLON (type) = 1;
8922 }
8923
8924 /* If we have installed this as the canonical typedef for this
8925 type, and that type has not been defined yet, delay emitting
8926 the debug information for it, as we will emit it later. */
8927 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
8928 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
8929 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8930
8931 rest_of_decl_compilation (decl, NULL,
8932 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8933 goto finish_end;
8934 }
8935
8936 if (TREE_CODE (decl) != FUNCTION_DECL)
8937 ttype = target_type (type);
8938
8939
8940 /* Currently, GNU C++ puts constants in text space, making them
8941 impossible to initialize. In the future, one would hope for
8942 an operating system which understood the difference between
8943 initialization and the running of a program. */
8944 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl))
8945 {
8946 was_readonly = 1;
8947 if (TYPE_NEEDS_CONSTRUCTING (type)
8948 || TREE_CODE (type) == REFERENCE_TYPE)
8949 TREE_READONLY (decl) = 0;
8950 }
8951
8952 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8953 {
8954 /* This must override the asm specifier which was placed by
8955 grokclassfn. Lay this out fresh. */
8956 SET_DECL_RTL (TREE_TYPE (decl), NULL_RTX);
8957 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
8958 make_decl_rtl (decl, asmspec);
8959 }
8960 else if (TREE_CODE (decl) == RESULT_DECL)
8961 init = check_initializer (decl, init, flags, &cleanup);
8962 else if (TREE_CODE (decl) == VAR_DECL)
8963 {
8964 /* Only PODs can have thread-local storage. Other types may require
8965 various kinds of non-trivial initialization. */
8966 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
8967 error ("`%D' cannot be thread-local because it has non-POD type `%T'",
8968 decl, TREE_TYPE (decl));
8969 /* Convert the initializer to the type of DECL, if we have not
8970 already initialized DECL. */
8971 if (!DECL_INITIALIZED_P (decl)
8972 /* If !DECL_EXTERNAL then DECL is being defined. In the
8973 case of a static data member initialized inside the
8974 class-specifier, there can be an initializer even if DECL
8975 is *not* defined. */
8976 && (!DECL_EXTERNAL (decl) || init))
8977 {
8978 init = check_initializer (decl, init, flags, &cleanup);
8979 /* Thread-local storage cannot be dynamically initialized. */
8980 if (DECL_THREAD_LOCAL (decl) && init)
8981 {
8982 error ("`%D' is thread-local and so cannot be dynamically "
8983 "initialized", decl);
8984 init = NULL_TREE;
8985 }
8986 /* Handle:
8987
8988 [dcl.init]
8989
8990 The memory occupied by any object of static storage
8991 duration is zero-initialized at program startup before
8992 any other initialization takes place.
8993
8994 We cannot create an appropriate initializer until after
8995 the type of DECL is finalized. If DECL_INITIAL is set,
8996 then the DECL is statically initialized, and any
8997 necessary zero-initialization has already been performed. */
8998 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
8999 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
9000 /*nelts=*/NULL_TREE,
9001 /*static_storage_p=*/true);
9002 /* Remember that the initialization for this variable has
9003 taken place. */
9004 DECL_INITIALIZED_P (decl) = 1;
9005 }
9006 /* If the variable has an array type, lay out the type, even if
9007 there is no initializer. It is valid to index through the
9008 array, and we must get TYPE_ALIGN set correctly on the array
9009 type. */
9010 else if (TREE_CODE (type) == ARRAY_TYPE)
9011 layout_type (type);
9012 }
9013
9014 /* Add this declaration to the statement-tree. This needs to happen
9015 after the call to check_initializer so that the DECL_STMT for a
9016 reference temp is added before the DECL_STMT for the reference itself. */
9017 if (building_stmt_tree ()
9018 && at_function_scope_p ()
9019 && TREE_CODE (decl) != RESULT_DECL)
9020 add_decl_stmt (decl);
9021
9022 if (TREE_CODE (decl) == VAR_DECL)
9023 layout_var_decl (decl);
9024
9025 /* Output the assembler code and/or RTL code for variables and functions,
9026 unless the type is an undefined structure or union.
9027 If not, it will get done when the type is completed. */
9028 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
9029 || TREE_CODE (decl) == RESULT_DECL)
9030 {
9031 if (TREE_CODE (decl) == VAR_DECL)
9032 maybe_commonize_var (decl);
9033
9034 make_rtl_for_nonlocal_decl (decl, init, asmspec);
9035
9036 if (TREE_CODE (type) == FUNCTION_TYPE
9037 || TREE_CODE (type) == METHOD_TYPE)
9038 abstract_virtuals_error (decl,
9039 strip_array_types (TREE_TYPE (type)));
9040 else
9041 abstract_virtuals_error (decl, strip_array_types (type));
9042
9043 if (TREE_CODE (decl) == FUNCTION_DECL
9044 || TREE_TYPE (decl) == error_mark_node)
9045 /* No initialization required. */
9046 ;
9047 else if (DECL_EXTERNAL (decl)
9048 && ! (DECL_LANG_SPECIFIC (decl)
9049 && DECL_NOT_REALLY_EXTERN (decl)))
9050 {
9051 if (init)
9052 DECL_INITIAL (decl) = init;
9053 }
9054 else
9055 {
9056 /* A variable definition. */
9057 if (DECL_FUNCTION_SCOPE_P (decl))
9058 {
9059 /* This is a local declaration. */
9060 if (doing_semantic_analysis_p ())
9061 maybe_inject_for_scope_var (decl);
9062 /* Initialize the local variable. */
9063 if (processing_template_decl)
9064 {
9065 if (init || DECL_INITIAL (decl) == error_mark_node)
9066 DECL_INITIAL (decl) = init;
9067 }
9068 else if (!TREE_STATIC (decl))
9069 initialize_local_var (decl, init);
9070 }
9071
9072 if (TREE_STATIC (decl))
9073 expand_static_init (decl, init);
9074 }
9075 finish_end0:
9076
9077 /* Undo call to `pushclass' that was done in `start_decl'
9078 due to initialization of qualified member variable.
9079 I.e., Foo::x = 10; */
9080 {
9081 tree context = CP_DECL_CONTEXT (decl);
9082 if (context
9083 && TYPE_P (context)
9084 && (TREE_CODE (decl) == VAR_DECL
9085 /* We also have a pushclass done that we need to undo here
9086 if we're at top level and declare a method. */
9087 || TREE_CODE (decl) == FUNCTION_DECL)
9088 /* If size hasn't been set, we're still defining it,
9089 and therefore inside the class body; don't pop
9090 the binding level.. */
9091 && COMPLETE_TYPE_P (context)
9092 && context == current_class_type)
9093 pop_nested_class ();
9094 }
9095 }
9096
9097 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
9098 reference, insert it in the statement-tree now. */
9099 if (cleanup)
9100 add_stmt (cleanup);
9101
9102 finish_end:
9103
9104 if (was_readonly)
9105 TREE_READONLY (decl) = 1;
9106 }
9107
9108 /* This is here for a midend callback from c-common.c */
9109
9110 void
finish_decl(decl,init,asmspec_tree)9111 finish_decl (decl, init, asmspec_tree)
9112 tree decl, init;
9113 tree asmspec_tree;
9114 {
9115 cp_finish_decl (decl, init, asmspec_tree, 0);
9116 }
9117
9118 /* Returns a declaration for a VAR_DECL as if:
9119
9120 extern "C" TYPE NAME;
9121
9122 had been seen. Used to create compiler-generated global
9123 variables. */
9124
9125 tree
declare_global_var(name,type)9126 declare_global_var (name, type)
9127 tree name;
9128 tree type;
9129 {
9130 tree decl;
9131
9132 push_to_top_level ();
9133 decl = build_decl (VAR_DECL, name, type);
9134 TREE_PUBLIC (decl) = 1;
9135 DECL_EXTERNAL (decl) = 1;
9136 DECL_ARTIFICIAL (decl) = 1;
9137 pushdecl (decl);
9138 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
9139 pop_from_top_level ();
9140
9141 return decl;
9142 }
9143
9144 /* Returns a pointer to the `atexit' function. Note that if
9145 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
9146 `__cxa_atexit' function specified in the IA64 C++ ABI. */
9147
9148 static tree
get_atexit_node()9149 get_atexit_node ()
9150 {
9151 tree atexit_fndecl;
9152 tree arg_types;
9153 tree fn_type;
9154 tree fn_ptr_type;
9155 const char *name;
9156
9157 if (atexit_node)
9158 return atexit_node;
9159
9160 if (flag_use_cxa_atexit)
9161 {
9162 /* The declaration for `__cxa_atexit' is:
9163
9164 int __cxa_atexit (void (*)(void *), void *, void *)
9165
9166 We build up the argument types and then then function type
9167 itself. */
9168
9169 /* First, build the pointer-to-function type for the first
9170 argument. */
9171 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9172 fn_type = build_function_type (void_type_node, arg_types);
9173 fn_ptr_type = build_pointer_type (fn_type);
9174 /* Then, build the rest of the argument types. */
9175 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9176 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
9177 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
9178 /* And the final __cxa_atexit type. */
9179 fn_type = build_function_type (integer_type_node, arg_types);
9180 fn_ptr_type = build_pointer_type (fn_type);
9181 name = "__cxa_atexit";
9182 }
9183 else
9184 {
9185 /* The declaration for `atexit' is:
9186
9187 int atexit (void (*)());
9188
9189 We build up the argument types and then then function type
9190 itself. */
9191 fn_type = build_function_type (void_type_node, void_list_node);
9192 fn_ptr_type = build_pointer_type (fn_type);
9193 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
9194 /* Build the final atexit type. */
9195 fn_type = build_function_type (integer_type_node, arg_types);
9196 name = "atexit";
9197 }
9198
9199 /* Now, build the function declaration. */
9200 push_lang_context (lang_name_c);
9201 atexit_fndecl = build_library_fn_ptr (name, fn_type);
9202 mark_used (atexit_fndecl);
9203 pop_lang_context ();
9204 atexit_node = default_conversion (atexit_fndecl);
9205
9206 return atexit_node;
9207 }
9208
9209 /* Returns the __dso_handle VAR_DECL. */
9210
9211 static tree
get_dso_handle_node()9212 get_dso_handle_node ()
9213 {
9214 if (dso_handle_node)
9215 return dso_handle_node;
9216
9217 /* Declare the variable. */
9218 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
9219 ptr_type_node);
9220
9221 return dso_handle_node;
9222 }
9223
9224 /* Begin a new function with internal linkage whose job will be simply
9225 to destroy some particular variable. */
9226
9227 static tree
start_cleanup_fn()9228 start_cleanup_fn ()
9229 {
9230 static int counter = 0;
9231 int old_interface_only = interface_only;
9232 int old_interface_unknown = interface_unknown;
9233 char name[32];
9234 tree parmtypes;
9235 tree fntype;
9236 tree fndecl;
9237
9238 push_to_top_level ();
9239
9240 /* No need to mangle this. */
9241 push_lang_context (lang_name_c);
9242
9243 interface_only = 0;
9244 interface_unknown = 1;
9245
9246 /* Build the parameter-types. */
9247 parmtypes = void_list_node;
9248 /* Functions passed to __cxa_atexit take an additional parameter.
9249 We'll just ignore it. After we implement the new calling
9250 convention for destructors, we can eliminate the use of
9251 additional cleanup functions entirely in the -fnew-abi case. */
9252 if (flag_use_cxa_atexit)
9253 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
9254 /* Build the function type itself. */
9255 fntype = build_function_type (void_type_node, parmtypes);
9256 /* Build the name of the function. */
9257 sprintf (name, "__tcf_%d", counter++);
9258 /* Build the function declaration. */
9259 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
9260 /* It's a function with internal linkage, generated by the
9261 compiler. */
9262 TREE_PUBLIC (fndecl) = 0;
9263 DECL_ARTIFICIAL (fndecl) = 1;
9264 /* Make the function `inline' so that it is only emitted if it is
9265 actually needed. It is unlikely that it will be inlined, since
9266 it is only called via a function pointer, but we avoid unnecessary
9267 emissions this way. */
9268 DECL_INLINE (fndecl) = 1;
9269 /* Build the parameter. */
9270 if (flag_use_cxa_atexit)
9271 {
9272 tree parmdecl;
9273
9274 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
9275 DECL_CONTEXT (parmdecl) = fndecl;
9276 TREE_USED (parmdecl) = 1;
9277 DECL_ARGUMENTS (fndecl) = parmdecl;
9278 }
9279
9280 pushdecl (fndecl);
9281 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
9282
9283 interface_unknown = old_interface_unknown;
9284 interface_only = old_interface_only;
9285
9286 pop_lang_context ();
9287
9288 return current_function_decl;
9289 }
9290
9291 /* Finish the cleanup function begun by start_cleanup_fn. */
9292
9293 static void
end_cleanup_fn()9294 end_cleanup_fn ()
9295 {
9296 expand_body (finish_function (0));
9297
9298 pop_from_top_level ();
9299 }
9300
9301 /* Generate code to handle the destruction of DECL, an object with
9302 static storage duration. */
9303
9304 void
register_dtor_fn(decl)9305 register_dtor_fn (decl)
9306 tree decl;
9307 {
9308 tree cleanup;
9309 tree compound_stmt;
9310 tree args;
9311 tree fcall;
9312
9313 int saved_flag_access_control;
9314
9315 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
9316 return;
9317
9318 /* Call build_cleanup before we enter the anonymous function so that
9319 any access checks will be done relative to the current scope,
9320 rather than the scope of the anonymous function. */
9321 build_cleanup (decl);
9322
9323 /* Now start the function. */
9324 cleanup = start_cleanup_fn ();
9325
9326 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
9327 to the original function, rather than the anonymous one. That
9328 will make the back-end think that nested functions are in use,
9329 which causes confusion. */
9330 saved_flag_access_control = flag_access_control;
9331 flag_access_control = 0;
9332 fcall = build_cleanup (decl);
9333 flag_access_control = saved_flag_access_control;
9334
9335 /* Create the body of the anonymous function. */
9336 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
9337 finish_expr_stmt (fcall);
9338 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
9339 end_cleanup_fn ();
9340
9341 /* Call atexit with the cleanup function. */
9342 cxx_mark_addressable (cleanup);
9343 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
9344 if (flag_use_cxa_atexit)
9345 {
9346 args = tree_cons (NULL_TREE,
9347 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
9348 NULL_TREE);
9349 args = tree_cons (NULL_TREE, null_pointer_node, args);
9350 args = tree_cons (NULL_TREE, cleanup, args);
9351 }
9352 else
9353 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
9354 finish_expr_stmt (build_function_call (get_atexit_node (), args));
9355 }
9356
9357 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
9358 is its initializer. Generate code to handle the construction
9359 and destruction of DECL. */
9360
9361 static void
expand_static_init(decl,init)9362 expand_static_init (decl, init)
9363 tree decl;
9364 tree init;
9365 {
9366 tree oldstatic;
9367
9368 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20021010);
9369 my_friendly_assert (TREE_STATIC (decl), 20021010);
9370
9371 /* Some variables require no initialization. */
9372 if (!init
9373 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
9374 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
9375 return;
9376
9377 oldstatic = value_member (decl, static_aggregates);
9378
9379 if (oldstatic)
9380 {
9381 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
9382 error ("multiple initializations given for `%D'", decl);
9383 }
9384 else if (! toplevel_bindings_p ())
9385 {
9386 /* Emit code to perform this initialization but once. */
9387 tree if_stmt;
9388 tree then_clause;
9389 tree assignment;
9390 tree guard;
9391 tree guard_init;
9392
9393 /* Emit code to perform this initialization but once. This code
9394 looks like:
9395
9396 static int guard = 0;
9397 if (!guard) {
9398 // Do initialization.
9399 guard = 1;
9400 // Register variable for destruction at end of program.
9401 }
9402
9403 Note that the `temp' variable is only set to 1 *after* the
9404 initialization is complete. This ensures that an exception,
9405 thrown during the construction, will cause the variable to
9406 reinitialized when we pass through this code again, as per:
9407
9408 [stmt.dcl]
9409
9410 If the initialization exits by throwing an exception, the
9411 initialization is not complete, so it will be tried again
9412 the next time control enters the declaration.
9413
9414 In theory, this process should be thread-safe, too; multiple
9415 threads should not be able to initialize the variable more
9416 than once. We don't yet attempt to ensure thread-safety. */
9417
9418 /* Create the guard variable. */
9419 guard = get_guard (decl);
9420
9421 /* Begin the conditional initialization. */
9422 if_stmt = begin_if_stmt ();
9423 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
9424 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
9425
9426 /* Do the initialization itself. */
9427 assignment = init ? init : NULL_TREE;
9428
9429 /* Once the assignment is complete, set TEMP to 1. Since the
9430 construction of the static object is complete at this point,
9431 we want to make sure TEMP is set to 1 even if a temporary
9432 constructed during the initialization throws an exception
9433 when it is destroyed. So, we combine the initialization and
9434 the assignment to TEMP into a single expression, ensuring
9435 that when we call finish_expr_stmt the cleanups will not be
9436 run until after TEMP is set to 1. */
9437 guard_init = set_guard (guard);
9438 if (assignment)
9439 {
9440 assignment = tree_cons (NULL_TREE, assignment,
9441 build_tree_list (NULL_TREE,
9442 guard_init));
9443 assignment = build_compound_expr (assignment);
9444 }
9445 else
9446 assignment = guard_init;
9447 finish_expr_stmt (assignment);
9448
9449 /* Use atexit to register a function for destroying this static
9450 variable. */
9451 register_dtor_fn (decl);
9452
9453 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
9454 finish_then_clause (if_stmt);
9455 finish_if_stmt ();
9456 }
9457 else
9458 static_aggregates = tree_cons (init, decl, static_aggregates);
9459 }
9460
9461 /* Finish the declaration of a catch-parameter. */
9462
9463 tree
start_handler_parms(declspecs,declarator)9464 start_handler_parms (declspecs, declarator)
9465 tree declspecs;
9466 tree declarator;
9467 {
9468 tree decl;
9469 if (declspecs)
9470 {
9471 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
9472 1, NULL);
9473 if (decl == NULL_TREE)
9474 error ("invalid catch parameter");
9475 }
9476 else
9477 decl = NULL_TREE;
9478
9479 return decl;
9480 }
9481
9482
9483 /* Make TYPE a complete type based on INITIAL_VALUE.
9484 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
9485 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
9486
9487 int
complete_array_type(type,initial_value,do_default)9488 complete_array_type (type, initial_value, do_default)
9489 tree type, initial_value;
9490 int do_default;
9491 {
9492 register tree maxindex = NULL_TREE;
9493 int value = 0;
9494
9495 if (initial_value)
9496 {
9497 /* An array of character type can be initialized from a
9498 brace-enclosed string constant. */
9499 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
9500 && TREE_CODE (initial_value) == CONSTRUCTOR
9501 && CONSTRUCTOR_ELTS (initial_value)
9502 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
9503 == STRING_CST)
9504 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
9505 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
9506
9507 /* Note MAXINDEX is really the maximum index, one less than the
9508 size. */
9509 if (TREE_CODE (initial_value) == STRING_CST)
9510 {
9511 int eltsize
9512 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
9513 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
9514 / eltsize) - 1, 0);
9515 }
9516 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
9517 {
9518 tree elts = CONSTRUCTOR_ELTS (initial_value);
9519
9520 maxindex = ssize_int (-1);
9521 for (; elts; elts = TREE_CHAIN (elts))
9522 {
9523 if (TREE_PURPOSE (elts))
9524 maxindex = TREE_PURPOSE (elts);
9525 else
9526 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
9527 }
9528 maxindex = copy_node (maxindex);
9529 }
9530 else
9531 {
9532 /* Make an error message unless that happened already. */
9533 if (initial_value != error_mark_node)
9534 value = 1;
9535 else
9536 initial_value = NULL_TREE;
9537
9538 /* Prevent further error messages. */
9539 maxindex = build_int_2 (0, 0);
9540 }
9541 }
9542
9543 if (!maxindex)
9544 {
9545 if (do_default)
9546 maxindex = build_int_2 (0, 0);
9547 value = 2;
9548 }
9549
9550 if (maxindex)
9551 {
9552 tree itype;
9553 tree domain;
9554
9555 domain = build_index_type (maxindex);
9556 TYPE_DOMAIN (type) = domain;
9557
9558 if (! TREE_TYPE (maxindex))
9559 TREE_TYPE (maxindex) = domain;
9560 if (initial_value)
9561 itype = TREE_TYPE (initial_value);
9562 else
9563 itype = NULL;
9564 if (itype && !TYPE_DOMAIN (itype))
9565 TYPE_DOMAIN (itype) = domain;
9566 /* The type of the main variant should never be used for arrays
9567 of different sizes. It should only ever be completed with the
9568 size of the array. */
9569 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
9570 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
9571 }
9572
9573 /* Lay out the type now that we can get the real answer. */
9574
9575 layout_type (type);
9576
9577 return value;
9578 }
9579
9580 /* Return zero if something is declared to be a member of type
9581 CTYPE when in the context of CUR_TYPE. STRING is the error
9582 message to print in that case. Otherwise, quietly return 1. */
9583
9584 static int
member_function_or_else(ctype,cur_type,flags)9585 member_function_or_else (ctype, cur_type, flags)
9586 tree ctype, cur_type;
9587 enum overload_flags flags;
9588 {
9589 if (ctype && ctype != cur_type)
9590 {
9591 if (flags == DTOR_FLAG)
9592 error ("destructor for alien class `%T' cannot be a member",
9593 ctype);
9594 else
9595 error ("constructor for alien class `%T' cannot be a member",
9596 ctype);
9597 return 0;
9598 }
9599 return 1;
9600 }
9601
9602 /* Subroutine of `grokdeclarator'. */
9603
9604 /* Generate errors possibly applicable for a given set of specifiers.
9605 This is for ARM $7.1.2. */
9606
9607 static void
bad_specifiers(object,type,virtualp,quals,inlinep,friendp,raises)9608 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
9609 tree object;
9610 const char *type;
9611 int virtualp, quals, friendp, raises, inlinep;
9612 {
9613 if (virtualp)
9614 error ("`%D' declared as a `virtual' %s", object, type);
9615 if (inlinep)
9616 error ("`%D' declared as an `inline' %s", object, type);
9617 if (quals)
9618 error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
9619 object, type);
9620 if (friendp)
9621 cp_error_at ("`%D' declared as a friend", object);
9622 if (raises
9623 && (TREE_CODE (object) == TYPE_DECL
9624 || (!TYPE_PTRFN_P (TREE_TYPE (object))
9625 && !TYPE_REFFN_P (TREE_TYPE (object))
9626 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
9627 cp_error_at ("`%D' declared with an exception specification", object);
9628 }
9629
9630 /* CTYPE is class type, or null if non-class.
9631 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
9632 or METHOD_TYPE.
9633 DECLARATOR is the function's name.
9634 VIRTUALP is truthvalue of whether the function is virtual or not.
9635 FLAGS are to be passed through to `grokclassfn'.
9636 QUALS are qualifiers indicating whether the function is `const'
9637 or `volatile'.
9638 RAISES is a list of exceptions that this function can raise.
9639 CHECK is 1 if we must find this method in CTYPE, 0 if we should
9640 not look, and -1 if we should not call `grokclassfn' at all.
9641
9642 Returns `NULL_TREE' if something goes wrong, after issuing
9643 applicable error messages. */
9644
9645 static tree
grokfndecl(ctype,type,declarator,orig_declarator,virtualp,flags,quals,raises,check,friendp,publicp,inlinep,funcdef_flag,template_count,in_namespace)9646 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
9647 raises, check, friendp, publicp, inlinep, funcdef_flag,
9648 template_count, in_namespace)
9649 tree ctype, type;
9650 tree declarator;
9651 tree orig_declarator;
9652 int virtualp;
9653 enum overload_flags flags;
9654 tree quals, raises;
9655 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
9656 tree in_namespace;
9657 {
9658 tree decl;
9659 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
9660 int has_default_arg = 0;
9661 tree t;
9662
9663 if (raises)
9664 type = build_exception_variant (type, raises);
9665
9666 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
9667 /* Propagate volatile out from type to decl. */
9668 if (TYPE_VOLATILE (type))
9669 TREE_THIS_VOLATILE (decl) = 1;
9670
9671 /* If this decl has namespace scope, set that up. */
9672 if (in_namespace)
9673 set_decl_namespace (decl, in_namespace, friendp);
9674 else if (!ctype)
9675 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9676
9677 /* `main' and builtins have implicit 'C' linkage. */
9678 if ((MAIN_NAME_P (declarator)
9679 || (IDENTIFIER_LENGTH (declarator) > 10
9680 && IDENTIFIER_POINTER (declarator)[0] == '_'
9681 && IDENTIFIER_POINTER (declarator)[1] == '_'
9682 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
9683 && current_lang_name == lang_name_cplusplus
9684 && ctype == NULL_TREE
9685 /* NULL_TREE means global namespace. */
9686 && DECL_CONTEXT (decl) == NULL_TREE)
9687 SET_DECL_LANGUAGE (decl, lang_c);
9688
9689 /* Should probably propagate const out from type to decl I bet (mrs). */
9690 if (staticp)
9691 {
9692 DECL_STATIC_FUNCTION_P (decl) = 1;
9693 DECL_CONTEXT (decl) = ctype;
9694 }
9695
9696 if (ctype)
9697 DECL_CONTEXT (decl) = ctype;
9698
9699 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9700 {
9701 if (processing_template_decl)
9702 error ("cannot declare `::main' to be a template");
9703 if (inlinep)
9704 error ("cannot declare `::main' to be inline");
9705 if (!publicp)
9706 error ("cannot declare `::main' to be static");
9707 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9708 integer_type_node))
9709 error ("`main' must return `int'");
9710 inlinep = 0;
9711 publicp = 1;
9712 }
9713
9714 /* Members of anonymous types and local classes have no linkage; make
9715 them internal. */
9716 /* FIXME what if it gets a name from typedef? */
9717 if (ctype && (TYPE_ANONYMOUS_P (ctype)
9718 || decl_function_context (TYPE_MAIN_DECL (ctype))))
9719 publicp = 0;
9720
9721 if (publicp)
9722 {
9723 /* [basic.link]: A name with no linkage (notably, the name of a class
9724 or enumeration declared in a local scope) shall not be used to
9725 declare an entity with linkage.
9726
9727 Only check this for public decls for now. */
9728 t = no_linkage_check (TREE_TYPE (decl));
9729 if (t)
9730 {
9731 if (TYPE_ANONYMOUS_P (t))
9732 {
9733 if (DECL_EXTERN_C_P (decl))
9734 /* Allow this; it's pretty common in C. */;
9735 else
9736 {
9737 pedwarn ("non-local function `%#D' uses anonymous type",
9738 decl);
9739 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
9740 cp_pedwarn_at ("\
9741 `%#D' does not refer to the unqualified type, so it is not used for linkage",
9742 TYPE_NAME (t));
9743 }
9744 }
9745 else
9746 pedwarn ("non-local function `%#D' uses local type `%T'",
9747 decl, t);
9748 }
9749 }
9750
9751 TREE_PUBLIC (decl) = publicp;
9752 if (! publicp)
9753 {
9754 DECL_INTERFACE_KNOWN (decl) = 1;
9755 DECL_NOT_REALLY_EXTERN (decl) = 1;
9756 }
9757
9758 DID_INLINE_FUNC (decl) = 0;
9759 /* If the declaration was declared inline, mark it as such. */
9760 if (inlinep)
9761 DECL_DECLARED_INLINE_P (decl) = 1;
9762 /* We inline functions that are explicitly declared inline, or, when
9763 the user explicitly asks us to, all functions. */
9764 if (DECL_DECLARED_INLINE_P (decl))
9765 DECL_INLINE (decl) = 1;
9766 if (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag)
9767 {
9768 DID_INLINE_FUNC (decl) = 1;
9769 DECL_INLINE (decl) = 1;
9770 }
9771
9772 DECL_EXTERNAL (decl) = 1;
9773 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
9774 {
9775 error ("%smember function `%D' cannot have `%T' method qualifier",
9776 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
9777 quals = NULL_TREE;
9778 }
9779
9780 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
9781 grok_op_properties (decl, friendp);
9782
9783 if (ctype && decl_function_context (decl))
9784 DECL_NO_STATIC_CHAIN (decl) = 1;
9785
9786 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
9787 if (TREE_PURPOSE (t)
9788 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
9789 {
9790 has_default_arg = 1;
9791 break;
9792 }
9793
9794 if (friendp
9795 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
9796 {
9797 if (funcdef_flag)
9798 error
9799 ("defining explicit specialization `%D' in friend declaration",
9800 orig_declarator);
9801 else
9802 {
9803 tree fns = TREE_OPERAND (orig_declarator, 0);
9804 tree args = TREE_OPERAND (orig_declarator, 1);
9805
9806 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
9807 {
9808 /* Something like `template <class T> friend void f<T>()'. */
9809 error ("invalid use of template-id `%D' in declaration of primary template",
9810 orig_declarator);
9811 return NULL_TREE;
9812 }
9813
9814
9815 /* A friend declaration of the form friend void f<>(). Record
9816 the information in the TEMPLATE_ID_EXPR. */
9817 SET_DECL_IMPLICIT_INSTANTIATION (decl);
9818
9819 if (TREE_CODE (fns) == COMPONENT_REF)
9820 {
9821 /* Due to bison parser ickiness, we will have already looked
9822 up an operator_name or PFUNCNAME within the current class
9823 (see template_id in parse.y). If the current class contains
9824 such a name, we'll get a COMPONENT_REF here. Undo that. */
9825
9826 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
9827 == current_class_type, 20001120);
9828 fns = TREE_OPERAND (fns, 1);
9829 }
9830 my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
9831 || TREE_CODE (fns) == LOOKUP_EXPR
9832 || TREE_CODE (fns) == OVERLOAD, 20001120);
9833 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
9834
9835 if (has_default_arg)
9836 {
9837 error ("default arguments are not allowed in declaration of friend template specialization `%D'",
9838 decl);
9839 return NULL_TREE;
9840 }
9841
9842 if (inlinep)
9843 {
9844 error ("`inline' is not allowed in declaration of friend template specialization `%D'",
9845 decl);
9846 return NULL_TREE;
9847 }
9848 }
9849 }
9850
9851 if (has_default_arg)
9852 add_defarg_fn (decl);
9853
9854 if (funcdef_flag)
9855 /* Make the init_value nonzero so pushdecl knows this is not
9856 tentative. error_mark_node is replaced later with the BLOCK. */
9857 DECL_INITIAL (decl) = error_mark_node;
9858
9859 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9860 TREE_NOTHROW (decl) = 1;
9861
9862 /* Caller will do the rest of this. */
9863 if (check < 0)
9864 return decl;
9865
9866 if (flags == NO_SPECIAL && ctype && constructor_name (ctype) == declarator)
9867 DECL_CONSTRUCTOR_P (decl) = 1;
9868
9869 /* Function gets the ugly name, field gets the nice one. This call
9870 may change the type of the function (because of default
9871 parameters)! */
9872 if (ctype != NULL_TREE)
9873 grokclassfn (ctype, decl, flags, quals);
9874
9875 decl = check_explicit_specialization (orig_declarator, decl,
9876 template_count,
9877 2 * (funcdef_flag != 0) +
9878 4 * (friendp != 0));
9879 if (decl == error_mark_node)
9880 return NULL_TREE;
9881
9882 if (ctype != NULL_TREE
9883 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
9884 && check)
9885 {
9886 tree old_decl;
9887
9888 old_decl = check_classfn (ctype, decl);
9889
9890 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
9891 /* Because grokfndecl is always supposed to return a
9892 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9893 here. We depend on our callers to figure out that its
9894 really a template that's being returned. */
9895 old_decl = DECL_TEMPLATE_RESULT (old_decl);
9896
9897 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
9898 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9899 {
9900 /* Remove the `this' parm added by grokclassfn.
9901 XXX Isn't this done in start_function, too? */
9902 revert_static_member_fn (decl);
9903 last_function_parms = TREE_CHAIN (last_function_parms);
9904 }
9905 if (old_decl && DECL_ARTIFICIAL (old_decl))
9906 error ("definition of implicitly-declared `%D'", old_decl);
9907
9908 if (old_decl)
9909 {
9910 /* Since we've smashed OLD_DECL to its
9911 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9912 if (TREE_CODE (decl) == TEMPLATE_DECL)
9913 decl = DECL_TEMPLATE_RESULT (decl);
9914
9915 /* Attempt to merge the declarations. This can fail, in
9916 the case of some invalid specialization declarations. */
9917 if (!duplicate_decls (decl, old_decl))
9918 error ("no `%#D' member function declared in class `%T'",
9919 decl, ctype);
9920 return old_decl;
9921 }
9922 }
9923
9924 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9925 return NULL_TREE;
9926
9927 if (ctype == NULL_TREE || check)
9928 return decl;
9929
9930 if (virtualp)
9931 DECL_VIRTUAL_P (decl) = 1;
9932
9933 return decl;
9934 }
9935
9936 /* Create a VAR_DECL named NAME with the indicated TYPE.
9937
9938 If SCOPE is non-NULL, it is the class type or namespace containing
9939 the variable. If SCOPE is NULL, the variable should is created in
9940 the innermost enclosings scope. */
9941
9942 static tree
grokvardecl(type,name,specbits_in,initialized,constp,scope)9943 grokvardecl (type, name, specbits_in, initialized, constp, scope)
9944 tree type;
9945 tree name;
9946 RID_BIT_TYPE *specbits_in;
9947 int initialized;
9948 int constp;
9949 tree scope;
9950 {
9951 tree decl;
9952 RID_BIT_TYPE specbits;
9953
9954 my_friendly_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE,
9955 20020808);
9956
9957 specbits = *specbits_in;
9958
9959 /* Compute the scope in which to place the variable. */
9960 if (!scope)
9961 {
9962 /* An explicit "extern" specifier indicates a namespace-scope
9963 variable. */
9964 if (RIDBIT_SETP (RID_EXTERN, specbits))
9965 scope = current_namespace;
9966 else if (!at_function_scope_p ())
9967 {
9968 scope = current_scope ();
9969 if (!scope)
9970 scope = current_namespace;
9971 }
9972 }
9973
9974 if (scope
9975 && (/* If the variable is a namespace-scope variable declared in a
9976 template, we need DECL_LANG_SPECIFIC. */
9977 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9978 /* Similarly for namespace-scope variables with language linkage
9979 other than C++. */
9980 || (TREE_CODE (scope) == NAMESPACE_DECL
9981 && current_lang_name != lang_name_cplusplus)
9982 /* Similarly for static data members. */
9983 || TYPE_P (scope)))
9984 decl = build_lang_decl (VAR_DECL, name, type);
9985 else
9986 decl = build_decl (VAR_DECL, name, type);
9987
9988 if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
9989 set_decl_namespace (decl, scope, 0);
9990 else
9991 DECL_CONTEXT (decl) = scope;
9992
9993 if (name && scope && current_lang_name != lang_name_c)
9994 /* We can't mangle lazily here because we don't have any
9995 way to recover whether or not a variable was `extern
9996 "C"' later. */
9997 mangle_decl (decl);
9998
9999 if (RIDBIT_SETP (RID_EXTERN, specbits))
10000 {
10001 DECL_THIS_EXTERN (decl) = 1;
10002 DECL_EXTERNAL (decl) = !initialized;
10003 }
10004
10005 /* In class context, static means one per class,
10006 public access, and static storage. */
10007 if (DECL_CLASS_SCOPE_P (decl))
10008 {
10009 TREE_PUBLIC (decl) = 1;
10010 TREE_STATIC (decl) = 1;
10011 DECL_EXTERNAL (decl) = 0;
10012 }
10013 /* At top level, either `static' or no s.c. makes a definition
10014 (perhaps tentative), and absence of `static' makes it public. */
10015 else if (toplevel_bindings_p ())
10016 {
10017 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
10018 && (DECL_THIS_EXTERN (decl) || ! constp));
10019 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
10020 }
10021 /* Not at top level, only `static' makes a static definition. */
10022 else
10023 {
10024 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
10025 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
10026 }
10027
10028 if (RIDBIT_SETP (RID_THREAD, specbits))
10029 {
10030 if (targetm.have_tls)
10031 DECL_THREAD_LOCAL (decl) = 1;
10032 else
10033 /* A mere warning is sure to result in improper semantics
10034 at runtime. Don't bother to allow this to compile. */
10035 error ("thread-local storage not supported for this target");
10036 }
10037
10038 if (TREE_PUBLIC (decl))
10039 {
10040 /* [basic.link]: A name with no linkage (notably, the name of a class
10041 or enumeration declared in a local scope) shall not be used to
10042 declare an entity with linkage.
10043
10044 Only check this for public decls for now. */
10045 tree t = no_linkage_check (TREE_TYPE (decl));
10046 if (t)
10047 {
10048 if (TYPE_ANONYMOUS_P (t))
10049 /* Ignore for now; `enum { foo } e' is pretty common. */;
10050 else
10051 pedwarn ("non-local variable `%#D' uses local type `%T'",
10052 decl, t);
10053 }
10054 }
10055
10056 return decl;
10057 }
10058
10059 /* Create and return a canonical pointer to member function type, for
10060 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
10061
10062 tree
build_ptrmemfunc_type(tree type)10063 build_ptrmemfunc_type (tree type)
10064 {
10065 tree fields[4];
10066 tree t;
10067 tree unqualified_variant = NULL_TREE;
10068
10069 if (type == error_mark_node)
10070 return type;
10071
10072 /* If a canonical type already exists for this type, use it. We use
10073 this method instead of type_hash_canon, because it only does a
10074 simple equality check on the list of field members. */
10075
10076 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
10077 return t;
10078
10079 /* Make sure that we always have the unqualified pointer-to-member
10080 type first. */
10081 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
10082 unqualified_variant
10083 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
10084
10085 t = make_aggr_type (RECORD_TYPE);
10086 /* Let the front-end know this is a pointer to member function... */
10087 TYPE_PTRMEMFUNC_FLAG (t) = 1;
10088 /* ... and not really an aggregate. */
10089 SET_IS_AGGR_TYPE (t, 0);
10090
10091 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
10092 fields[1] = build_decl (FIELD_DECL, delta_identifier,
10093 delta_type_node);
10094 finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
10095
10096 /* Zap out the name so that the back-end will give us the debugging
10097 information for this anonymous RECORD_TYPE. */
10098 TYPE_NAME (t) = NULL_TREE;
10099
10100 /* If this is not the unqualified form of this pointer-to-member
10101 type, set the TYPE_MAIN_VARIANT for this type to be the
10102 unqualified type. Since they are actually RECORD_TYPEs that are
10103 not variants of each other, we must do this manually. */
10104 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
10105 {
10106 t = build_qualified_type (t, cp_type_quals (type));
10107 TYPE_MAIN_VARIANT (t) = unqualified_variant;
10108 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
10109 TYPE_NEXT_VARIANT (unqualified_variant) = t;
10110 }
10111
10112 /* Cache this pointer-to-member type so that we can find it again
10113 later. */
10114 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
10115
10116 /* Seems to be wanted. */
10117 CLASSTYPE_GOT_SEMICOLON (t) = 1;
10118
10119 return t;
10120 }
10121
10122 /* Create and return a pointer to data member type. */
10123
10124 tree
build_ptrmem_type(tree class_type,tree member_type)10125 build_ptrmem_type (tree class_type, tree member_type)
10126 {
10127 return build_pointer_type (build_offset_type (class_type, member_type));
10128 }
10129
10130 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
10131 Check to see that the definition is valid. Issue appropriate error
10132 messages. Return 1 if the definition is particularly bad, or 0
10133 otherwise. */
10134
10135 int
check_static_variable_definition(decl,type)10136 check_static_variable_definition (decl, type)
10137 tree decl;
10138 tree type;
10139 {
10140 /* Motion 10 at San Diego: If a static const integral data member is
10141 initialized with an integral constant expression, the initializer
10142 may appear either in the declaration (within the class), or in
10143 the definition, but not both. If it appears in the class, the
10144 member is a member constant. The file-scope definition is always
10145 required. */
10146 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
10147 {
10148 error ("invalid in-class initialization of static data member of non-integral type `%T'",
10149 type);
10150 /* If we just return the declaration, crashes will sometimes
10151 occur. We therefore return void_type_node, as if this was a
10152 friend declaration, to cause callers to completely ignore
10153 this declaration. */
10154 return 1;
10155 }
10156 else if (!CP_TYPE_CONST_P (type))
10157 error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
10158 decl);
10159 else if (pedantic && !INTEGRAL_TYPE_P (type))
10160 pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
10161
10162 return 0;
10163 }
10164
10165 /* Given the SIZE (i.e., number of elements) in an array, compute an
10166 appropriate index type for the array. If non-NULL, NAME is the
10167 name of the thing being declared. */
10168
10169 tree
compute_array_index_type(name,size)10170 compute_array_index_type (name, size)
10171 tree name;
10172 tree size;
10173 {
10174 tree itype;
10175
10176 /* If this involves a template parameter, it will be a constant at
10177 instantiation time, but we don't know what the value is yet.
10178 Even if no template parameters are involved, we may an expression
10179 that is not a constant; we don't even simplify `1 + 2' when
10180 processing a template. */
10181 if (processing_template_decl)
10182 {
10183 /* Resolve a qualified reference to an enumerator or static
10184 const data member of ours. */
10185 if (TREE_CODE (size) == SCOPE_REF
10186 && TREE_OPERAND (size, 0) == current_class_type)
10187 {
10188 tree t = lookup_field (current_class_type,
10189 TREE_OPERAND (size, 1), 0, 0);
10190 if (t)
10191 size = t;
10192 }
10193
10194 return build_index_type (build_min (MINUS_EXPR, sizetype,
10195 size, integer_one_node));
10196 }
10197
10198 /* The size might be the result of a cast. */
10199 STRIP_TYPE_NOPS (size);
10200
10201 /* It might be a const variable or enumeration constant. */
10202 size = decl_constant_value (size);
10203
10204 /* The array bound must be an integer type. */
10205 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
10206 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
10207 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
10208 {
10209 if (name)
10210 error ("size of array `%D' has non-integer type", name);
10211 else
10212 error ("size of array has non-integer type");
10213 size = integer_one_node;
10214 }
10215
10216 /* Normally, the array-bound will be a constant. */
10217 if (TREE_CODE (size) == INTEGER_CST)
10218 {
10219 /* Check to see if the array bound overflowed. Make that an
10220 error, no matter how generous we're being. */
10221 int old_flag_pedantic_errors = flag_pedantic_errors;
10222 int old_pedantic = pedantic;
10223 pedantic = flag_pedantic_errors = 1;
10224 constant_expression_warning (size);
10225 pedantic = old_pedantic;
10226 flag_pedantic_errors = old_flag_pedantic_errors;
10227
10228 /* An array must have a positive number of elements. */
10229 if (INT_CST_LT (size, integer_zero_node))
10230 {
10231 if (name)
10232 error ("size of array `%D' is negative", name);
10233 else
10234 error ("size of array is negative");
10235 size = integer_one_node;
10236 }
10237 /* As an extension we allow zero-sized arrays. We always allow
10238 them in system headers because glibc uses them. */
10239 else if (integer_zerop (size) && pedantic && !in_system_header)
10240 {
10241 if (name)
10242 pedwarn ("ISO C++ forbids zero-size array `%D'", name);
10243 else
10244 pedwarn ("ISO C++ forbids zero-size array");
10245 }
10246 }
10247 else if (TREE_CONSTANT (size))
10248 {
10249 /* `(int) &fn' is not a valid array bound. */
10250 if (name)
10251 error ("size of array `%D' is not an integral constant-expression",
10252 name);
10253 else
10254 error ("size of array is not an integral constant-expression");
10255 }
10256
10257 /* Compute the index of the largest element in the array. It is
10258 one less than the number of elements in the array. */
10259 itype
10260 = fold (cp_build_binary_op (MINUS_EXPR,
10261 cp_convert (ssizetype, size),
10262 cp_convert (ssizetype,
10263 integer_one_node)));
10264
10265 /* Check for variable-sized arrays. We allow such things as an
10266 extension, even though they are not allowed in ANSI/ISO C++. */
10267 if (!TREE_CONSTANT (itype))
10268 {
10269 if (pedantic)
10270 {
10271 if (name)
10272 pedwarn ("ISO C++ forbids variable-size array `%D'",
10273 name);
10274 else
10275 pedwarn ("ISO C++ forbids variable-size array");
10276 }
10277
10278 /* Create a variable-sized array index type. */
10279 itype = variable_size (itype);
10280 }
10281 /* Make sure that there was no overflow when creating to a signed
10282 index type. (For example, on a 32-bit machine, an array with
10283 size 2^32 - 1 is too big.) */
10284 else if (TREE_OVERFLOW (itype))
10285 {
10286 error ("overflow in array dimension");
10287 TREE_OVERFLOW (itype) = 0;
10288 }
10289
10290 /* Create and return the appropriate index type. */
10291 return build_index_type (itype);
10292 }
10293
10294 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
10295 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
10296 with this type. */
10297
10298 static tree
create_array_type_for_decl(name,type,size)10299 create_array_type_for_decl (name, type, size)
10300 tree name;
10301 tree type;
10302 tree size;
10303 {
10304 tree itype = NULL_TREE;
10305 const char* error_msg;
10306
10307 /* If things have already gone awry, bail now. */
10308 if (type == error_mark_node || size == error_mark_node)
10309 return error_mark_node;
10310
10311 /* Assume that everything will go OK. */
10312 error_msg = NULL;
10313
10314 /* There are some types which cannot be array elements. */
10315 switch (TREE_CODE (type))
10316 {
10317 case VOID_TYPE:
10318 error_msg = "array of void";
10319 break;
10320
10321 case FUNCTION_TYPE:
10322 error_msg = "array of functions";
10323 break;
10324
10325 case REFERENCE_TYPE:
10326 error_msg = "array of references";
10327 break;
10328
10329 case OFFSET_TYPE:
10330 error_msg = "array of data members";
10331 break;
10332
10333 case METHOD_TYPE:
10334 error_msg = "array of function members";
10335 break;
10336
10337 default:
10338 break;
10339 }
10340
10341 /* If something went wrong, issue an error-message and return. */
10342 if (error_msg)
10343 {
10344 if (name)
10345 error ("declaration of `%D' as %s", name, error_msg);
10346 else
10347 error ("creating %s", error_msg);
10348
10349 return error_mark_node;
10350 }
10351
10352 /* [dcl.array]
10353
10354 The constant expressions that specify the bounds of the arrays
10355 can be omitted only for the first member of the sequence. */
10356 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
10357 {
10358 if (name)
10359 error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
10360 name);
10361 else
10362 error ("multidimensional array must have bounds for all dimensions except the first");
10363
10364 return error_mark_node;
10365 }
10366
10367 /* Figure out the index type for the array. */
10368 if (size)
10369 itype = compute_array_index_type (name, size);
10370
10371 return build_cplus_array_type (type, itype);
10372 }
10373
10374 /* Check that it's OK to declare a function with the indicated TYPE.
10375 SFK indicates the kind of special function (if any) that this
10376 function is. OPTYPE is the type given in a conversion operator
10377 declaration. Returns the actual return type of the function; that
10378 may be different than TYPE if an error occurs, or for certain
10379 special functions. */
10380
10381 static tree
check_special_function_return_type(sfk,type,optype)10382 check_special_function_return_type (sfk, type, optype)
10383 special_function_kind sfk;
10384 tree type;
10385 tree optype;
10386 {
10387 switch (sfk)
10388 {
10389 case sfk_constructor:
10390 if (type)
10391 error ("return type specification for constructor invalid");
10392
10393 type = void_type_node;
10394 break;
10395
10396 case sfk_destructor:
10397 if (type)
10398 error ("return type specification for destructor invalid");
10399 type = void_type_node;
10400 break;
10401
10402 case sfk_conversion:
10403 if (type && !same_type_p (type, optype))
10404 error ("operator `%T' declared to return `%T'", optype, type);
10405 else if (type)
10406 pedwarn ("return type specified for `operator %T'", optype);
10407 type = optype;
10408 break;
10409
10410 default:
10411 abort ();
10412 break;
10413 }
10414
10415 return type;
10416 }
10417
10418 /* Given declspecs and a declarator,
10419 determine the name and type of the object declared
10420 and construct a ..._DECL node for it.
10421 (In one case we can return a ..._TYPE node instead.
10422 For invalid input we sometimes return 0.)
10423
10424 DECLSPECS is a chain of tree_list nodes whose value fields
10425 are the storage classes and type specifiers.
10426
10427 DECL_CONTEXT says which syntactic context this declaration is in:
10428 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10429 FUNCDEF for a function definition. Like NORMAL but a few different
10430 error messages in each case. Return value may be zero meaning
10431 this definition is too screwy to try to parse.
10432 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
10433 handle member functions (which have FIELD context).
10434 Return value may be zero meaning this definition is too screwy to
10435 try to parse.
10436 PARM for a parameter declaration (either within a function prototype
10437 or before a function body). Make a PARM_DECL, or return void_type_node.
10438 CATCHPARM for a parameter declaration before a catch clause.
10439 TYPENAME if for a typename (in a cast or sizeof).
10440 Don't make a DECL node; just return the ..._TYPE node.
10441 FIELD for a struct or union field; make a FIELD_DECL.
10442 BITFIELD for a field with specified width.
10443 INITIALIZED is 1 if the decl has an initializer.
10444
10445 ATTRLIST is a pointer to the list of attributes, which may be NULL
10446 if there are none; *ATTRLIST may be modified if attributes from inside
10447 the declarator should be applied to the declaration.
10448
10449 In the TYPENAME case, DECLARATOR is really an abstract declarator.
10450 It may also be so in the PARM case, for a prototype where the
10451 argument type is specified but not the name.
10452
10453 This function is where the complicated C meanings of `static'
10454 and `extern' are interpreted.
10455
10456 For C++, if there is any monkey business to do, the function which
10457 calls this one must do it, i.e., prepending instance variables,
10458 renaming overloaded function names, etc.
10459
10460 Note that for this C++, it is an error to define a method within a class
10461 which does not belong to that class.
10462
10463 Except in the case where SCOPE_REFs are implicitly known (such as
10464 methods within a class being redundantly qualified),
10465 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
10466 (class_name::decl_name). The caller must also deal with this.
10467
10468 If a constructor or destructor is seen, and the context is FIELD,
10469 then the type gains the attribute TREE_HAS_x. If such a declaration
10470 is erroneous, NULL_TREE is returned.
10471
10472 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
10473 function, these are the qualifiers to give to the `this' pointer. We
10474 apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
10475
10476 May return void_type_node if the declarator turned out to be a friend.
10477 See grokfield for details. */
10478
10479 tree
grokdeclarator(declarator,declspecs,decl_context,initialized,attrlist)10480 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
10481 tree declspecs;
10482 tree declarator;
10483 enum decl_context decl_context;
10484 int initialized;
10485 tree *attrlist;
10486 {
10487 RID_BIT_TYPE specbits;
10488 int nclasses = 0;
10489 tree spec;
10490 tree type = NULL_TREE;
10491 int longlong = 0;
10492 int type_quals;
10493 int virtualp, explicitp, friendp, inlinep, staticp;
10494 int explicit_int = 0;
10495 int explicit_char = 0;
10496 int defaulted_int = 0;
10497 int extern_langp = 0;
10498 tree dependant_name = NULL_TREE;
10499
10500 tree typedef_decl = NULL_TREE;
10501 const char *name;
10502 tree typedef_type = NULL_TREE;
10503 int funcdef_flag = 0;
10504 enum tree_code innermost_code = ERROR_MARK;
10505 int bitfield = 0;
10506 #if 0
10507 /* See the code below that used this. */
10508 tree decl_attr = NULL_TREE;
10509 #endif
10510 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
10511 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
10512 tree init = NULL_TREE;
10513
10514 /* Keep track of what sort of function is being processed
10515 so that we can warn about default return values, or explicit
10516 return values which do not match prescribed defaults. */
10517 special_function_kind sfk = sfk_none;
10518
10519 tree dname = NULL_TREE;
10520 tree ctype = current_class_type;
10521 tree ctor_return_type = NULL_TREE;
10522 enum overload_flags flags = NO_SPECIAL;
10523 tree quals = NULL_TREE;
10524 tree raises = NULL_TREE;
10525 int template_count = 0;
10526 tree in_namespace = NULL_TREE;
10527 tree returned_attrs = NULL_TREE;
10528
10529 RIDBIT_RESET_ALL (specbits);
10530 if (decl_context == FUNCDEF)
10531 funcdef_flag = 1, decl_context = NORMAL;
10532 else if (decl_context == MEMFUNCDEF)
10533 funcdef_flag = -1, decl_context = FIELD;
10534 else if (decl_context == BITFIELD)
10535 bitfield = 1, decl_context = FIELD;
10536
10537 /* Look inside a declarator for the name being declared
10538 and get it as a string, for an error message. */
10539 {
10540 tree *next = &declarator;
10541 register tree decl;
10542 name = NULL;
10543
10544 while (next && *next)
10545 {
10546 decl = *next;
10547 switch (TREE_CODE (decl))
10548 {
10549 case TREE_LIST:
10550 /* For attributes. */
10551 next = &TREE_VALUE (decl);
10552 break;
10553
10554 case COND_EXPR:
10555 ctype = NULL_TREE;
10556 next = &TREE_OPERAND (decl, 0);
10557 break;
10558
10559 case BIT_NOT_EXPR: /* For C++ destructors! */
10560 {
10561 tree name = TREE_OPERAND (decl, 0);
10562 tree rename = NULL_TREE;
10563
10564 my_friendly_assert (flags == NO_SPECIAL, 152);
10565 flags = DTOR_FLAG;
10566 sfk = sfk_destructor;
10567 if (TREE_CODE (name) == TYPE_DECL)
10568 TREE_OPERAND (decl, 0) = name = constructor_name (name);
10569 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
10570 if (ctype == NULL_TREE)
10571 {
10572 if (current_class_type == NULL_TREE)
10573 {
10574 error ("destructors must be member functions");
10575 flags = NO_SPECIAL;
10576 }
10577 else
10578 {
10579 tree t = constructor_name (current_class_name);
10580 if (t != name)
10581 rename = t;
10582 }
10583 }
10584 else
10585 {
10586 tree t = constructor_name (ctype);
10587 if (t != name)
10588 rename = t;
10589 }
10590
10591 if (rename)
10592 {
10593 error ("destructor `%T' must match class name `%T'",
10594 name, rename);
10595 TREE_OPERAND (decl, 0) = rename;
10596 }
10597 next = &name;
10598 }
10599 break;
10600
10601 case ADDR_EXPR: /* C++ reference declaration */
10602 /* Fall through. */
10603 case ARRAY_REF:
10604 case INDIRECT_REF:
10605 ctype = NULL_TREE;
10606 innermost_code = TREE_CODE (decl);
10607 next = &TREE_OPERAND (decl, 0);
10608 break;
10609
10610 case CALL_EXPR:
10611 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
10612 {
10613 /* This is actually a variable declaration using
10614 constructor syntax. We need to call start_decl and
10615 cp_finish_decl so we can get the variable
10616 initialized... */
10617
10618 tree attributes;
10619
10620 if (decl_context != NORMAL)
10621 {
10622 error ("variable declaration is not allowed here");
10623 return error_mark_node;
10624 }
10625
10626 *next = TREE_OPERAND (decl, 0);
10627 init = CALL_DECLARATOR_PARMS (decl);
10628
10629 if (attrlist)
10630 {
10631 attributes = *attrlist;
10632 }
10633 else
10634 {
10635 attributes = NULL_TREE;
10636 }
10637
10638 decl = start_decl (declarator, declspecs, 1,
10639 attributes, NULL_TREE);
10640 decl_type_access_control (decl);
10641 if (decl)
10642 {
10643 /* Look for __unused__ attribute */
10644 if (TREE_USED (TREE_TYPE (decl)))
10645 TREE_USED (decl) = 1;
10646 finish_decl (decl, init, NULL_TREE);
10647 }
10648 else
10649 error ("invalid declarator");
10650 return NULL_TREE;
10651 }
10652 innermost_code = TREE_CODE (decl);
10653 if (decl_context == FIELD && ctype == NULL_TREE)
10654 ctype = current_class_type;
10655 if (ctype
10656 && TREE_OPERAND (decl, 0)
10657 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
10658 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 0)),
10659 ctype)))
10660 TREE_OPERAND (decl, 0) = constructor_name (ctype);
10661 next = &TREE_OPERAND (decl, 0);
10662 decl = *next;
10663 if (ctype != NULL_TREE
10664 && decl != NULL_TREE && flags != DTOR_FLAG
10665 && decl == constructor_name (ctype))
10666 {
10667 sfk = sfk_constructor;
10668 ctor_return_type = ctype;
10669 }
10670 ctype = NULL_TREE;
10671 break;
10672
10673 case TEMPLATE_ID_EXPR:
10674 {
10675 tree fns = TREE_OPERAND (decl, 0);
10676
10677 if (TREE_CODE (fns) == LOOKUP_EXPR)
10678 fns = TREE_OPERAND (fns, 0);
10679
10680 dname = fns;
10681 if (TREE_CODE (dname) == COMPONENT_REF)
10682 dname = TREE_OPERAND (dname, 1);
10683 if (TREE_CODE (dname) != IDENTIFIER_NODE)
10684 {
10685 my_friendly_assert (is_overloaded_fn (dname),
10686 19990331);
10687 dname = DECL_NAME (get_first_fn (dname));
10688 }
10689 }
10690 /* Fall through. */
10691
10692 case IDENTIFIER_NODE:
10693 if (TREE_CODE (decl) == IDENTIFIER_NODE)
10694 dname = decl;
10695
10696 next = 0;
10697
10698 if (C_IS_RESERVED_WORD (dname))
10699 {
10700 error ("declarator-id missing; using reserved word `%D'",
10701 dname);
10702 name = IDENTIFIER_POINTER (dname);
10703 }
10704 else if (!IDENTIFIER_TYPENAME_P (dname))
10705 name = IDENTIFIER_POINTER (dname);
10706 else
10707 {
10708 my_friendly_assert (flags == NO_SPECIAL, 154);
10709 flags = TYPENAME_FLAG;
10710 ctor_return_type = TREE_TYPE (dname);
10711 sfk = sfk_conversion;
10712 if (IDENTIFIER_GLOBAL_VALUE (dname)
10713 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (dname))
10714 == TYPE_DECL))
10715 name = IDENTIFIER_POINTER (dname);
10716 else
10717 name = "<invalid operator>";
10718 }
10719 break;
10720
10721 /* C++ extension */
10722 case SCOPE_REF:
10723 {
10724 /* Perform error checking, and decide on a ctype. */
10725 tree cname = TREE_OPERAND (decl, 0);
10726 if (cname == NULL_TREE)
10727 ctype = NULL_TREE;
10728 else if (TREE_CODE (cname) == NAMESPACE_DECL)
10729 {
10730 ctype = NULL_TREE;
10731 in_namespace = TREE_OPERAND (decl, 0);
10732 TREE_OPERAND (decl, 0) = NULL_TREE;
10733 }
10734 else if (! is_aggr_type (cname, 1))
10735 TREE_OPERAND (decl, 0) = NULL_TREE;
10736 /* Must test TREE_OPERAND (decl, 1), in case user gives
10737 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
10738 else if (TREE_OPERAND (decl, 1)
10739 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
10740 ctype = cname;
10741 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
10742 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
10743 {
10744 /* This might be declaring a member of a template
10745 parm to be a friend. */
10746 ctype = cname;
10747 dependant_name = TREE_OPERAND (decl, 1);
10748 }
10749 else if (ctype == NULL_TREE)
10750 ctype = cname;
10751 else if (TREE_COMPLEXITY (decl) == current_class_depth)
10752 TREE_OPERAND (decl, 0) = ctype;
10753 else
10754 {
10755 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
10756 {
10757 error ("type `%T' is not derived from type `%T'",
10758 cname, ctype);
10759 TREE_OPERAND (decl, 0) = NULL_TREE;
10760 }
10761 else
10762 ctype = cname;
10763 }
10764
10765 /* If the parser sees something like "void a::b" where
10766 "a::b" is a namespace, it will build a SCOPE_REF with
10767 a NAMESPACE_DECL, rather than an IDENTIFIER_NODE, as
10768 the second operand. Since the SCOPE_REF is being
10769 used as a declarator, we recover from that here. */
10770 if (TREE_CODE (TREE_OPERAND (decl, 1)) == NAMESPACE_DECL)
10771 TREE_OPERAND (decl, 1) = DECL_NAME (TREE_OPERAND (decl, 1));
10772
10773 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
10774 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 1)),
10775 ctype))
10776 TREE_OPERAND (decl, 1) = constructor_name (ctype);
10777 next = &TREE_OPERAND (decl, 1);
10778 decl = *next;
10779 if (ctype)
10780 {
10781 if (TREE_CODE (decl) == IDENTIFIER_NODE
10782 && constructor_name (ctype) == decl)
10783 {
10784 sfk = sfk_constructor;
10785 ctor_return_type = ctype;
10786 }
10787 else if (TREE_CODE (decl) == BIT_NOT_EXPR
10788 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
10789 && constructor_name_p (TREE_OPERAND (decl, 0),
10790 ctype))
10791 {
10792 sfk = sfk_destructor;
10793 ctor_return_type = ctype;
10794 flags = DTOR_FLAG;
10795 TREE_OPERAND (decl, 0) = constructor_name (ctype);
10796 next = &TREE_OPERAND (decl, 0);
10797 }
10798 }
10799 }
10800 break;
10801
10802 case ERROR_MARK:
10803 next = 0;
10804 break;
10805
10806 case TYPE_DECL:
10807 /* Parse error puts this typespec where
10808 a declarator should go. */
10809 error ("`%T' specified as declarator-id", DECL_NAME (decl));
10810 if (TREE_TYPE (decl) == current_class_type)
10811 error (" perhaps you want `%T' for a constructor",
10812 current_class_name);
10813 dname = DECL_NAME (decl);
10814 name = IDENTIFIER_POINTER (dname);
10815
10816 /* Avoid giving two errors for this. */
10817 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
10818
10819 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
10820 *next = dname;
10821 next = 0;
10822 break;
10823
10824 case BASELINK:
10825 next = &BASELINK_FUNCTIONS (decl);
10826 break;
10827
10828 case TEMPLATE_DECL:
10829 /* Sometimes, we see a template-name used as part of a
10830 decl-specifier like in
10831 std::allocator alloc;
10832 Handle that gracefully. */
10833 error ("invalid use of template-name '%E' in a declarator", decl);
10834 return error_mark_node;
10835 break;
10836
10837 default:
10838 my_friendly_assert (0, 20020917);
10839 }
10840 }
10841 }
10842
10843 /* A function definition's declarator must have the form of
10844 a function declarator. */
10845
10846 if (funcdef_flag && innermost_code != CALL_EXPR)
10847 return 0;
10848
10849 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
10850 && innermost_code != CALL_EXPR
10851 && ! (ctype && declspecs == NULL_TREE))
10852 {
10853 error ("declaration of `%D' as non-function", dname);
10854 return void_type_node;
10855 }
10856
10857 /* Anything declared one level down from the top level
10858 must be one of the parameters of a function
10859 (because the body is at least two levels down). */
10860
10861 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10862 by not allowing C++ class definitions to specify their parameters
10863 with xdecls (must be spec.d in the parmlist).
10864
10865 Since we now wait to push a class scope until we are sure that
10866 we are in a legitimate method context, we must set oldcname
10867 explicitly (since current_class_name is not yet alive).
10868
10869 We also want to avoid calling this a PARM if it is in a namespace. */
10870
10871 if (decl_context == NORMAL && !toplevel_bindings_p ())
10872 {
10873 struct cp_binding_level *b = current_binding_level;
10874 current_binding_level = b->level_chain;
10875 if (current_binding_level != 0 && toplevel_bindings_p ())
10876 decl_context = PARM;
10877 current_binding_level = b;
10878 }
10879
10880 if (name == NULL)
10881 name = decl_context == PARM ? "parameter" : "type name";
10882
10883 /* Look through the decl specs and record which ones appear.
10884 Some typespecs are defined as built-in typenames.
10885 Others, the ones that are modifiers of other types,
10886 are represented by bits in SPECBITS: set the bits for
10887 the modifiers that appear. Storage class keywords are also in SPECBITS.
10888
10889 If there is a typedef name or a type, store the type in TYPE.
10890 This includes builtin typedefs such as `int'.
10891
10892 Set EXPLICIT_INT if the type is `int' or `char' and did not
10893 come from a user typedef.
10894
10895 Set LONGLONG if `long' is mentioned twice.
10896
10897 For C++, constructors and destructors have their own fast treatment. */
10898
10899 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
10900 {
10901 register int i;
10902 register tree id;
10903
10904 /* Certain parse errors slip through. For example,
10905 `int class;' is not caught by the parser. Try
10906 weakly to recover here. */
10907 if (TREE_CODE (spec) != TREE_LIST)
10908 return 0;
10909
10910 id = TREE_VALUE (spec);
10911
10912 /* If the entire declaration is itself tagged as deprecated then
10913 suppress reports of deprecated items. */
10914 if (!adding_implicit_members && id && TREE_DEPRECATED (id))
10915 {
10916 if (deprecated_state != DEPRECATED_SUPPRESS)
10917 warn_deprecated_use (id);
10918 }
10919
10920 if (TREE_CODE (id) == IDENTIFIER_NODE)
10921 {
10922 if (id == ridpointers[(int) RID_INT]
10923 || id == ridpointers[(int) RID_CHAR]
10924 || id == ridpointers[(int) RID_BOOL]
10925 || id == ridpointers[(int) RID_WCHAR])
10926 {
10927 if (type)
10928 {
10929 if (id == ridpointers[(int) RID_BOOL])
10930 error ("`bool' is now a keyword");
10931 else
10932 error ("extraneous `%T' ignored", id);
10933 }
10934 else
10935 {
10936 if (id == ridpointers[(int) RID_INT])
10937 explicit_int = 1;
10938 else if (id == ridpointers[(int) RID_CHAR])
10939 explicit_char = 1;
10940 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
10941 }
10942 goto found;
10943 }
10944 /* C++ aggregate types. */
10945 if (IDENTIFIER_HAS_TYPE_VALUE (id))
10946 {
10947 if (type)
10948 error ("multiple declarations `%T' and `%T'", type, id);
10949 else
10950 type = IDENTIFIER_TYPE_VALUE (id);
10951 goto found;
10952 }
10953
10954 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
10955 {
10956 if (ridpointers[i] == id)
10957 {
10958 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
10959 {
10960 if (pedantic && ! in_system_header && warn_long_long)
10961 pedwarn ("ISO C++ does not support `long long'");
10962 if (longlong)
10963 error ("`long long long' is too long for GCC");
10964 else
10965 longlong = 1;
10966 }
10967 else if (RIDBIT_SETP (i, specbits))
10968 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
10969
10970 /* Diagnose "__thread extern". Recall that this list
10971 is in the reverse order seen in the text. */
10972 if (i == (int)RID_THREAD)
10973 {
10974 if (RIDBIT_SETP (RID_EXTERN, specbits))
10975 error ("`__thread' before `extern'");
10976 if (RIDBIT_SETP (RID_STATIC, specbits))
10977 error ("`__thread' before `static'");
10978 }
10979
10980 if (i == (int)RID_EXTERN
10981 && TREE_PURPOSE (spec) == error_mark_node)
10982 /* This extern was part of a language linkage. */
10983 extern_langp = 1;
10984
10985 RIDBIT_SET (i, specbits);
10986 goto found;
10987 }
10988 }
10989 }
10990 else if (TREE_CODE (id) == TYPE_DECL)
10991 {
10992 if (type)
10993 error ("multiple declarations `%T' and `%T'", type,
10994 TREE_TYPE (id));
10995 else
10996 {
10997 type = TREE_TYPE (id);
10998 TREE_VALUE (spec) = type;
10999 typedef_decl = id;
11000 }
11001 goto found;
11002 }
11003 if (type)
11004 error ("two or more data types in declaration of `%s'", name);
11005 else if (TREE_CODE (id) == IDENTIFIER_NODE)
11006 {
11007 register tree t = lookup_name (id, 1);
11008 if (!t || TREE_CODE (t) != TYPE_DECL)
11009 error ("`%s' fails to be a typedef or built in type",
11010 IDENTIFIER_POINTER (id));
11011 else
11012 {
11013 type = TREE_TYPE (t);
11014 typedef_decl = t;
11015 }
11016 }
11017 else if (id != error_mark_node)
11018 /* Can't change CLASS nodes into RECORD nodes here! */
11019 type = id;
11020
11021 found: ;
11022 }
11023
11024 #if 0
11025 /* See the code below that used this. */
11026 if (typedef_decl)
11027 decl_attr = DECL_ATTRIBUTES (typedef_decl);
11028 #endif
11029 typedef_type = type;
11030
11031 /* No type at all: default to `int', and set DEFAULTED_INT
11032 because it was not a user-defined typedef. */
11033
11034 if (type == NULL_TREE
11035 && (RIDBIT_SETP (RID_SIGNED, specbits)
11036 || RIDBIT_SETP (RID_UNSIGNED, specbits)
11037 || RIDBIT_SETP (RID_LONG, specbits)
11038 || RIDBIT_SETP (RID_SHORT, specbits)))
11039 {
11040 /* These imply 'int'. */
11041 type = integer_type_node;
11042 defaulted_int = 1;
11043 }
11044
11045 if (sfk != sfk_none)
11046 type = check_special_function_return_type (sfk, type,
11047 ctor_return_type);
11048 else if (type == NULL_TREE)
11049 {
11050 int is_main;
11051
11052 explicit_int = -1;
11053
11054 /* We handle `main' specially here, because 'main () { }' is so
11055 common. With no options, it is allowed. With -Wreturn-type,
11056 it is a warning. It is only an error with -pedantic-errors. */
11057 is_main = (funcdef_flag
11058 && dname && MAIN_NAME_P (dname)
11059 && ctype == NULL_TREE
11060 && in_namespace == NULL_TREE
11061 && current_namespace == global_namespace);
11062
11063 if (in_system_header || flag_ms_extensions)
11064 /* Allow it, sigh. */;
11065 else if (pedantic || ! is_main)
11066 pedwarn ("ISO C++ forbids declaration of `%s' with no type",
11067 name);
11068 else if (warn_return_type)
11069 warning ("ISO C++ forbids declaration of `%s' with no type",
11070 name);
11071
11072 type = integer_type_node;
11073 }
11074
11075 if (type && IMPLICIT_TYPENAME_P (type))
11076 {
11077 /* The implicit typename extension is deprecated and will be
11078 removed. Warn about its use now. */
11079 warning ("`%T' is implicitly a typename", type);
11080 cp_deprecated ("implicit typename");
11081
11082 /* Now remove its implicitness, so that we don't warn again.
11083 For instance this might be a typedef, and we do not want to
11084 warn on uses of the typedef itself. Simply clearing the
11085 TREE_TYPE is insufficient. */
11086 type = copy_node (type);
11087 TREE_TYPE (type) = NULL_TREE;
11088 }
11089
11090 ctype = NULL_TREE;
11091
11092 /* Now process the modifiers that were specified
11093 and check for invalid combinations. */
11094
11095 /* Long double is a special combination. */
11096
11097 if (RIDBIT_SETP (RID_LONG, specbits)
11098 && TYPE_MAIN_VARIANT (type) == double_type_node)
11099 {
11100 RIDBIT_RESET (RID_LONG, specbits);
11101 type = build_qualified_type (long_double_type_node,
11102 cp_type_quals (type));
11103 }
11104
11105 /* Check all other uses of type modifiers. */
11106
11107 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
11108 || RIDBIT_SETP (RID_SIGNED, specbits)
11109 || RIDBIT_SETP (RID_LONG, specbits)
11110 || RIDBIT_SETP (RID_SHORT, specbits))
11111 {
11112 int ok = 0;
11113
11114 if (TREE_CODE (type) == REAL_TYPE)
11115 error ("short, signed or unsigned invalid for `%s'", name);
11116 else if (TREE_CODE (type) != INTEGER_TYPE)
11117 error ("long, short, signed or unsigned invalid for `%s'", name);
11118 else if (RIDBIT_SETP (RID_LONG, specbits)
11119 && RIDBIT_SETP (RID_SHORT, specbits))
11120 error ("long and short specified together for `%s'", name);
11121 else if ((RIDBIT_SETP (RID_LONG, specbits)
11122 || RIDBIT_SETP (RID_SHORT, specbits))
11123 && explicit_char)
11124 error ("long or short specified with char for `%s'", name);
11125 else if ((RIDBIT_SETP (RID_LONG, specbits)
11126 || RIDBIT_SETP (RID_SHORT, specbits))
11127 && TREE_CODE (type) == REAL_TYPE)
11128 error ("long or short specified with floating type for `%s'", name);
11129 else if (RIDBIT_SETP (RID_SIGNED, specbits)
11130 && RIDBIT_SETP (RID_UNSIGNED, specbits))
11131 error ("signed and unsigned given together for `%s'", name);
11132 else
11133 {
11134 ok = 1;
11135 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
11136 {
11137 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
11138 name);
11139 if (flag_pedantic_errors)
11140 ok = 0;
11141 }
11142 }
11143
11144 /* Discard the type modifiers if they are invalid. */
11145 if (! ok)
11146 {
11147 RIDBIT_RESET (RID_UNSIGNED, specbits);
11148 RIDBIT_RESET (RID_SIGNED, specbits);
11149 RIDBIT_RESET (RID_LONG, specbits);
11150 RIDBIT_RESET (RID_SHORT, specbits);
11151 longlong = 0;
11152 }
11153 }
11154
11155 if (RIDBIT_SETP (RID_COMPLEX, specbits)
11156 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
11157 {
11158 error ("complex invalid for `%s'", name);
11159 RIDBIT_RESET (RID_COMPLEX, specbits);
11160 }
11161
11162 /* Decide whether an integer type is signed or not.
11163 Optionally treat bitfields as signed by default. */
11164 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
11165 /* [class.bit]
11166
11167 It is implementation-defined whether a plain (neither
11168 explicitly signed or unsigned) char, short, int, or long
11169 bit-field is signed or unsigned.
11170
11171 Naturally, we extend this to long long as well. Note that
11172 this does not include wchar_t. */
11173 || (bitfield && !flag_signed_bitfields
11174 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
11175 /* A typedef for plain `int' without `signed' can be
11176 controlled just like plain `int', but a typedef for
11177 `signed int' cannot be so controlled. */
11178 && !(typedef_decl
11179 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
11180 && (TREE_CODE (type) == INTEGER_TYPE
11181 || TREE_CODE (type) == CHAR_TYPE)
11182 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
11183 {
11184 if (longlong)
11185 type = long_long_unsigned_type_node;
11186 else if (RIDBIT_SETP (RID_LONG, specbits))
11187 type = long_unsigned_type_node;
11188 else if (RIDBIT_SETP (RID_SHORT, specbits))
11189 type = short_unsigned_type_node;
11190 else if (type == char_type_node)
11191 type = unsigned_char_type_node;
11192 else if (typedef_decl)
11193 type = c_common_unsigned_type (type);
11194 else
11195 type = unsigned_type_node;
11196 }
11197 else if (RIDBIT_SETP (RID_SIGNED, specbits)
11198 && type == char_type_node)
11199 type = signed_char_type_node;
11200 else if (longlong)
11201 type = long_long_integer_type_node;
11202 else if (RIDBIT_SETP (RID_LONG, specbits))
11203 type = long_integer_type_node;
11204 else if (RIDBIT_SETP (RID_SHORT, specbits))
11205 type = short_integer_type_node;
11206
11207 if (RIDBIT_SETP (RID_COMPLEX, specbits))
11208 {
11209 /* If we just have "complex", it is equivalent to
11210 "complex double", but if any modifiers at all are specified it is
11211 the complex form of TYPE. E.g, "complex short" is
11212 "complex short int". */
11213
11214 if (defaulted_int && ! longlong
11215 && ! (RIDBIT_SETP (RID_LONG, specbits)
11216 || RIDBIT_SETP (RID_SHORT, specbits)
11217 || RIDBIT_SETP (RID_SIGNED, specbits)
11218 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
11219 type = complex_double_type_node;
11220 else if (type == integer_type_node)
11221 type = complex_integer_type_node;
11222 else if (type == float_type_node)
11223 type = complex_float_type_node;
11224 else if (type == double_type_node)
11225 type = complex_double_type_node;
11226 else if (type == long_double_type_node)
11227 type = complex_long_double_type_node;
11228 else
11229 type = build_complex_type (type);
11230 }
11231
11232 type_quals = TYPE_UNQUALIFIED;
11233 if (RIDBIT_SETP (RID_CONST, specbits))
11234 type_quals |= TYPE_QUAL_CONST;
11235 if (RIDBIT_SETP (RID_VOLATILE, specbits))
11236 type_quals |= TYPE_QUAL_VOLATILE;
11237 if (RIDBIT_SETP (RID_RESTRICT, specbits))
11238 type_quals |= TYPE_QUAL_RESTRICT;
11239 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
11240 error ("qualifiers are not allowed on declaration of `operator %T'",
11241 ctor_return_type);
11242
11243 type_quals |= cp_type_quals (type);
11244 type = cp_build_qualified_type_real
11245 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
11246 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
11247 /* We might have ignored or rejected some of the qualifiers. */
11248 type_quals = cp_type_quals (type);
11249
11250 staticp = 0;
11251 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
11252 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
11253 RIDBIT_RESET (RID_VIRTUAL, specbits);
11254 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
11255 RIDBIT_RESET (RID_EXPLICIT, specbits);
11256
11257 if (RIDBIT_SETP (RID_STATIC, specbits))
11258 staticp = 1 + (decl_context == FIELD);
11259
11260 if (virtualp && staticp == 2)
11261 {
11262 error ("member `%D' cannot be declared both virtual and static",
11263 dname);
11264 staticp = 0;
11265 }
11266 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
11267 RIDBIT_RESET (RID_FRIEND, specbits);
11268
11269 if (dependant_name && !friendp)
11270 {
11271 error ("`%T::%D' is not a valid declarator", ctype, dependant_name);
11272 return void_type_node;
11273 }
11274
11275 /* Warn if two storage classes are given. Default to `auto'. */
11276
11277 if (RIDBIT_ANY_SET (specbits))
11278 {
11279 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
11280 if (RIDBIT_SETP (RID_EXTERN, specbits) && !extern_langp) nclasses++;
11281 if (RIDBIT_SETP (RID_THREAD, specbits)) nclasses++;
11282 if (decl_context == PARM && nclasses > 0)
11283 error ("storage class specifiers invalid in parameter declarations");
11284 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
11285 {
11286 if (decl_context == PARM)
11287 error ("typedef declaration invalid in parameter declaration");
11288 nclasses++;
11289 }
11290 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
11291 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
11292 if (!nclasses && !friendp && extern_langp)
11293 nclasses++;
11294 }
11295
11296 /* Give error if `virtual' is used outside of class declaration. */
11297 if (virtualp
11298 && (current_class_name == NULL_TREE || decl_context != FIELD))
11299 {
11300 error ("virtual outside class declaration");
11301 virtualp = 0;
11302 }
11303
11304 /* Static anonymous unions are dealt with here. */
11305 if (staticp && decl_context == TYPENAME
11306 && TREE_CODE (declspecs) == TREE_LIST
11307 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
11308 decl_context = FIELD;
11309
11310 /* Warn about storage classes that are invalid for certain
11311 kinds of declarations (parameters, typenames, etc.). */
11312
11313 /* "static __thread" and "extern __thread" are allowed. */
11314 if (nclasses == 2
11315 && RIDBIT_SETP (RID_THREAD, specbits)
11316 && (RIDBIT_SETP (RID_EXTERN, specbits)
11317 || RIDBIT_SETP (RID_STATIC, specbits)))
11318 nclasses = 1;
11319
11320 if (nclasses > 1)
11321 error ("multiple storage classes in declaration of `%s'", name);
11322 else if (decl_context != NORMAL && nclasses > 0)
11323 {
11324 if ((decl_context == PARM || decl_context == CATCHPARM)
11325 && (RIDBIT_SETP (RID_REGISTER, specbits)
11326 || RIDBIT_SETP (RID_AUTO, specbits)))
11327 ;
11328 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
11329 ;
11330 else if (decl_context == FIELD
11331 /* C++ allows static class elements */
11332 && RIDBIT_SETP (RID_STATIC, specbits))
11333 /* C++ also allows inlines and signed and unsigned elements,
11334 but in those cases we don't come in here. */
11335 ;
11336 else
11337 {
11338 if (decl_context == FIELD)
11339 {
11340 tree tmp = NULL_TREE;
11341 register int op = 0;
11342
11343 if (declarator)
11344 {
11345 /* Avoid trying to get an operand off an identifier node. */
11346 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11347 tmp = declarator;
11348 else
11349 tmp = TREE_OPERAND (declarator, 0);
11350 op = IDENTIFIER_OPNAME_P (tmp);
11351 if (IDENTIFIER_TYPENAME_P (tmp))
11352 {
11353 if (IDENTIFIER_GLOBAL_VALUE (tmp)
11354 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (tmp))
11355 == TYPE_DECL))
11356 name = IDENTIFIER_POINTER (tmp);
11357 else
11358 name = "<invalid operator>";
11359 }
11360 }
11361 error ("storage class specified for %s `%s'",
11362 op ? "member operator" : "field",
11363 name);
11364 }
11365 else
11366 {
11367 if (decl_context == PARM || decl_context == CATCHPARM)
11368 error ("storage class specified for parameter `%s'", name);
11369 else
11370 error ("storage class specified for typename");
11371 }
11372 RIDBIT_RESET (RID_REGISTER, specbits);
11373 RIDBIT_RESET (RID_AUTO, specbits);
11374 RIDBIT_RESET (RID_EXTERN, specbits);
11375 RIDBIT_RESET (RID_THREAD, specbits);
11376 }
11377 }
11378 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
11379 {
11380 if (toplevel_bindings_p ())
11381 {
11382 /* It's common practice (and completely valid) to have a const
11383 be initialized and declared extern. */
11384 if (!(type_quals & TYPE_QUAL_CONST))
11385 warning ("`%s' initialized and declared `extern'", name);
11386 }
11387 else
11388 error ("`%s' has both `extern' and initializer", name);
11389 }
11390 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
11391 && ! toplevel_bindings_p ())
11392 error ("nested function `%s' declared `extern'", name);
11393 else if (toplevel_bindings_p ())
11394 {
11395 if (RIDBIT_SETP (RID_AUTO, specbits))
11396 error ("top-level declaration of `%s' specifies `auto'", name);
11397 }
11398 else if (RIDBIT_SETP (RID_THREAD, specbits)
11399 && !RIDBIT_SETP (RID_EXTERN, specbits)
11400 && !RIDBIT_SETP (RID_STATIC, specbits))
11401 {
11402 error ("function-scope `%s' implicitly auto and declared `__thread'",
11403 name);
11404 RIDBIT_RESET (RID_THREAD, specbits);
11405 }
11406
11407 if (nclasses > 0 && friendp)
11408 error ("storage class specifiers invalid in friend function declarations");
11409
11410 /* Now figure out the structure of the declarator proper.
11411 Descend through it, creating more complex types, until we reach
11412 the declared identifier (or NULL_TREE, in an abstract declarator). */
11413
11414 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
11415 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
11416 {
11417 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
11418 an INDIRECT_REF (for *...),
11419 a CALL_EXPR (for ...(...)),
11420 an identifier (for the name being declared)
11421 or a null pointer (for the place in an absolute declarator
11422 where the name was omitted).
11423 For the last two cases, we have just exited the loop.
11424
11425 For C++ it could also be
11426 a SCOPE_REF (for class :: ...). In this case, we have converted
11427 sensible names to types, and those are the values we use to
11428 qualify the member name.
11429 an ADDR_EXPR (for &...),
11430 a BIT_NOT_EXPR (for destructors)
11431
11432 At this point, TYPE is the type of elements of an array,
11433 or for a function to return, or for a pointer to point to.
11434 After this sequence of ifs, TYPE is the type of the
11435 array or function or pointer, and DECLARATOR has had its
11436 outermost layer removed. */
11437
11438 if (type == error_mark_node)
11439 {
11440 if (TREE_CODE (declarator) == SCOPE_REF)
11441 declarator = TREE_OPERAND (declarator, 1);
11442 else
11443 declarator = TREE_OPERAND (declarator, 0);
11444 continue;
11445 }
11446 if (quals != NULL_TREE
11447 && (declarator == NULL_TREE
11448 || TREE_CODE (declarator) != SCOPE_REF))
11449 {
11450 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
11451 ctype = TYPE_METHOD_BASETYPE (type);
11452 if (ctype != NULL_TREE)
11453 {
11454 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
11455 grok_method_quals (ctype, dummy, quals);
11456 type = TREE_TYPE (dummy);
11457 ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
11458 quals = NULL_TREE;
11459 }
11460 }
11461
11462 switch (TREE_CODE (declarator))
11463 {
11464 case TREE_LIST:
11465 {
11466 /* We encode a declarator with embedded attributes using
11467 a TREE_LIST. */
11468 tree attrs = TREE_PURPOSE (declarator);
11469 tree inner_decl;
11470 int attr_flags;
11471
11472 declarator = TREE_VALUE (declarator);
11473 inner_decl = declarator;
11474 while (inner_decl != NULL_TREE
11475 && TREE_CODE (inner_decl) == TREE_LIST)
11476 inner_decl = TREE_VALUE (inner_decl);
11477 attr_flags = 0;
11478 if (inner_decl == NULL_TREE
11479 || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
11480 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11481 if (TREE_CODE (inner_decl) == CALL_EXPR)
11482 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11483 if (TREE_CODE (inner_decl) == ARRAY_REF)
11484 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11485 returned_attrs = decl_attributes (&type,
11486 chainon (returned_attrs, attrs),
11487 attr_flags);
11488 }
11489 break;
11490
11491 case ARRAY_REF:
11492 {
11493 register tree size;
11494
11495 size = TREE_OPERAND (declarator, 1);
11496
11497 /* VC++ spells a zero-sized array with []. */
11498 if (size == NULL_TREE && decl_context == FIELD && ! staticp
11499 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
11500 size = integer_zero_node;
11501
11502 declarator = TREE_OPERAND (declarator, 0);
11503
11504 type = create_array_type_for_decl (dname, type, size);
11505
11506 ctype = NULL_TREE;
11507 }
11508 break;
11509
11510 case CALL_EXPR:
11511 {
11512 tree arg_types;
11513 int funcdecl_p;
11514 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
11515 tree inner_decl = TREE_OPERAND (declarator, 0);
11516
11517 /* Declaring a function type.
11518 Make sure we have a valid type for the function to return. */
11519
11520 /* We now know that the TYPE_QUALS don't apply to the
11521 decl, but to its return type. */
11522 type_quals = TYPE_UNQUALIFIED;
11523
11524 /* Warn about some types functions can't return. */
11525
11526 if (TREE_CODE (type) == FUNCTION_TYPE)
11527 {
11528 error ("`%s' declared as function returning a function", name);
11529 type = integer_type_node;
11530 }
11531 if (TREE_CODE (type) == ARRAY_TYPE)
11532 {
11533 error ("`%s' declared as function returning an array", name);
11534 type = integer_type_node;
11535 }
11536
11537 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
11538 inner_decl = TREE_OPERAND (inner_decl, 1);
11539
11540 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
11541 inner_decl = dname;
11542
11543 /* Pick up type qualifiers which should be applied to `this'. */
11544 quals = CALL_DECLARATOR_QUALS (declarator);
11545
11546 /* Pick up the exception specifications. */
11547 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
11548
11549 /* Say it's a definition only for the CALL_EXPR
11550 closest to the identifier. */
11551 funcdecl_p
11552 = inner_decl
11553 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
11554 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
11555 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
11556
11557 if (ctype == NULL_TREE
11558 && decl_context == FIELD
11559 && funcdecl_p
11560 && (friendp == 0 || dname == current_class_name))
11561 ctype = current_class_type;
11562
11563 if (ctype && sfk == sfk_conversion)
11564 TYPE_HAS_CONVERSION (ctype) = 1;
11565 if (ctype && constructor_name (ctype) == dname)
11566 {
11567 /* We are within a class's scope. If our declarator name
11568 is the same as the class name, and we are defining
11569 a function, then it is a constructor/destructor, and
11570 therefore returns a void type. */
11571
11572 if (flags == DTOR_FLAG)
11573 {
11574 /* ISO C++ 12.4/2. A destructor may not be
11575 declared const or volatile. A destructor may
11576 not be static. */
11577 if (staticp == 2)
11578 error ("destructor cannot be static member function");
11579 if (quals)
11580 {
11581 error ("destructors may not be `%s'",
11582 IDENTIFIER_POINTER (TREE_VALUE (quals)));
11583 quals = NULL_TREE;
11584 }
11585 if (decl_context == FIELD)
11586 {
11587 if (! member_function_or_else (ctype,
11588 current_class_type,
11589 flags))
11590 return void_type_node;
11591 }
11592 }
11593 else /* It's a constructor. */
11594 {
11595 if (explicitp == 1)
11596 explicitp = 2;
11597 /* ISO C++ 12.1. A constructor may not be
11598 declared const or volatile. A constructor may
11599 not be virtual. A constructor may not be
11600 static. */
11601 if (staticp == 2)
11602 error ("constructor cannot be static member function");
11603 if (virtualp)
11604 {
11605 pedwarn ("constructors cannot be declared virtual");
11606 virtualp = 0;
11607 }
11608 if (quals)
11609 {
11610 error ("constructors may not be `%s'",
11611 IDENTIFIER_POINTER (TREE_VALUE (quals)));
11612 quals = NULL_TREE;
11613 }
11614 {
11615 RID_BIT_TYPE tmp_bits;
11616 memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
11617 RIDBIT_RESET (RID_INLINE, tmp_bits);
11618 RIDBIT_RESET (RID_STATIC, tmp_bits);
11619 if (RIDBIT_ANY_SET (tmp_bits))
11620 error ("return value type specifier for constructor ignored");
11621 }
11622 if (decl_context == FIELD)
11623 {
11624 if (! member_function_or_else (ctype,
11625 current_class_type,
11626 flags))
11627 return void_type_node;
11628 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
11629 if (sfk != sfk_constructor)
11630 return NULL_TREE;
11631 }
11632 }
11633 if (decl_context == FIELD)
11634 staticp = 0;
11635 }
11636 else if (friendp)
11637 {
11638 if (initialized)
11639 error ("can't initialize friend function `%s'", name);
11640 if (virtualp)
11641 {
11642 /* Cannot be both friend and virtual. */
11643 error ("virtual functions cannot be friends");
11644 RIDBIT_RESET (RID_FRIEND, specbits);
11645 friendp = 0;
11646 }
11647 if (decl_context == NORMAL)
11648 error ("friend declaration not in class definition");
11649 if (current_function_decl && funcdef_flag)
11650 error ("can't define friend function `%s' in a local class definition",
11651 name);
11652 }
11653
11654 /* Construct the function type and go to the next
11655 inner layer of declarator. */
11656
11657 declarator = TREE_OPERAND (declarator, 0);
11658
11659 /* FIXME: This is where default args should be fully
11660 processed. */
11661
11662 arg_types = grokparms (inner_parms);
11663
11664 if (declarator && flags == DTOR_FLAG)
11665 {
11666 /* A destructor declared in the body of a class will
11667 be represented as a BIT_NOT_EXPR. But, we just
11668 want the underlying IDENTIFIER. */
11669 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
11670 declarator = TREE_OPERAND (declarator, 0);
11671
11672 if (arg_types != void_list_node)
11673 {
11674 error ("destructors may not have parameters");
11675 arg_types = void_list_node;
11676 last_function_parms = NULL_TREE;
11677 }
11678 }
11679
11680 /* ANSI says that `const int foo ();'
11681 does not make the function foo const. */
11682 type = build_function_type (type, arg_types);
11683
11684 {
11685 tree t;
11686 for (t = arg_types; t; t = TREE_CHAIN (t))
11687 if (TREE_PURPOSE (t)
11688 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
11689 {
11690 add_defarg_fn (type);
11691 break;
11692 }
11693 }
11694 }
11695 break;
11696
11697 case ADDR_EXPR:
11698 case INDIRECT_REF:
11699 /* Filter out pointers-to-references and references-to-references.
11700 We can get these if a TYPE_DECL is used. */
11701
11702 if (TREE_CODE (type) == REFERENCE_TYPE)
11703 {
11704 error (TREE_CODE (declarator) == ADDR_EXPR
11705 ? "cannot declare reference to `%#T'"
11706 : "cannot declare pointer to `%#T'", type);
11707 type = TREE_TYPE (type);
11708 }
11709 else if (VOID_TYPE_P (type)
11710 && (ctype || TREE_CODE (declarator) == ADDR_EXPR))
11711 error (ctype ? "cannot declare pointer to `%#T' member"
11712 : "cannot declare reference to `%#T'", type);
11713
11714 /* Merge any constancy or volatility into the target type
11715 for the pointer. */
11716
11717 /* We now know that the TYPE_QUALS don't apply to the decl,
11718 but to the target of the pointer. */
11719 type_quals = TYPE_UNQUALIFIED;
11720
11721 if (TREE_CODE (declarator) == ADDR_EXPR)
11722 {
11723 if (!VOID_TYPE_P (type))
11724 type = build_reference_type (type);
11725 }
11726 else if (TREE_CODE (type) == METHOD_TYPE)
11727 type = build_ptrmemfunc_type (build_pointer_type (type));
11728 else if (ctype)
11729 type = build_ptrmem_type (ctype, type);
11730 else
11731 type = build_pointer_type (type);
11732
11733 /* Process a list of type modifier keywords (such as
11734 const or volatile) that were given inside the `*' or `&'. */
11735
11736 if (TREE_TYPE (declarator))
11737 {
11738 register tree typemodlist;
11739 int erred = 0;
11740 int constp = 0;
11741 int volatilep = 0;
11742 int restrictp = 0;
11743
11744 for (typemodlist = TREE_TYPE (declarator); typemodlist;
11745 typemodlist = TREE_CHAIN (typemodlist))
11746 {
11747 tree qualifier = TREE_VALUE (typemodlist);
11748
11749 if (qualifier == ridpointers[(int) RID_CONST])
11750 {
11751 constp++;
11752 type_quals |= TYPE_QUAL_CONST;
11753 }
11754 else if (qualifier == ridpointers[(int) RID_VOLATILE])
11755 {
11756 volatilep++;
11757 type_quals |= TYPE_QUAL_VOLATILE;
11758 }
11759 else if (qualifier == ridpointers[(int) RID_RESTRICT])
11760 {
11761 restrictp++;
11762 type_quals |= TYPE_QUAL_RESTRICT;
11763 }
11764 else if (!erred)
11765 {
11766 erred = 1;
11767 error ("invalid type modifier within pointer declarator");
11768 }
11769 }
11770 if (constp > 1)
11771 pedwarn ("duplicate `const'");
11772 if (volatilep > 1)
11773 pedwarn ("duplicate `volatile'");
11774 if (restrictp > 1)
11775 pedwarn ("duplicate `restrict'");
11776 type = cp_build_qualified_type (type, type_quals);
11777 type_quals = cp_type_quals (type);
11778 }
11779 declarator = TREE_OPERAND (declarator, 0);
11780 ctype = NULL_TREE;
11781 break;
11782
11783 case SCOPE_REF:
11784 {
11785 /* We have converted type names to NULL_TREE if the
11786 name was bogus, or to a _TYPE node, if not.
11787
11788 The variable CTYPE holds the type we will ultimately
11789 resolve to. The code here just needs to build
11790 up appropriate member types. */
11791 tree sname = TREE_OPERAND (declarator, 1);
11792 tree t;
11793
11794 /* Destructors can have their visibilities changed as well. */
11795 if (TREE_CODE (sname) == BIT_NOT_EXPR)
11796 sname = TREE_OPERAND (sname, 0);
11797
11798 if (TREE_COMPLEXITY (declarator) == 0)
11799 /* This needs to be here, in case we are called
11800 multiple times. */ ;
11801 else if (TREE_COMPLEXITY (declarator) == -1)
11802 /* Namespace member. */
11803 pop_decl_namespace ();
11804 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
11805 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
11806 else if (!TREE_OPERAND (declarator, 0)
11807 || !IS_AGGR_TYPE_CODE
11808 (TREE_CODE (TREE_OPERAND (declarator, 0))))
11809 ;
11810 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
11811 {
11812 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
11813 that refer to ctype. They couldn't be resolved earlier
11814 because we hadn't pushed into the class yet.
11815 Example: resolve 'B<T>::type' in
11816 'B<typename B<T>::type> B<T>::f () { }'. */
11817 if (current_template_parms
11818 && uses_template_parms (type)
11819 && uses_template_parms (current_class_type))
11820 {
11821 tree args = current_template_args ();
11822 type = tsubst (type, args, tf_error | tf_warning,
11823 NULL_TREE);
11824 }
11825
11826 /* This pop_nested_class corresponds to the
11827 push_nested_class used to push into class scope for
11828 parsing the argument list of a function decl, in
11829 qualified_id. */
11830 pop_nested_class ();
11831 TREE_COMPLEXITY (declarator) = current_class_depth;
11832 }
11833 else
11834 abort ();
11835
11836 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
11837 {
11838 /* We had a reference to a global decl, or
11839 perhaps we were given a non-aggregate typedef,
11840 in which case we cleared this out, and should just
11841 keep going as though it wasn't there. */
11842 declarator = sname;
11843 continue;
11844 }
11845 ctype = TREE_OPERAND (declarator, 0);
11846
11847 t = ctype;
11848 while (t != NULL_TREE && CLASS_TYPE_P (t))
11849 {
11850 /* You're supposed to have one `template <...>'
11851 for every template class, but you don't need one
11852 for a full specialization. For example:
11853
11854 template <class T> struct S{};
11855 template <> struct S<int> { void f(); };
11856 void S<int>::f () {}
11857
11858 is correct; there shouldn't be a `template <>' for
11859 the definition of `S<int>::f'. */
11860 if (CLASSTYPE_TEMPLATE_INFO (t)
11861 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
11862 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
11863 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
11864 template_count += 1;
11865
11866 t = TYPE_MAIN_DECL (t);
11867 t = DECL_CONTEXT (t);
11868 }
11869
11870 if (sname == NULL_TREE)
11871 goto done_scoping;
11872
11873 if (TREE_CODE (sname) == IDENTIFIER_NODE)
11874 {
11875 /* This is the `standard' use of the scoping operator:
11876 basetype :: member . */
11877
11878 if (ctype == current_class_type)
11879 {
11880 /* class A {
11881 void A::f ();
11882 };
11883
11884 Is this ill-formed? */
11885
11886 if (pedantic)
11887 pedwarn ("extra qualification `%T::' on member `%s' ignored",
11888 ctype, name);
11889 }
11890 else if (TREE_CODE (type) == FUNCTION_TYPE)
11891 {
11892 if (current_class_type == NULL_TREE || friendp)
11893 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11894 TYPE_ARG_TYPES (type));
11895 else
11896 {
11897 error ("cannot declare member function `%T::%s' within `%T'",
11898 ctype, name, current_class_type);
11899 return void_type_node;
11900 }
11901 }
11902 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
11903 || COMPLETE_TYPE_P (complete_type (ctype)))
11904 {
11905 /* Have to move this code elsewhere in this function.
11906 this code is used for i.e., typedef int A::M; M *pm;
11907
11908 It is? How? jason 10/2/94 */
11909
11910 if (current_class_type)
11911 {
11912 error ("cannot declare member `%T::%s' within `%T'",
11913 ctype, name, current_class_type);
11914 return void_type_node;
11915 }
11916 }
11917 else
11918 {
11919 cxx_incomplete_type_error (NULL_TREE, ctype);
11920 return error_mark_node;
11921 }
11922
11923 declarator = sname;
11924 }
11925 else if (TREE_CODE (sname) == SCOPE_REF)
11926 abort ();
11927 else
11928 {
11929 done_scoping:
11930 declarator = TREE_OPERAND (declarator, 1);
11931 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
11932 /* In this case, we will deal with it later. */
11933 ;
11934 else if (TREE_CODE (type) == FUNCTION_TYPE)
11935 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11936 TYPE_ARG_TYPES (type));
11937 }
11938 }
11939 break;
11940
11941 case BIT_NOT_EXPR:
11942 declarator = TREE_OPERAND (declarator, 0);
11943 break;
11944
11945 case BASELINK:
11946 declarator = BASELINK_FUNCTIONS (declarator);
11947 break;
11948
11949 case RECORD_TYPE:
11950 case UNION_TYPE:
11951 case ENUMERAL_TYPE:
11952 declarator = NULL_TREE;
11953 break;
11954
11955 case ERROR_MARK:
11956 declarator = NULL_TREE;
11957 break;
11958
11959 default:
11960 abort ();
11961 }
11962 }
11963
11964 if (returned_attrs)
11965 {
11966 if (attrlist)
11967 *attrlist = chainon (returned_attrs, *attrlist);
11968 else
11969 attrlist = &returned_attrs;
11970 }
11971
11972 /* Now TYPE has the actual type. */
11973
11974 /* Did array size calculations overflow? */
11975
11976 if (TREE_CODE (type) == ARRAY_TYPE
11977 && COMPLETE_TYPE_P (type)
11978 && TREE_OVERFLOW (TYPE_SIZE (type)))
11979 {
11980 error ("size of array `%s' is too large", name);
11981 /* If we proceed with the array type as it is, we'll eventually
11982 crash in tree_low_cst(). */
11983 type = error_mark_node;
11984 }
11985
11986 if ((decl_context == FIELD || decl_context == PARM)
11987 && !processing_template_decl
11988 && variably_modified_type_p (type))
11989 {
11990 if (decl_context == FIELD)
11991 error ("data member may not have variably modified type `%T'", type);
11992 else
11993 error ("parameter may not have variably modified type `%T'", type);
11994 type = error_mark_node;
11995 }
11996
11997 if (explicitp == 1 || (explicitp && friendp))
11998 {
11999 /* [dcl.fct.spec] The explicit specifier shall only be used in
12000 declarations of constructors within a class definition. */
12001 error ("only declarations of constructors can be `explicit'");
12002 explicitp = 0;
12003 }
12004
12005 if (RIDBIT_SETP (RID_MUTABLE, specbits))
12006 {
12007 if (decl_context != FIELD || friendp)
12008 {
12009 error ("non-member `%s' cannot be declared `mutable'", name);
12010 RIDBIT_RESET (RID_MUTABLE, specbits);
12011 }
12012 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
12013 {
12014 error ("non-object member `%s' cannot be declared `mutable'", name);
12015 RIDBIT_RESET (RID_MUTABLE, specbits);
12016 }
12017 else if (TREE_CODE (type) == FUNCTION_TYPE
12018 || TREE_CODE (type) == METHOD_TYPE)
12019 {
12020 error ("function `%s' cannot be declared `mutable'", name);
12021 RIDBIT_RESET (RID_MUTABLE, specbits);
12022 }
12023 else if (staticp)
12024 {
12025 error ("static `%s' cannot be declared `mutable'", name);
12026 RIDBIT_RESET (RID_MUTABLE, specbits);
12027 }
12028 else if (type_quals & TYPE_QUAL_CONST)
12029 {
12030 error ("const `%s' cannot be declared `mutable'", name);
12031 RIDBIT_RESET (RID_MUTABLE, specbits);
12032 }
12033 }
12034
12035 if (declarator == NULL_TREE
12036 || TREE_CODE (declarator) == IDENTIFIER_NODE
12037 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
12038 && (TREE_CODE (type) == FUNCTION_TYPE
12039 || TREE_CODE (type) == METHOD_TYPE)))
12040 /* OK */;
12041 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
12042 {
12043 error ("template-id `%D' used as a declarator", declarator);
12044 declarator = dname;
12045 }
12046 else
12047 /* Unexpected declarator format. */
12048 abort ();
12049
12050 /* If this is declaring a typedef name, return a TYPE_DECL. */
12051
12052 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
12053 {
12054 tree decl;
12055
12056 /* Note that the grammar rejects storage classes
12057 in typenames, fields or parameters. */
12058 if (current_lang_name == lang_name_java)
12059 TYPE_FOR_JAVA (type) = 1;
12060
12061 if (decl_context == FIELD)
12062 {
12063 if (declarator == constructor_name (current_class_type))
12064 pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
12065 declarator);
12066 decl = build_lang_decl (TYPE_DECL, declarator, type);
12067 }
12068 else
12069 {
12070 decl = build_decl (TYPE_DECL, declarator, type);
12071 if (!current_function_decl)
12072 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
12073 }
12074
12075 /* If the user declares "typedef struct {...} foo" then the
12076 struct will have an anonymous name. Fill that name in now.
12077 Nothing can refer to it, so nothing needs know about the name
12078 change. */
12079 if (type != error_mark_node
12080 && declarator
12081 && TYPE_NAME (type)
12082 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12083 && TYPE_ANONYMOUS_P (type)
12084 /* Don't do this if there are attributes. */
12085 && (!attrlist || !*attrlist)
12086 && cp_type_quals (type) == TYPE_UNQUALIFIED)
12087 {
12088 tree oldname = TYPE_NAME (type);
12089 tree t;
12090
12091 /* Replace the anonymous name with the real name everywhere. */
12092 lookup_tag_reverse (type, declarator);
12093 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
12094 if (TYPE_NAME (t) == oldname)
12095 TYPE_NAME (t) = decl;
12096
12097 if (TYPE_LANG_SPECIFIC (type))
12098 TYPE_WAS_ANONYMOUS (type) = 1;
12099
12100 /* If this is a typedef within a template class, the nested
12101 type is a (non-primary) template. The name for the
12102 template needs updating as well. */
12103 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
12104 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
12105 = TYPE_IDENTIFIER (type);
12106
12107 /* FIXME remangle member functions; member functions of a
12108 type with external linkage have external linkage. */
12109 }
12110
12111 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
12112 {
12113 cp_error_at ("typedef name may not be class-qualified", decl);
12114 return NULL_TREE;
12115 }
12116 else if (quals)
12117 {
12118 if (ctype == NULL_TREE)
12119 {
12120 if (TREE_CODE (type) != METHOD_TYPE)
12121 cp_error_at ("invalid type qualifier for non-member function type", decl);
12122 else
12123 ctype = TYPE_METHOD_BASETYPE (type);
12124 }
12125 if (ctype != NULL_TREE)
12126 grok_method_quals (ctype, decl, quals);
12127 }
12128
12129 if (RIDBIT_SETP (RID_SIGNED, specbits)
12130 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
12131 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
12132
12133 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
12134 inlinep, friendp, raises != NULL_TREE);
12135
12136 return decl;
12137 }
12138
12139 /* Detect the case of an array type of unspecified size
12140 which came, as such, direct from a typedef name.
12141 We must copy the type, so that the array's domain can be
12142 individually set by the object's initializer. */
12143
12144 if (type && typedef_type
12145 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
12146 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
12147 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12148
12149 /* Detect where we're using a typedef of function type to declare a
12150 function. last_function_parms will not be set, so we must create
12151 it now. */
12152
12153 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
12154 {
12155 tree decls = NULL_TREE;
12156 tree args;
12157
12158 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
12159 {
12160 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
12161
12162 TREE_CHAIN (decl) = decls;
12163 decls = decl;
12164 }
12165
12166 last_function_parms = nreverse (decls);
12167 }
12168
12169 /* If this is a type name (such as, in a cast or sizeof),
12170 compute the type and return it now. */
12171
12172 if (decl_context == TYPENAME)
12173 {
12174 /* Note that the grammar rejects storage classes
12175 in typenames, fields or parameters. */
12176 if (type_quals != TYPE_UNQUALIFIED)
12177 type_quals = TYPE_UNQUALIFIED;
12178
12179 /* Special case: "friend class foo" looks like a TYPENAME context. */
12180 if (friendp)
12181 {
12182 if (type_quals != TYPE_UNQUALIFIED)
12183 {
12184 error ("type qualifiers specified for friend class declaration");
12185 type_quals = TYPE_UNQUALIFIED;
12186 }
12187 if (inlinep)
12188 {
12189 error ("`inline' specified for friend class declaration");
12190 inlinep = 0;
12191 }
12192
12193 if (!current_aggr)
12194 {
12195 /* Don't allow friend declaration without a class-key. */
12196 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12197 pedwarn ("template parameters cannot be friends");
12198 else if (TREE_CODE (type) == TYPENAME_TYPE)
12199 pedwarn ("friend declaration requires class-key, "
12200 "i.e. `friend class %T::%D'",
12201 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
12202 else
12203 pedwarn ("friend declaration requires class-key, "
12204 "i.e. `friend %#T'",
12205 type);
12206 }
12207
12208 /* Only try to do this stuff if we didn't already give up. */
12209 if (type != integer_type_node)
12210 {
12211 decl_type_access_control (TYPE_NAME (type));
12212
12213 /* A friendly class? */
12214 if (current_class_type)
12215 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
12216 else
12217 error ("trying to make class `%T' a friend of global scope",
12218 type);
12219
12220 type = void_type_node;
12221 }
12222 }
12223 else if (quals)
12224 {
12225 if (ctype == NULL_TREE)
12226 {
12227 if (TREE_CODE (type) != METHOD_TYPE)
12228 error ("invalid qualifiers on non-member function type");
12229 else
12230 ctype = TYPE_METHOD_BASETYPE (type);
12231 }
12232 if (ctype)
12233 {
12234 tree dummy = build_decl (TYPE_DECL, declarator, type);
12235 grok_method_quals (ctype, dummy, quals);
12236 type = TREE_TYPE (dummy);
12237 }
12238 }
12239
12240 return type;
12241 }
12242 else if (declarator == NULL_TREE && decl_context != PARM
12243 && decl_context != CATCHPARM
12244 && TREE_CODE (type) != UNION_TYPE
12245 && ! bitfield)
12246 {
12247 error ("abstract declarator `%T' used as declaration", type);
12248 declarator = make_anon_name ();
12249 }
12250
12251 /* `void' at top level (not within pointer)
12252 is allowed only in typedefs or type names.
12253 We don't complain about parms either, but that is because
12254 a better error message can be made later. */
12255
12256 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
12257 {
12258 if (! declarator)
12259 error ("unnamed variable or field declared void");
12260 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
12261 {
12262 if (IDENTIFIER_OPNAME_P (declarator))
12263 abort ();
12264 else
12265 error ("variable or field `%s' declared void", name);
12266 }
12267 else
12268 error ("variable or field declared void");
12269 type = integer_type_node;
12270 }
12271
12272 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
12273 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
12274
12275 if (decl_context == PARM || decl_context == CATCHPARM)
12276 {
12277 if (ctype || in_namespace)
12278 error ("cannot use `::' in parameter declaration");
12279
12280 /* A parameter declared as an array of T is really a pointer to T.
12281 One declared as a function is really a pointer to a function.
12282 One declared as a member is really a pointer to member. */
12283
12284 if (TREE_CODE (type) == ARRAY_TYPE)
12285 {
12286 /* Transfer const-ness of array into that of type pointed to. */
12287 type = build_pointer_type (TREE_TYPE (type));
12288 type_quals = TYPE_UNQUALIFIED;
12289 }
12290 else if (TREE_CODE (type) == FUNCTION_TYPE)
12291 type = build_pointer_type (type);
12292 else if (TREE_CODE (type) == OFFSET_TYPE)
12293 type = build_pointer_type (type);
12294 }
12295
12296 {
12297 register tree decl;
12298
12299 if (decl_context == PARM)
12300 {
12301 decl = cp_build_parm_decl (declarator, type);
12302
12303 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
12304 inlinep, friendp, raises != NULL_TREE);
12305 }
12306 else if (decl_context == FIELD)
12307 {
12308 if (type == error_mark_node)
12309 {
12310 /* Happens when declaring arrays of sizes which
12311 are error_mark_node, for example. */
12312 decl = NULL_TREE;
12313 }
12314 else if (in_namespace && !friendp)
12315 {
12316 /* Something like struct S { int N::j; }; */
12317 error ("invalid use of `::'");
12318 decl = NULL_TREE;
12319 }
12320 else if (TREE_CODE (type) == FUNCTION_TYPE)
12321 {
12322 int publicp = 0;
12323 tree function_context;
12324
12325 /* We catch the others as conflicts with the builtin
12326 typedefs. */
12327 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
12328 {
12329 error ("function `%D' cannot be declared friend",
12330 declarator);
12331 friendp = 0;
12332 }
12333
12334 if (friendp == 0)
12335 {
12336 if (ctype == NULL_TREE)
12337 ctype = current_class_type;
12338
12339 if (ctype == NULL_TREE)
12340 {
12341 error ("can't make `%D' into a method -- not in a class",
12342 declarator);
12343 return void_type_node;
12344 }
12345
12346 /* ``A union may [ ... ] not [ have ] virtual functions.''
12347 ARM 9.5 */
12348 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12349 {
12350 error ("function `%D' declared virtual inside a union",
12351 declarator);
12352 return void_type_node;
12353 }
12354
12355 if (declarator == ansi_opname (NEW_EXPR)
12356 || declarator == ansi_opname (VEC_NEW_EXPR)
12357 || declarator == ansi_opname (DELETE_EXPR)
12358 || declarator == ansi_opname (VEC_DELETE_EXPR))
12359 {
12360 if (virtualp)
12361 {
12362 error ("`%D' cannot be declared virtual, since it is always static",
12363 declarator);
12364 virtualp = 0;
12365 }
12366 }
12367 else if (staticp < 2)
12368 type = build_cplus_method_type (ctype, TREE_TYPE (type),
12369 TYPE_ARG_TYPES (type));
12370 }
12371
12372 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12373 function_context = (ctype != NULL_TREE) ?
12374 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12375 publicp = (! friendp || ! staticp)
12376 && function_context == NULL_TREE;
12377 decl = grokfndecl (ctype, type,
12378 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
12379 ? declarator : dname,
12380 declarator,
12381 virtualp, flags, quals, raises,
12382 friendp ? -1 : 0, friendp, publicp, inlinep,
12383 funcdef_flag, template_count, in_namespace);
12384 if (decl == NULL_TREE)
12385 return decl;
12386 #if 0
12387 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12388 /* The decl and setting of decl_attr is also turned off. */
12389 decl = build_decl_attribute_variant (decl, decl_attr);
12390 #endif
12391
12392 /* [class.conv.ctor]
12393
12394 A constructor declared without the function-specifier
12395 explicit that can be called with a single parameter
12396 specifies a conversion from the type of its first
12397 parameter to the type of its class. Such a constructor
12398 is called a converting constructor. */
12399 if (explicitp == 2)
12400 DECL_NONCONVERTING_P (decl) = 1;
12401 else if (DECL_CONSTRUCTOR_P (decl))
12402 {
12403 /* The constructor can be called with exactly one
12404 parameter if there is at least one parameter, and
12405 any subsequent parameters have default arguments.
12406 Ignore any compiler-added parms. */
12407 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
12408
12409 if (arg_types == void_list_node
12410 || (arg_types
12411 && TREE_CHAIN (arg_types)
12412 && TREE_CHAIN (arg_types) != void_list_node
12413 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
12414 DECL_NONCONVERTING_P (decl) = 1;
12415 }
12416 }
12417 else if (TREE_CODE (type) == METHOD_TYPE)
12418 {
12419 /* We only get here for friend declarations of
12420 members of other classes. */
12421 /* All method decls are public, so tell grokfndecl to set
12422 TREE_PUBLIC, also. */
12423 decl = grokfndecl (ctype, type,
12424 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
12425 ? declarator : dname,
12426 declarator,
12427 virtualp, flags, quals, raises,
12428 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
12429 template_count, in_namespace);
12430 if (decl == NULL_TREE)
12431 return NULL_TREE;
12432 }
12433 else if (!staticp && ! processing_template_decl
12434 && !COMPLETE_TYPE_P (complete_type (type))
12435 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
12436 {
12437 if (declarator)
12438 error ("field `%D' has incomplete type", declarator);
12439 else
12440 error ("name `%T' has incomplete type", type);
12441
12442 /* If we're instantiating a template, tell them which
12443 instantiation made the field's type be incomplete. */
12444 if (current_class_type
12445 && TYPE_NAME (current_class_type)
12446 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
12447 && declspecs && TREE_VALUE (declspecs)
12448 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
12449 error (" in instantiation of template `%T'",
12450 current_class_type);
12451
12452 type = error_mark_node;
12453 decl = NULL_TREE;
12454 }
12455 else
12456 {
12457 if (friendp)
12458 {
12459 error ("`%s' is neither function nor member function; cannot be declared friend",
12460 IDENTIFIER_POINTER (declarator));
12461 friendp = 0;
12462 }
12463 decl = NULL_TREE;
12464 }
12465
12466 if (friendp)
12467 {
12468 /* Friends are treated specially. */
12469 if (ctype == current_class_type)
12470 warning ("member functions are implicitly friends of their class");
12471 else
12472 {
12473 tree t = NULL_TREE;
12474 if (decl && DECL_NAME (decl))
12475 {
12476 if (template_class_depth (current_class_type) == 0)
12477 {
12478 decl
12479 = check_explicit_specialization
12480 (declarator, decl,
12481 template_count, 2 * (funcdef_flag != 0) + 4);
12482 if (decl == error_mark_node)
12483 return error_mark_node;
12484 }
12485
12486 t = do_friend (ctype, declarator, decl,
12487 last_function_parms, *attrlist,
12488 flags, quals, funcdef_flag);
12489 }
12490 if (t && funcdef_flag)
12491 return t;
12492
12493 return void_type_node;
12494 }
12495 }
12496
12497 /* Structure field. It may not be a function, except for C++ */
12498
12499 if (decl == NULL_TREE)
12500 {
12501 if (initialized)
12502 {
12503 if (!staticp)
12504 {
12505 /* An attempt is being made to initialize a non-static
12506 member. But, from [class.mem]:
12507
12508 4 A member-declarator can contain a
12509 constant-initializer only if it declares a static
12510 member (_class.static_) of integral or enumeration
12511 type, see _class.static.data_.
12512
12513 This used to be relatively common practice, but
12514 the rest of the compiler does not correctly
12515 handle the initialization unless the member is
12516 static so we make it static below. */
12517 pedwarn ("ISO C++ forbids initialization of member `%D'",
12518 declarator);
12519 pedwarn ("making `%D' static", declarator);
12520 staticp = 1;
12521 }
12522
12523 if (uses_template_parms (type))
12524 /* We'll check at instantiation time. */
12525 ;
12526 else if (check_static_variable_definition (declarator,
12527 type))
12528 /* If we just return the declaration, crashes
12529 will sometimes occur. We therefore return
12530 void_type_node, as if this was a friend
12531 declaration, to cause callers to completely
12532 ignore this declaration. */
12533 return void_type_node;
12534 }
12535
12536 /* 9.2p13 [class.mem] */
12537 if (declarator == constructor_name (current_class_type)
12538 /* The standard does not allow non-static data members
12539 here either, but we agreed at the 10/99 meeting
12540 to change that in TC 1 so that they are allowed in
12541 classes with no user-defined constructors. */
12542 && staticp)
12543 pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
12544 declarator);
12545
12546 if (staticp)
12547 {
12548 /* C++ allows static class members. All other work
12549 for this is done by grokfield. */
12550 decl = build_lang_decl (VAR_DECL, declarator, type);
12551 TREE_STATIC (decl) = 1;
12552 /* In class context, 'static' means public access. */
12553 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
12554 }
12555 else
12556 {
12557 decl = build_decl (FIELD_DECL, declarator, type);
12558 DECL_NONADDRESSABLE_P (decl) = bitfield;
12559 if (RIDBIT_SETP (RID_MUTABLE, specbits))
12560 {
12561 DECL_MUTABLE_P (decl) = 1;
12562 RIDBIT_RESET (RID_MUTABLE, specbits);
12563 }
12564 }
12565
12566 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
12567 inlinep, friendp, raises != NULL_TREE);
12568 }
12569 }
12570 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
12571 {
12572 tree original_name;
12573 int publicp = 0;
12574
12575 if (! declarator)
12576 return NULL_TREE;
12577
12578 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
12579 original_name = dname;
12580 else
12581 original_name = declarator;
12582
12583 if (RIDBIT_SETP (RID_AUTO, specbits))
12584 error ("storage class `auto' invalid for function `%s'", name);
12585 else if (RIDBIT_SETP (RID_REGISTER, specbits))
12586 error ("storage class `register' invalid for function `%s'", name);
12587 else if (RIDBIT_SETP (RID_THREAD, specbits))
12588 error ("storage class `__thread' invalid for function `%s'", name);
12589
12590 /* Function declaration not at top level.
12591 Storage classes other than `extern' are not allowed
12592 and `extern' makes no difference. */
12593 if (! toplevel_bindings_p ()
12594 && (RIDBIT_SETP (RID_STATIC, specbits)
12595 || RIDBIT_SETP (RID_INLINE, specbits))
12596 && pedantic)
12597 {
12598 if (RIDBIT_SETP (RID_STATIC, specbits))
12599 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
12600 else
12601 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
12602 }
12603
12604 if (ctype == NULL_TREE)
12605 {
12606 if (virtualp)
12607 {
12608 error ("virtual non-class function `%s'", name);
12609 virtualp = 0;
12610 }
12611 }
12612 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
12613 type = build_cplus_method_type (ctype, TREE_TYPE (type),
12614 TYPE_ARG_TYPES (type));
12615
12616 /* Record presence of `static'. */
12617 publicp = (ctype != NULL_TREE
12618 || RIDBIT_SETP (RID_EXTERN, specbits)
12619 || !RIDBIT_SETP (RID_STATIC, specbits));
12620
12621 decl = grokfndecl (ctype, type, original_name, declarator,
12622 virtualp, flags, quals, raises,
12623 1, friendp,
12624 publicp, inlinep, funcdef_flag,
12625 template_count, in_namespace);
12626 if (decl == NULL_TREE)
12627 return NULL_TREE;
12628
12629 if (staticp == 1)
12630 {
12631 int invalid_static = 0;
12632
12633 /* Don't allow a static member function in a class, and forbid
12634 declaring main to be static. */
12635 if (TREE_CODE (type) == METHOD_TYPE)
12636 {
12637 pedwarn ("cannot declare member function `%D' to have static linkage", decl);
12638 invalid_static = 1;
12639 }
12640 else if (current_function_decl)
12641 {
12642 /* FIXME need arm citation */
12643 error ("cannot declare static function inside another function");
12644 invalid_static = 1;
12645 }
12646
12647 if (invalid_static)
12648 {
12649 staticp = 0;
12650 RIDBIT_RESET (RID_STATIC, specbits);
12651 }
12652 }
12653 }
12654 else
12655 {
12656 /* It's a variable. */
12657
12658 /* An uninitialized decl with `extern' is a reference. */
12659 decl = grokvardecl (type, declarator, &specbits,
12660 initialized,
12661 (type_quals & TYPE_QUAL_CONST) != 0,
12662 ctype ? ctype : in_namespace);
12663 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
12664 inlinep, friendp, raises != NULL_TREE);
12665
12666 if (ctype)
12667 {
12668 DECL_CONTEXT (decl) = ctype;
12669 if (staticp == 1)
12670 {
12671 pedwarn ("`static' may not be used when defining (as opposed to declaring) a static data member");
12672 staticp = 0;
12673 RIDBIT_RESET (RID_STATIC, specbits);
12674 }
12675 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
12676 {
12677 error ("static member `%D' declared `register'", decl);
12678 RIDBIT_RESET (RID_REGISTER, specbits);
12679 }
12680 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
12681 {
12682 pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
12683 decl);
12684 RIDBIT_RESET (RID_EXTERN, specbits);
12685 }
12686 }
12687 }
12688
12689 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
12690
12691 /* Record `register' declaration for warnings on &
12692 and in case doing stupid register allocation. */
12693
12694 if (RIDBIT_SETP (RID_REGISTER, specbits))
12695 DECL_REGISTER (decl) = 1;
12696
12697 if (RIDBIT_SETP (RID_EXTERN, specbits))
12698 DECL_THIS_EXTERN (decl) = 1;
12699
12700 if (RIDBIT_SETP (RID_STATIC, specbits))
12701 DECL_THIS_STATIC (decl) = 1;
12702
12703 /* Record constancy and volatility. There's no need to do this
12704 when processing a template; we'll do this for the instantiated
12705 declaration based on the type of DECL. */
12706 if (!processing_template_decl)
12707 c_apply_type_quals_to_decl (type_quals, decl);
12708
12709 return decl;
12710 }
12711 }
12712
12713 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
12714 An empty exprlist is a parmlist. An exprlist which
12715 contains only identifiers at the global level
12716 is a parmlist. Otherwise, it is an exprlist. */
12717
12718 int
parmlist_is_exprlist(exprs)12719 parmlist_is_exprlist (exprs)
12720 tree exprs;
12721 {
12722 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
12723 return 0;
12724
12725 if (toplevel_bindings_p ())
12726 {
12727 /* At the global level, if these are all identifiers,
12728 then it is a parmlist. */
12729 while (exprs)
12730 {
12731 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
12732 return 1;
12733 exprs = TREE_CHAIN (exprs);
12734 }
12735 return 0;
12736 }
12737 return 1;
12738 }
12739
12740 /* Subroutine of start_function. Ensure that each of the parameter
12741 types (as listed in PARMS) is complete, as is required for a
12742 function definition. */
12743
12744 static void
require_complete_types_for_parms(parms)12745 require_complete_types_for_parms (parms)
12746 tree parms;
12747 {
12748 for (; parms; parms = TREE_CHAIN (parms))
12749 {
12750 if (VOID_TYPE_P (TREE_TYPE (parms)))
12751 /* grokparms will have already issued an error */
12752 TREE_TYPE (parms) = error_mark_node;
12753 else if (complete_type_or_else (TREE_TYPE (parms), parms))
12754 {
12755 layout_decl (parms, 0);
12756 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12757 }
12758 }
12759 }
12760
12761 /* Returns nonzero if T is a local variable. */
12762
12763 int
local_variable_p(t)12764 local_variable_p (t)
12765 tree t;
12766 {
12767 if ((TREE_CODE (t) == VAR_DECL
12768 /* A VAR_DECL with a context that is a _TYPE is a static data
12769 member. */
12770 && !TYPE_P (CP_DECL_CONTEXT (t))
12771 /* Any other non-local variable must be at namespace scope. */
12772 && !DECL_NAMESPACE_SCOPE_P (t))
12773 || (TREE_CODE (t) == PARM_DECL))
12774 return 1;
12775
12776 return 0;
12777 }
12778
12779 /* Returns nonzero if T is an automatic local variable or a label.
12780 (These are the declarations that need to be remapped when the code
12781 containing them is duplicated.) */
12782
12783 int
nonstatic_local_decl_p(t)12784 nonstatic_local_decl_p (t)
12785 tree t;
12786 {
12787 return ((local_variable_p (t) && !TREE_STATIC (t))
12788 || TREE_CODE (t) == LABEL_DECL
12789 || TREE_CODE (t) == RESULT_DECL);
12790 }
12791
12792 /* Like local_variable_p, but suitable for use as a tree-walking
12793 function. */
12794
12795 static tree
local_variable_p_walkfn(tp,walk_subtrees,data)12796 local_variable_p_walkfn (tp, walk_subtrees, data)
12797 tree *tp;
12798 int *walk_subtrees ATTRIBUTE_UNUSED;
12799 void *data ATTRIBUTE_UNUSED;
12800 {
12801 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
12802 ? *tp : NULL_TREE);
12803 }
12804
12805 /* Check that ARG, which is a default-argument expression for a
12806 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12807 something goes wrong. DECL may also be a _TYPE node, rather than a
12808 DECL, if there is no DECL available. */
12809
12810 tree
check_default_argument(decl,arg)12811 check_default_argument (decl, arg)
12812 tree decl;
12813 tree arg;
12814 {
12815 tree var;
12816 tree decl_type;
12817
12818 if (TREE_CODE (arg) == DEFAULT_ARG)
12819 /* We get a DEFAULT_ARG when looking at an in-class declaration
12820 with a default argument. Ignore the argument for now; we'll
12821 deal with it after the class is complete. */
12822 return arg;
12823
12824 if (processing_template_decl || uses_template_parms (arg))
12825 /* We don't do anything checking until instantiation-time. Note
12826 that there may be uninstantiated arguments even for an
12827 instantiated function, since default arguments are not
12828 instantiated until they are needed. */
12829 return arg;
12830
12831 if (TYPE_P (decl))
12832 {
12833 decl_type = decl;
12834 decl = NULL_TREE;
12835 }
12836 else
12837 decl_type = TREE_TYPE (decl);
12838
12839 if (arg == error_mark_node
12840 || decl == error_mark_node
12841 || TREE_TYPE (arg) == error_mark_node
12842 || decl_type == error_mark_node)
12843 /* Something already went wrong. There's no need to check
12844 further. */
12845 return error_mark_node;
12846
12847 /* [dcl.fct.default]
12848
12849 A default argument expression is implicitly converted to the
12850 parameter type. */
12851 if (!TREE_TYPE (arg)
12852 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
12853 {
12854 if (decl)
12855 error ("default argument for `%#D' has type `%T'",
12856 decl, TREE_TYPE (arg));
12857 else
12858 error ("default argument for parameter of type `%T' has type `%T'",
12859 decl_type, TREE_TYPE (arg));
12860
12861 return error_mark_node;
12862 }
12863
12864 /* [dcl.fct.default]
12865
12866 Local variables shall not be used in default argument
12867 expressions.
12868
12869 The keyword `this' shall not be used in a default argument of a
12870 member function. */
12871 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
12872 NULL);
12873 if (var)
12874 {
12875 error ("default argument `%E' uses local variable `%D'",
12876 arg, var);
12877 return error_mark_node;
12878 }
12879
12880 /* All is well. */
12881 return arg;
12882 }
12883
12884 /* Decode the list of parameter types for a function type.
12885 Given the list of things declared inside the parens,
12886 return a list of types.
12887
12888 We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
12889 flag. If unset, we append void_list_node. A parmlist declared
12890 as `(void)' is accepted as the empty parmlist.
12891
12892 Also set last_function_parms to the chain of PARM_DECLs. */
12893
12894 static tree
grokparms(first_parm)12895 grokparms (first_parm)
12896 tree first_parm;
12897 {
12898 tree result = NULL_TREE;
12899 tree decls = NULL_TREE;
12900 int ellipsis = !first_parm || PARMLIST_ELLIPSIS_P (first_parm);
12901 tree parm, chain;
12902 int any_error = 0;
12903
12904 my_friendly_assert (!first_parm || TREE_PARMLIST (first_parm), 20001115);
12905
12906 for (parm = first_parm; parm != NULL_TREE; parm = chain)
12907 {
12908 tree type = NULL_TREE;
12909 tree decl = TREE_VALUE (parm);
12910 tree init = TREE_PURPOSE (parm);
12911 tree specs, attrs;
12912
12913 chain = TREE_CHAIN (parm);
12914 /* @@ weak defense against parse errors. */
12915 if (TREE_CODE (decl) != VOID_TYPE
12916 && TREE_CODE (decl) != TREE_LIST)
12917 {
12918 /* Give various messages as the need arises. */
12919 if (TREE_CODE (decl) == STRING_CST)
12920 error ("invalid string constant `%E'", decl);
12921 else if (TREE_CODE (decl) == INTEGER_CST)
12922 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
12923 continue;
12924 }
12925
12926 if (parm == void_list_node)
12927 break;
12928
12929 split_specs_attrs (TREE_PURPOSE (decl), &specs, &attrs);
12930 decl = grokdeclarator (TREE_VALUE (decl), specs,
12931 PARM, init != NULL_TREE, &attrs);
12932 if (! decl || TREE_TYPE (decl) == error_mark_node)
12933 continue;
12934
12935 if (attrs)
12936 cplus_decl_attributes (&decl, attrs, 0);
12937
12938 type = TREE_TYPE (decl);
12939 if (VOID_TYPE_P (type))
12940 {
12941 if (same_type_p (type, void_type_node)
12942 && !DECL_NAME (decl) && !result && !chain && !ellipsis)
12943 /* this is a parmlist of `(void)', which is ok. */
12944 break;
12945 cxx_incomplete_type_error (decl, type);
12946 /* It's not a good idea to actually create parameters of
12947 type `void'; other parts of the compiler assume that a
12948 void type terminates the parameter list. */
12949 type = error_mark_node;
12950 TREE_TYPE (decl) = error_mark_node;
12951 }
12952
12953 if (type != error_mark_node)
12954 {
12955 /* Top-level qualifiers on the parameters are
12956 ignored for function types. */
12957 type = TYPE_MAIN_VARIANT (type);
12958 if (TREE_CODE (type) == METHOD_TYPE)
12959 {
12960 error ("parameter `%D' invalidly declared method type", decl);
12961 type = build_pointer_type (type);
12962 TREE_TYPE (decl) = type;
12963 }
12964 else if (TREE_CODE (type) == OFFSET_TYPE)
12965 {
12966 error ("parameter `%D' invalidly declared offset type", decl);
12967 type = build_pointer_type (type);
12968 TREE_TYPE (decl) = type;
12969 }
12970 else if (abstract_virtuals_error (decl, type))
12971 any_error = 1; /* Seems like a good idea. */
12972 else if (POINTER_TYPE_P (type))
12973 {
12974 /* [dcl.fct]/6, parameter types cannot contain pointers
12975 (references) to arrays of unknown bound. */
12976 tree t = TREE_TYPE (type);
12977 int ptr = TYPE_PTR_P (type);
12978
12979 while (1)
12980 {
12981 if (TYPE_PTR_P (t))
12982 ptr = 1;
12983 else if (TREE_CODE (t) != ARRAY_TYPE)
12984 break;
12985 else if (!TYPE_DOMAIN (t))
12986 break;
12987 t = TREE_TYPE (t);
12988 }
12989 if (TREE_CODE (t) == ARRAY_TYPE)
12990 error ("parameter `%D' includes %s to array of unknown bound `%T'",
12991 decl, ptr ? "pointer" : "reference", t);
12992 }
12993
12994 if (!any_error && init)
12995 init = check_default_argument (decl, init);
12996 else
12997 init = NULL_TREE;
12998 }
12999
13000 TREE_CHAIN (decl) = decls;
13001 decls = decl;
13002 result = tree_cons (init, type, result);
13003 }
13004 decls = nreverse (decls);
13005 result = nreverse (result);
13006 if (!ellipsis)
13007 result = chainon (result, void_list_node);
13008 last_function_parms = decls;
13009
13010 return result;
13011 }
13012
13013
13014 /* D is a constructor or overloaded `operator='.
13015
13016 Let T be the class in which D is declared. Then, this function
13017 returns:
13018
13019 -1 if D's is an ill-formed constructor or copy assignment operator
13020 whose first parameter is of type `T'.
13021 0 if D is not a copy constructor or copy assignment
13022 operator.
13023 1 if D is a copy constructor or copy assignment operator whose
13024 first parameter is a reference to const qualified T.
13025 2 if D is a copy constructor or copy assignment operator whose
13026 first parameter is a reference to non-const qualified T.
13027
13028 This function can be used as a predicate. Positive values indicate
13029 a copy constructor and nonzero values indicate a copy assignment
13030 operator. */
13031
13032 int
copy_fn_p(d)13033 copy_fn_p (d)
13034 tree d;
13035 {
13036 tree args;
13037 tree arg_type;
13038 int result = 1;
13039
13040 my_friendly_assert (DECL_FUNCTION_MEMBER_P (d), 20011208);
13041
13042 if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
13043 /* Instantiations of template member functions are never copy
13044 functions. Note that member functions of templated classes are
13045 represented as template functions internally, and we must
13046 accept those as copy functions. */
13047 return 0;
13048
13049 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13050 if (!args)
13051 return 0;
13052
13053 arg_type = TREE_VALUE (args);
13054
13055 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
13056 {
13057 /* Pass by value copy assignment operator. */
13058 result = -1;
13059 }
13060 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
13061 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
13062 {
13063 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
13064 result = 2;
13065 }
13066 else
13067 return 0;
13068
13069 args = TREE_CHAIN (args);
13070
13071 if (args && args != void_list_node && !TREE_PURPOSE (args))
13072 /* There are more non-optional args. */
13073 return 0;
13074
13075 return result;
13076 }
13077
13078 /* Remember any special properties of member function DECL. */
13079
grok_special_member_properties(decl)13080 void grok_special_member_properties (decl)
13081 tree decl;
13082 {
13083 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
13084 ; /* Not special. */
13085 else if (DECL_CONSTRUCTOR_P (decl))
13086 {
13087 int ctor = copy_fn_p (decl);
13088
13089 if (ctor > 0)
13090 {
13091 /* [class.copy]
13092
13093 A non-template constructor for class X is a copy
13094 constructor if its first parameter is of type X&, const
13095 X&, volatile X& or const volatile X&, and either there
13096 are no other parameters or else all other parameters have
13097 default arguments. */
13098 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
13099 if (ctor > 1)
13100 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
13101 }
13102 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13103 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
13104 }
13105 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
13106 {
13107 /* [class.copy]
13108
13109 A non-template assignment operator for class X is a copy
13110 assignment operator if its parameter is of type X, X&, const
13111 X&, volatile X& or const volatile X&. */
13112
13113 int assop = copy_fn_p (decl);
13114
13115 if (assop)
13116 {
13117 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
13118 if (assop != 1)
13119 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
13120 if (DECL_PURE_VIRTUAL_P (decl))
13121 TYPE_HAS_ABSTRACT_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
13122 }
13123 }
13124 }
13125
13126 /* Check a constructor DECL has the correct form. Complains
13127 if the class has a constructor of the form X(X). */
13128
13129 int
grok_ctor_properties(ctype,decl)13130 grok_ctor_properties (ctype, decl)
13131 tree ctype, decl;
13132 {
13133 int ctor_parm = copy_fn_p (decl);
13134
13135 if (ctor_parm < 0)
13136 {
13137 /* [class.copy]
13138
13139 A declaration of a constructor for a class X is ill-formed if
13140 its first parameter is of type (optionally cv-qualified) X
13141 and either there are no other parameters or else all other
13142 parameters have default arguments.
13143
13144 We *don't* complain about member template instantiations that
13145 have this form, though; they can occur as we try to decide
13146 what constructor to use during overload resolution. Since
13147 overload resolution will never prefer such a constructor to
13148 the non-template copy constructor (which is either explicitly
13149 or implicitly defined), there's no need to worry about their
13150 existence. Theoretically, they should never even be
13151 instantiated, but that's hard to forestall. */
13152 error ("invalid constructor; you probably meant `%T (const %T&)'",
13153 ctype, ctype);
13154 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
13155 return 0;
13156 }
13157
13158 return 1;
13159 }
13160
13161 /* An operator with this code is unary, but can also be binary. */
13162
13163 static int
ambi_op_p(code)13164 ambi_op_p (code)
13165 enum tree_code code;
13166 {
13167 return (code == INDIRECT_REF
13168 || code == ADDR_EXPR
13169 || code == CONVERT_EXPR
13170 || code == NEGATE_EXPR
13171 || code == PREINCREMENT_EXPR
13172 || code == PREDECREMENT_EXPR);
13173 }
13174
13175 /* An operator with this name can only be unary. */
13176
13177 static int
unary_op_p(code)13178 unary_op_p (code)
13179 enum tree_code code;
13180 {
13181 return (code == TRUTH_NOT_EXPR
13182 || code == BIT_NOT_EXPR
13183 || code == COMPONENT_REF
13184 || code == TYPE_EXPR);
13185 }
13186
13187 /* Do a little sanity-checking on how they declared their operator. */
13188
13189 void
grok_op_properties(decl,friendp)13190 grok_op_properties (decl, friendp)
13191 tree decl;
13192 int friendp;
13193 {
13194 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13195 tree argtype;
13196 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
13197 tree name = DECL_NAME (decl);
13198 enum tree_code operator_code;
13199 int arity;
13200
13201 /* Count the number of arguments. */
13202 for (argtype = argtypes, arity = 0;
13203 argtype && argtype != void_list_node;
13204 argtype = TREE_CHAIN (argtype))
13205 ++arity;
13206
13207 if (current_class_type == NULL_TREE)
13208 friendp = 1;
13209
13210 if (DECL_CONV_FN_P (decl))
13211 operator_code = TYPE_EXPR;
13212 else
13213 do
13214 {
13215 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
13216 if (ansi_opname (CODE) == name) \
13217 { \
13218 operator_code = (CODE); \
13219 break; \
13220 } \
13221 else if (ansi_assopname (CODE) == name) \
13222 { \
13223 operator_code = (CODE); \
13224 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
13225 break; \
13226 }
13227
13228 #include "operators.def"
13229 #undef DEF_OPERATOR
13230
13231 abort ();
13232 }
13233 while (0);
13234 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
13235 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
13236
13237 if (! friendp)
13238 {
13239 switch (operator_code)
13240 {
13241 case CALL_EXPR:
13242 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
13243 break;
13244
13245 case ARRAY_REF:
13246 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
13247 break;
13248
13249 case COMPONENT_REF:
13250 case MEMBER_REF:
13251 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
13252 break;
13253
13254 case NEW_EXPR:
13255 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
13256 break;
13257
13258 case DELETE_EXPR:
13259 TYPE_GETS_DELETE (current_class_type) |= 1;
13260 break;
13261
13262 case VEC_NEW_EXPR:
13263 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
13264 break;
13265
13266 case VEC_DELETE_EXPR:
13267 TYPE_GETS_DELETE (current_class_type) |= 2;
13268 break;
13269
13270 default:
13271 break;
13272 }
13273 }
13274
13275 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
13276 {
13277 /* When the compiler encounters the definition of A::operator new, it
13278 doesn't look at the class declaration to find out if it's static. */
13279 if (methodp)
13280 revert_static_member_fn (decl);
13281
13282 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
13283 }
13284 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
13285 {
13286 if (methodp)
13287 revert_static_member_fn (decl);
13288
13289 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
13290 }
13291 else
13292 {
13293 /* An operator function must either be a non-static member function
13294 or have at least one parameter of a class, a reference to a class,
13295 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13296 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13297 {
13298 if (operator_code == TYPE_EXPR
13299 || operator_code == CALL_EXPR
13300 || operator_code == COMPONENT_REF
13301 || operator_code == ARRAY_REF
13302 || operator_code == NOP_EXPR)
13303 error ("`%D' must be a nonstatic member function", decl);
13304 else
13305 {
13306 tree p = argtypes;
13307
13308 if (DECL_STATIC_FUNCTION_P (decl))
13309 error ("`%D' must be either a non-static member function or a non-member function", decl);
13310
13311 if (p)
13312 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
13313 {
13314 tree arg = TREE_VALUE (p);
13315 if (TREE_CODE (arg) == REFERENCE_TYPE)
13316 arg = TREE_TYPE (arg);
13317
13318 /* This lets bad template code slip through. */
13319 if (IS_AGGR_TYPE (arg)
13320 || TREE_CODE (arg) == ENUMERAL_TYPE
13321 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
13322 || TREE_CODE (arg) == BOUND_TEMPLATE_TEMPLATE_PARM)
13323 goto foundaggr;
13324 }
13325 error
13326 ("`%D' must have an argument of class or enumerated type",
13327 decl);
13328 foundaggr:
13329 ;
13330 }
13331 }
13332
13333 if (operator_code == CALL_EXPR)
13334 return; /* No restrictions on args. */
13335
13336 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
13337 {
13338 tree t = TREE_TYPE (name);
13339 if (! friendp)
13340 {
13341 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13342 const char *what = 0;
13343
13344 if (ref)
13345 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13346
13347 if (TREE_CODE (t) == VOID_TYPE)
13348 what = "void";
13349 else if (t == current_class_type)
13350 what = "the same type";
13351 /* Don't force t to be complete here. */
13352 else if (IS_AGGR_TYPE (t)
13353 && COMPLETE_TYPE_P (t)
13354 && DERIVED_FROM_P (t, current_class_type))
13355 what = "a base class";
13356
13357 if (what && warn_conversion)
13358 warning ("conversion to %s%s will never use a type conversion operator",
13359 ref ? "a reference to " : "", what);
13360 }
13361 }
13362 if (operator_code == COND_EXPR)
13363 {
13364 /* 13.4.0.3 */
13365 error ("ISO C++ prohibits overloading operator ?:");
13366 }
13367 else if (ambi_op_p (operator_code))
13368 {
13369 if (arity == 1)
13370 /* We pick the one-argument operator codes by default, so
13371 we don't have to change anything. */
13372 ;
13373 else if (arity == 2)
13374 {
13375 /* If we thought this was a unary operator, we now know
13376 it to be a binary operator. */
13377 switch (operator_code)
13378 {
13379 case INDIRECT_REF:
13380 operator_code = MULT_EXPR;
13381 break;
13382
13383 case ADDR_EXPR:
13384 operator_code = BIT_AND_EXPR;
13385 break;
13386
13387 case CONVERT_EXPR:
13388 operator_code = PLUS_EXPR;
13389 break;
13390
13391 case NEGATE_EXPR:
13392 operator_code = MINUS_EXPR;
13393 break;
13394
13395 case PREINCREMENT_EXPR:
13396 operator_code = POSTINCREMENT_EXPR;
13397 break;
13398
13399 case PREDECREMENT_EXPR:
13400 operator_code = POSTDECREMENT_EXPR;
13401 break;
13402
13403 default:
13404 abort ();
13405 }
13406
13407 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
13408
13409 if ((operator_code == POSTINCREMENT_EXPR
13410 || operator_code == POSTDECREMENT_EXPR)
13411 && ! processing_template_decl
13412 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
13413 {
13414 if (methodp)
13415 error ("postfix `%D' must take `int' as its argument",
13416 decl);
13417 else
13418 error
13419 ("postfix `%D' must take `int' as its second argument",
13420 decl);
13421 }
13422 }
13423 else
13424 {
13425 if (methodp)
13426 error ("`%D' must take either zero or one argument", decl);
13427 else
13428 error ("`%D' must take either one or two arguments", decl);
13429 }
13430
13431 /* More Effective C++ rule 6. */
13432 if (warn_ecpp
13433 && (operator_code == POSTINCREMENT_EXPR
13434 || operator_code == POSTDECREMENT_EXPR
13435 || operator_code == PREINCREMENT_EXPR
13436 || operator_code == PREDECREMENT_EXPR))
13437 {
13438 tree arg = TREE_VALUE (argtypes);
13439 tree ret = TREE_TYPE (TREE_TYPE (decl));
13440 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13441 arg = TREE_TYPE (arg);
13442 arg = TYPE_MAIN_VARIANT (arg);
13443 if (operator_code == PREINCREMENT_EXPR
13444 || operator_code == PREDECREMENT_EXPR)
13445 {
13446 if (TREE_CODE (ret) != REFERENCE_TYPE
13447 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
13448 arg))
13449 warning ("prefix `%D' should return `%T'", decl,
13450 build_reference_type (arg));
13451 }
13452 else
13453 {
13454 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13455 warning ("postfix `%D' should return `%T'", decl, arg);
13456 }
13457 }
13458 }
13459 else if (unary_op_p (operator_code))
13460 {
13461 if (arity != 1)
13462 {
13463 if (methodp)
13464 error ("`%D' must take `void'", decl);
13465 else
13466 error ("`%D' must take exactly one argument", decl);
13467 }
13468 }
13469 else /* if (binary_op_p (operator_code)) */
13470 {
13471 if (arity != 2)
13472 {
13473 if (methodp)
13474 error ("`%D' must take exactly one argument", decl);
13475 else
13476 error ("`%D' must take exactly two arguments", decl);
13477 }
13478
13479 /* More Effective C++ rule 7. */
13480 if (warn_ecpp
13481 && (operator_code == TRUTH_ANDIF_EXPR
13482 || operator_code == TRUTH_ORIF_EXPR
13483 || operator_code == COMPOUND_EXPR))
13484 warning ("user-defined `%D' always evaluates both arguments",
13485 decl);
13486 }
13487
13488 /* Effective C++ rule 23. */
13489 if (warn_ecpp
13490 && arity == 2
13491 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
13492 && (operator_code == PLUS_EXPR
13493 || operator_code == MINUS_EXPR
13494 || operator_code == TRUNC_DIV_EXPR
13495 || operator_code == MULT_EXPR
13496 || operator_code == TRUNC_MOD_EXPR)
13497 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13498 warning ("`%D' should return by value", decl);
13499
13500 /* [over.oper]/8 */
13501 for (; argtypes && argtypes != void_list_node;
13502 argtypes = TREE_CHAIN (argtypes))
13503 if (TREE_PURPOSE (argtypes))
13504 {
13505 TREE_PURPOSE (argtypes) = NULL_TREE;
13506 if (operator_code == POSTINCREMENT_EXPR
13507 || operator_code == POSTDECREMENT_EXPR)
13508 {
13509 if (pedantic)
13510 pedwarn ("`%D' cannot have default arguments", decl);
13511 }
13512 else
13513 error ("`%D' cannot have default arguments", decl);
13514 }
13515
13516 }
13517 }
13518
13519 static const char *
tag_name(code)13520 tag_name (code)
13521 enum tag_types code;
13522 {
13523 switch (code)
13524 {
13525 case record_type:
13526 return "struct";
13527 case class_type:
13528 return "class";
13529 case union_type:
13530 return "union ";
13531 case enum_type:
13532 return "enum";
13533 default:
13534 abort ();
13535 }
13536 }
13537
13538 /* Name lookup in an elaborated-type-specifier (after the keyword
13539 indicated by TAG_CODE) has found TYPE. If the
13540 elaborated-type-specifier is invalid, issue a diagnostic and return
13541 error_mark_node; otherwise, return TYPE itself. */
13542
13543 static tree
check_elaborated_type_specifier(enum tag_types tag_code,tree type)13544 check_elaborated_type_specifier (enum tag_types tag_code,
13545 tree type)
13546 {
13547 tree t;
13548
13549 t = follow_tag_typedef (type);
13550
13551 /* [dcl.type.elab] If the identifier resolves to a typedef-name or a
13552 template type-parameter, the elaborated-type-specifier is
13553 ill-formed. */
13554 if (!t)
13555 {
13556 error ("using typedef-name `%D' after `%s'",
13557 TYPE_NAME (type), tag_name (tag_code));
13558 t = error_mark_node;
13559 }
13560 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13561 {
13562 error ("using template type parameter `%T' after `%s'",
13563 type, tag_name (tag_code));
13564 t = error_mark_node;
13565 }
13566
13567 return t;
13568 }
13569
13570 /* Get the struct, enum or union (CODE says which) with tag NAME.
13571 Define the tag as a forward-reference if it is not defined.
13572
13573 C++: If a class derivation is given, process it here, and report
13574 an error if multiple derivation declarations are not identical.
13575
13576 If this is a definition, come in through xref_tag and only look in
13577 the current frame for the name (since C++ allows new names in any
13578 scope.) */
13579
13580 tree
xref_tag(enum tag_types tag_code,tree name,tree attributes,bool globalize)13581 xref_tag (enum tag_types tag_code, tree name, tree attributes,
13582 bool globalize)
13583 {
13584 enum tree_code code;
13585 register tree ref, t;
13586 struct cp_binding_level *b = current_binding_level;
13587 tree context = NULL_TREE;
13588
13589 timevar_push (TV_NAME_LOOKUP);
13590
13591 switch (tag_code)
13592 {
13593 case record_type:
13594 case class_type:
13595 code = RECORD_TYPE;
13596 break;
13597 case union_type:
13598 code = UNION_TYPE;
13599 break;
13600 case enum_type:
13601 code = ENUMERAL_TYPE;
13602 break;
13603 default:
13604 abort ();
13605 }
13606
13607 /* If a cross reference is requested, look up the type
13608 already defined for this tag and return it. */
13609 if (TYPE_P (name))
13610 {
13611 t = name;
13612 name = TYPE_IDENTIFIER (t);
13613 }
13614 else
13615 t = IDENTIFIER_TYPE_VALUE (name);
13616
13617 /* Warn about 'friend struct Inherited;' doing the wrong thing. */
13618 if (t && globalize && TREE_CODE (t) == TYPENAME_TYPE)
13619 {
13620 static int explained;
13621 tree shadowed;
13622
13623 warning ("`%s %T' declares a new type at namespace scope",
13624 tag_name (tag_code), name);
13625 if (!explained++)
13626 warning (" names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'",
13627 tag_name (tag_code),
13628 constructor_name (current_class_type),
13629 TYPE_IDENTIFIER (t));
13630
13631 /* We need to remove the class scope binding for the
13632 TYPENAME_TYPE as otherwise poplevel_class gets confused. */
13633 for (shadowed = b->class_shadowed;
13634 shadowed;
13635 shadowed = TREE_CHAIN (shadowed))
13636 if (TREE_TYPE (shadowed) == TYPE_NAME (t))
13637 {
13638 TREE_PURPOSE (shadowed) = NULL_TREE;
13639 break;
13640 }
13641 }
13642
13643 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
13644 && TREE_CODE (t) != BOUND_TEMPLATE_TEMPLATE_PARM)
13645 t = NULL_TREE;
13646
13647 if (! globalize)
13648 {
13649 /* If we know we are defining this tag, only look it up in
13650 this scope and don't try to find it as a type. */
13651 ref = lookup_tag (code, name, b, 1);
13652 }
13653 else
13654 {
13655 if (t)
13656 {
13657 ref = check_elaborated_type_specifier (tag_code, t);
13658 if (ref == error_mark_node)
13659 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
13660 }
13661 else
13662 ref = lookup_tag (code, name, b, 0);
13663
13664 if (! ref)
13665 {
13666 /* Try finding it as a type declaration. If that wins,
13667 use it. */
13668 ref = lookup_name (name, 1);
13669
13670 if (ref != NULL_TREE
13671 && processing_template_decl
13672 && DECL_CLASS_TEMPLATE_P (ref)
13673 && template_class_depth (current_class_type) == 0)
13674 /* Since GLOBALIZE is true, we're declaring a global
13675 template, so we want this type. */
13676 ref = DECL_TEMPLATE_RESULT (ref);
13677
13678 if (ref && TREE_CODE (ref) == TYPE_DECL)
13679 {
13680 ref = check_elaborated_type_specifier (tag_code,
13681 TREE_TYPE (ref));
13682 if (ref == error_mark_node)
13683 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
13684 if (ref && TREE_CODE (ref) != code)
13685 ref = NULL_TREE;
13686 }
13687 else
13688 ref = NULL_TREE;
13689 }
13690
13691 if (ref && current_class_type
13692 && template_class_depth (current_class_type)
13693 && PROCESSING_REAL_TEMPLATE_DECL_P ())
13694 {
13695 /* Since GLOBALIZE is nonzero, we are not looking at a
13696 definition of this tag. Since, in addition, we are currently
13697 processing a (member) template declaration of a template
13698 class, we must be very careful; consider:
13699
13700 template <class X>
13701 struct S1
13702
13703 template <class U>
13704 struct S2
13705 { template <class V>
13706 friend struct S1; };
13707
13708 Here, the S2::S1 declaration should not be confused with the
13709 outer declaration. In particular, the inner version should
13710 have a template parameter of level 2, not level 1. This
13711 would be particularly important if the member declaration
13712 were instead:
13713
13714 template <class V = U> friend struct S1;
13715
13716 say, when we should tsubst into `U' when instantiating
13717 S2. On the other hand, when presented with:
13718
13719 template <class T>
13720 struct S1 {
13721 template <class U>
13722 struct S2 {};
13723 template <class U>
13724 friend struct S2;
13725 };
13726
13727 we must find the inner binding eventually. We
13728 accomplish this by making sure that the new type we
13729 create to represent this declaration has the right
13730 TYPE_CONTEXT. */
13731 context = TYPE_CONTEXT (ref);
13732 ref = NULL_TREE;
13733 }
13734 }
13735
13736 if (! ref)
13737 {
13738 /* If no such tag is yet defined, create a forward-reference node
13739 and record it as the "definition".
13740 When a real declaration of this type is found,
13741 the forward-reference will be altered into a real type. */
13742 if (code == ENUMERAL_TYPE)
13743 {
13744 error ("use of enum `%#D' without previous declaration", name);
13745 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
13746 }
13747 else
13748 {
13749 struct cp_binding_level *old_b = class_binding_level;
13750
13751 ref = make_aggr_type (code);
13752 TYPE_CONTEXT (ref) = context;
13753
13754 #ifdef NONNESTED_CLASSES
13755 /* Class types don't nest the way enums do. */
13756 class_binding_level = (struct cp_binding_level *)0;
13757 #endif
13758 pushtag (name, ref, globalize);
13759 class_binding_level = old_b;
13760 }
13761 }
13762 else
13763 {
13764 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
13765 redeclare_class_template (ref, current_template_parms);
13766 }
13767
13768 TYPE_ATTRIBUTES (ref) = attributes;
13769
13770 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ref);
13771 }
13772
13773 tree
xref_tag_from_type(old,id,globalize)13774 xref_tag_from_type (old, id, globalize)
13775 tree old, id;
13776 int globalize;
13777 {
13778 enum tag_types tag_kind;
13779
13780 if (TREE_CODE (old) == RECORD_TYPE)
13781 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13782 else
13783 tag_kind = union_type;
13784
13785 if (id == NULL_TREE)
13786 id = TYPE_IDENTIFIER (old);
13787
13788 return xref_tag (tag_kind, id, /*attributes=*/NULL_TREE, globalize);
13789 }
13790
13791 /* REF is a type (named NAME), for which we have just seen some
13792 baseclasses. BINFO is a list of those baseclasses; the
13793 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
13794 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
13795 struct, or union. */
13796
13797 void
xref_basetypes(ref,binfo)13798 xref_basetypes (ref, binfo)
13799 tree ref;
13800 tree binfo;
13801 {
13802 /* In the declaration `A : X, Y, ... Z' we mark all the types
13803 (A, X, Y, ..., Z) so we can check for duplicates. */
13804 tree binfos;
13805 tree base;
13806
13807 int i, len;
13808 enum tag_types tag_code;
13809
13810 if (TREE_CODE (ref) == UNION_TYPE)
13811 {
13812 error ("derived union `%T' invalid", ref);
13813 return;
13814 }
13815
13816 tag_code = (CLASSTYPE_DECLARED_CLASS (ref) ? class_type : record_type);
13817
13818 len = list_length (binfo);
13819
13820 /* First, make sure that any templates in base-classes are
13821 instantiated. This ensures that if we call ourselves recursively
13822 we do not get confused about which classes are marked and which
13823 are not. */
13824 for (base = binfo; base; base = TREE_CHAIN (base))
13825 complete_type (TREE_VALUE (base));
13826
13827 SET_CLASSTYPE_MARKED (ref);
13828 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
13829
13830 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
13831 {
13832 /* The base of a derived struct is public by default. */
13833 int via_public
13834 = (TREE_PURPOSE (binfo) == access_public_node
13835 || TREE_PURPOSE (binfo) == access_public_virtual_node
13836 || (tag_code != class_type
13837 && (TREE_PURPOSE (binfo) == access_default_node
13838 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
13839 int via_protected
13840 = (TREE_PURPOSE (binfo) == access_protected_node
13841 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
13842 int via_virtual
13843 = (TREE_PURPOSE (binfo) == access_private_virtual_node
13844 || TREE_PURPOSE (binfo) == access_protected_virtual_node
13845 || TREE_PURPOSE (binfo) == access_public_virtual_node
13846 || TREE_PURPOSE (binfo) == access_default_virtual_node);
13847 tree basetype = TREE_VALUE (binfo);
13848 tree base_binfo;
13849
13850 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
13851 basetype = TREE_TYPE (basetype);
13852 if (!basetype
13853 || (TREE_CODE (basetype) != RECORD_TYPE
13854 && TREE_CODE (basetype) != TYPENAME_TYPE
13855 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
13856 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
13857 {
13858 error ("base type `%T' fails to be a struct or class type",
13859 TREE_VALUE (binfo));
13860 continue;
13861 }
13862
13863 /* This code replaces similar code in layout_basetypes.
13864 We put the complete_type first for implicit `typename'. */
13865 if (!COMPLETE_TYPE_P (basetype)
13866 && ! (current_template_parms && uses_template_parms (basetype)))
13867 {
13868 error ("base class `%T' has incomplete type", basetype);
13869 continue;
13870 }
13871 else
13872 {
13873 if (CLASSTYPE_MARKED (basetype))
13874 {
13875 if (basetype == ref)
13876 error ("recursive type `%T' undefined", basetype);
13877 else
13878 error ("duplicate base type `%T' invalid", basetype);
13879 continue;
13880 }
13881
13882 if (TYPE_FOR_JAVA (basetype)
13883 && (current_lang_depth () == 0))
13884 TYPE_FOR_JAVA (ref) = 1;
13885
13886 /* Note that the BINFO records which describe individual
13887 inheritances are *not* shared in the lattice! They
13888 cannot be shared because a given baseclass may be
13889 inherited with different `accessibility' by different
13890 derived classes. (Each BINFO record describing an
13891 individual inheritance contains flags which say what
13892 the `accessibility' of that particular inheritance is.) */
13893
13894 base_binfo
13895 = make_binfo (size_zero_node, basetype,
13896 CLASS_TYPE_P (basetype)
13897 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
13898 CLASS_TYPE_P (basetype)
13899 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
13900
13901 TREE_VEC_ELT (binfos, i) = base_binfo;
13902 TREE_VIA_PUBLIC (base_binfo) = via_public;
13903 TREE_VIA_PROTECTED (base_binfo) = via_protected;
13904 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
13905 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
13906
13907 /* We need to unshare the binfos now so that lookups during class
13908 definition work. */
13909 unshare_base_binfos (base_binfo);
13910
13911 SET_CLASSTYPE_MARKED (basetype);
13912
13913 /* We are free to modify these bits because they are meaningless
13914 at top level, and BASETYPE is a top-level type. */
13915 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
13916 {
13917 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
13918 /* Converting to a virtual base class requires looking
13919 up the offset of the virtual base. */
13920 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
13921 }
13922
13923 if (CLASS_TYPE_P (basetype))
13924 {
13925 TYPE_HAS_NEW_OPERATOR (ref)
13926 |= TYPE_HAS_NEW_OPERATOR (basetype);
13927 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13928 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13929 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13930 /* If the base-class uses multiple inheritance, so do we. */
13931 TYPE_USES_MULTIPLE_INHERITANCE (ref)
13932 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
13933 /* Likewise, if converting to a base of the base may require
13934 code, then we may need to generate code to convert to a
13935 base as well. */
13936 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
13937 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
13938 }
13939
13940 i += 1;
13941 }
13942 }
13943 if (i)
13944 TREE_VEC_LENGTH (binfos) = i;
13945 else
13946 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
13947
13948 if (i > 1)
13949 {
13950 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
13951 /* If there is more than one non-empty they cannot be at the same
13952 address. */
13953 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
13954 }
13955
13956 /* Unmark all the types. */
13957 while (--i >= 0)
13958 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
13959 CLEAR_CLASSTYPE_MARKED (ref);
13960
13961 /* Now that we know all the base-classes, set up the list of virtual
13962 bases. */
13963 get_vbase_types (ref);
13964 }
13965
13966
13967 /* Begin compiling the definition of an enumeration type.
13968 NAME is its name (or null if anonymous).
13969 Returns the type object, as yet incomplete.
13970 Also records info about it so that build_enumerator
13971 may be used to declare the individual values as they are read. */
13972
13973 tree
start_enum(name)13974 start_enum (name)
13975 tree name;
13976 {
13977 register tree enumtype = NULL_TREE;
13978 struct cp_binding_level *b = current_binding_level;
13979
13980 /* If this is the real definition for a previous forward reference,
13981 fill in the contents in the same object that used to be the
13982 forward reference. */
13983
13984 if (name != NULL_TREE)
13985 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
13986
13987 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
13988 {
13989 error ("multiple definition of `%#T'", enumtype);
13990 cp_error_at ("previous definition here", enumtype);
13991 /* Clear out TYPE_VALUES, and start again. */
13992 TYPE_VALUES (enumtype) = NULL_TREE;
13993 }
13994 else
13995 {
13996 enumtype = make_node (ENUMERAL_TYPE);
13997 pushtag (name, enumtype, 0);
13998 }
13999
14000 return enumtype;
14001 }
14002
14003 /* After processing and defining all the values of an enumeration type,
14004 install their decls in the enumeration type and finish it off.
14005 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
14006
14007 void
finish_enum(enumtype)14008 finish_enum (enumtype)
14009 tree enumtype;
14010 {
14011 tree pair;
14012 tree minnode;
14013 tree maxnode;
14014 tree t;
14015 bool unsignedp;
14016 int lowprec;
14017 int highprec;
14018 int precision;
14019
14020 /* We built up the VALUES in reverse order. */
14021 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14022
14023 /* For an enum defined in a template, just set the type of the values;
14024 all further processing is postponed until the template is
14025 instantiated. We need to set the type so that tsubst of a CONST_DECL
14026 works. */
14027 if (processing_template_decl)
14028 {
14029 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
14030 TREE_TYPE (TREE_VALUE (pair)) = enumtype;
14031 if (at_function_scope_p ())
14032 add_stmt (build_min (TAG_DEFN, enumtype));
14033 return;
14034 }
14035
14036 if (TYPE_VALUES (enumtype))
14037 {
14038 minnode = maxnode = NULL_TREE;
14039
14040 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
14041 {
14042 tree decl = TREE_VALUE (pair);
14043 tree value = DECL_INITIAL (decl);
14044
14045 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14046 each enumerator has the type of its enumeration. Prior to the
14047 closing brace, the type of each enumerator is the type of its
14048 initializing value. */
14049 TREE_TYPE (decl) = enumtype;
14050
14051 /* Figure out what the minimum and maximum values of the
14052 enumerators are. */
14053 if (!minnode)
14054 minnode = maxnode = value;
14055 else if (tree_int_cst_lt (maxnode, value))
14056 maxnode = value;
14057 else if (tree_int_cst_lt (value, minnode))
14058 minnode = value;
14059
14060 /* Set the TREE_TYPE for the values as well. That's so that when
14061 we call decl_constant_value we get an entity of the right type
14062 (but with the constant value). But first make a copy so we
14063 don't clobber shared INTEGER_CSTs. */
14064 if (TREE_TYPE (value) != enumtype)
14065 {
14066 value = DECL_INITIAL (decl) = copy_node (value);
14067 TREE_TYPE (value) = enumtype;
14068 }
14069
14070 /* In addition, transform the TYPE_VALUES list to contain the
14071 values, rather than the CONST_DECLs for them. */
14072 TREE_VALUE (pair) = value;
14073 }
14074 }
14075 else
14076 minnode = maxnode = integer_zero_node;
14077
14078 /* Compute the number of bits require to represent all values of the
14079 enumeration. We must do this before the type of MINNODE and
14080 MAXNODE are transformed, since min_precision relies on the
14081 TREE_TYPE of the value it is passed. */
14082 unsignedp = tree_int_cst_sgn (minnode) >= 0;
14083 lowprec = min_precision (minnode, unsignedp);
14084 highprec = min_precision (maxnode, unsignedp);
14085 precision = MAX (lowprec, highprec);
14086
14087 /* DR 377
14088
14089 IF no integral type can represent all the enumerator values, the
14090 enumeration is ill-formed. */
14091 if (precision > TYPE_PRECISION (long_long_integer_type_node))
14092 {
14093 error ("no integral type can represent all of the enumerator values "
14094 "for `%T'", enumtype);
14095 precision = TYPE_PRECISION (long_long_integer_type_node);
14096 }
14097
14098 /* Compute the minium and maximum values for the type, the size of
14099 the type, and so forth. */
14100 TYPE_PRECISION (enumtype) = precision;
14101 TYPE_SIZE (enumtype) = NULL_TREE;
14102 if (unsignedp)
14103 fixup_unsigned_type (enumtype);
14104 else
14105 fixup_signed_type (enumtype);
14106
14107 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
14108 /* Use the width of the narrowest normal C type which is wide
14109 enough. */
14110 TYPE_PRECISION (enumtype) = TYPE_PRECISION (c_common_type_for_size
14111 (precision, 1));
14112 else
14113 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
14114
14115 TYPE_SIZE (enumtype) = NULL_TREE;
14116 layout_type (enumtype);
14117
14118 /* Fix up all variant types of this enum type. */
14119 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14120 {
14121 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14122 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
14123 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
14124 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
14125 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
14126 TYPE_MODE (t) = TYPE_MODE (enumtype);
14127 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
14128 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
14129 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
14130 TREE_UNSIGNED (t) = TREE_UNSIGNED (enumtype);
14131 }
14132
14133 /* Finish debugging output for this type. */
14134 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14135 }
14136
14137 /* Build and install a CONST_DECL for an enumeration constant of the
14138 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14139 Assignment of sequential values by default is handled here. */
14140
14141 void
build_enumerator(name,value,enumtype)14142 build_enumerator (name, value, enumtype)
14143 tree name;
14144 tree value;
14145 tree enumtype;
14146 {
14147 tree decl;
14148 tree context;
14149 tree type;
14150
14151 /* Remove no-op casts from the value. */
14152 if (value)
14153 STRIP_TYPE_NOPS (value);
14154
14155 if (! processing_template_decl)
14156 {
14157 /* Validate and default VALUE. */
14158 if (value != NULL_TREE)
14159 {
14160 value = decl_constant_value (value);
14161
14162 if (TREE_CODE (value) == INTEGER_CST)
14163 {
14164 value = default_conversion (value);
14165 constant_expression_warning (value);
14166 }
14167 else
14168 {
14169 error ("enumerator value for `%D' not integer constant", name);
14170 value = NULL_TREE;
14171 }
14172 }
14173
14174 /* Default based on previous value. */
14175 if (value == NULL_TREE && ! processing_template_decl)
14176 {
14177 tree prev_value;
14178
14179 if (TYPE_VALUES (enumtype))
14180 {
14181 /* The next value is the previous value ... */
14182 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14183 /* ... plus one. */
14184 value = cp_build_binary_op (PLUS_EXPR,
14185 prev_value,
14186 integer_one_node);
14187
14188 if (tree_int_cst_lt (value, prev_value))
14189 error ("overflow in enumeration values at `%D'", name);
14190 }
14191 else
14192 value = integer_zero_node;
14193 }
14194
14195 /* Remove no-op casts from the value. */
14196 STRIP_TYPE_NOPS (value);
14197 }
14198
14199 /* C++ associates enums with global, function, or class declarations. */
14200 context = current_scope ();
14201
14202 /* Build the actual enumeration constant. Note that the enumeration
14203 constants have the type of their initializers until the
14204 enumeration is complete:
14205
14206 [ dcl.enum ]
14207
14208 Following the closing brace of an enum-specifier, each enumer-
14209 ator has the type of its enumeration. Prior to the closing
14210 brace, the type of each enumerator is the type of its
14211 initializing value.
14212
14213 In finish_enum we will reset the type. Of course, if we're
14214 processing a template, there may be no value. */
14215 type = value ? TREE_TYPE (value) : NULL_TREE;
14216
14217 if (context && context == current_class_type)
14218 /* This enum declaration is local to the class. We need the full
14219 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
14220 decl = build_lang_decl (CONST_DECL, name, type);
14221 else
14222 /* It's a global enum, or it's local to a function. (Note local to
14223 a function could mean local to a class method. */
14224 decl = build_decl (CONST_DECL, name, type);
14225
14226 DECL_INITIAL (decl) = value;
14227 TREE_READONLY (decl) = 1;
14228
14229 if (context && context == current_class_type)
14230 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14231 on the TYPE_FIELDS list for `S'. (That's so that you can say
14232 things like `S::i' later.) */
14233 finish_member_declaration (decl);
14234 else
14235 {
14236 pushdecl (decl);
14237 /* Contrary to finish_member_declaration, pushdecl does not properly
14238 set the DECL_CONTEXT. Do that now here. Doing that before calling
14239 pushdecl will confuse the logic used in that function. Hopefully,
14240 future versions will implement a more straight logic. */
14241 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
14242 }
14243
14244 /* Add this enumeration constant to the list for this type. */
14245 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14246 }
14247
14248
14249 /* We're defining DECL. Make sure that it's type is OK. */
14250
14251 static void
check_function_type(decl,current_function_parms)14252 check_function_type (decl, current_function_parms)
14253 tree decl;
14254 tree current_function_parms;
14255 {
14256 tree fntype = TREE_TYPE (decl);
14257 tree return_type = complete_type (TREE_TYPE (fntype));
14258
14259 /* In a function definition, arg types must be complete. */
14260 require_complete_types_for_parms (current_function_parms);
14261
14262 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14263 {
14264 error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
14265
14266 /* Make it return void instead, but don't change the
14267 type of the DECL_RESULT, in case we have a named return value. */
14268 if (TREE_CODE (fntype) == METHOD_TYPE)
14269 {
14270 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
14271 TREE_TYPE (decl)
14272 = build_cplus_method_type (ctype,
14273 void_type_node,
14274 FUNCTION_ARG_CHAIN (decl));
14275 }
14276 else
14277 TREE_TYPE (decl)
14278 = build_function_type (void_type_node,
14279 TYPE_ARG_TYPES (TREE_TYPE (decl)));
14280 TREE_TYPE (decl)
14281 = build_exception_variant (fntype,
14282 TYPE_RAISES_EXCEPTIONS (fntype));
14283 }
14284 else
14285 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14286 }
14287
14288 /* Create the FUNCTION_DECL for a function definition.
14289 DECLSPECS and DECLARATOR are the parts of the declaration;
14290 they describe the function's name and the type it returns,
14291 but twisted together in a fashion that parallels the syntax of C.
14292
14293 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14294 DECLARATOR is really the DECL for the function we are about to
14295 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14296 indicating that the function is an inline defined in-class.
14297
14298 This function creates a binding context for the function body
14299 as well as setting up the FUNCTION_DECL in current_function_decl.
14300
14301 Returns 1 on success. If the DECLARATOR is not suitable for a function
14302 (it defines a datum instead), we return 0, which tells
14303 yyparse to report a parse error.
14304
14305 For C++, we must first check whether that datum makes any sense.
14306 For example, "class A local_a(1,2);" means that variable local_a
14307 is an aggregate of type A, which should have a constructor
14308 applied to it with the argument list [1, 2]. */
14309
14310 int
start_function(declspecs,declarator,attrs,flags)14311 start_function (declspecs, declarator, attrs, flags)
14312 tree declspecs, declarator, attrs;
14313 int flags;
14314 {
14315 tree decl1;
14316 tree ctype = NULL_TREE;
14317 tree fntype;
14318 tree restype;
14319 int doing_friend = 0;
14320 struct cp_binding_level *bl;
14321 tree current_function_parms;
14322
14323 /* Sanity check. */
14324 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
14325 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
14326
14327 /* This should only be done once on the top most decl. */
14328 if (have_extern_spec)
14329 {
14330 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
14331 have_extern_spec = false;
14332 }
14333
14334 if (flags & SF_PRE_PARSED)
14335 {
14336 decl1 = declarator;
14337
14338 fntype = TREE_TYPE (decl1);
14339 if (TREE_CODE (fntype) == METHOD_TYPE)
14340 ctype = TYPE_METHOD_BASETYPE (fntype);
14341
14342 /* ISO C++ 11.4/5. A friend function defined in a class is in
14343 the (lexical) scope of the class in which it is defined. */
14344 if (!ctype && DECL_FRIEND_P (decl1))
14345 {
14346 ctype = DECL_FRIEND_CONTEXT (decl1);
14347
14348 /* CTYPE could be null here if we're dealing with a template;
14349 for example, `inline friend float foo()' inside a template
14350 will have no CTYPE set. */
14351 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14352 ctype = NULL_TREE;
14353 else
14354 doing_friend = 1;
14355 }
14356
14357 last_function_parms = DECL_ARGUMENTS (decl1);
14358 }
14359 else
14360 {
14361 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
14362 /* If the declarator is not suitable for a function definition,
14363 cause a syntax error. */
14364 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
14365 return 0;
14366
14367 cplus_decl_attributes (&decl1, attrs, 0);
14368
14369 /* If #pragma weak was used, mark the decl weak now. */
14370 if (global_scope_p (current_binding_level))
14371 maybe_apply_pragma_weak (decl1);
14372
14373 fntype = TREE_TYPE (decl1);
14374
14375 restype = TREE_TYPE (fntype);
14376 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
14377 {
14378 error ("semicolon missing after declaration of `%#T'", restype);
14379 shadow_tag (build_tree_list (NULL_TREE, restype));
14380 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
14381 if (TREE_CODE (fntype) == FUNCTION_TYPE)
14382 fntype = build_function_type (integer_type_node,
14383 TYPE_ARG_TYPES (fntype));
14384 else
14385 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
14386 integer_type_node,
14387 TYPE_ARG_TYPES (fntype));
14388 TREE_TYPE (decl1) = fntype;
14389 }
14390
14391 if (TREE_CODE (fntype) == METHOD_TYPE)
14392 ctype = TYPE_METHOD_BASETYPE (fntype);
14393 else if (DECL_MAIN_P (decl1))
14394 {
14395 /* If this doesn't return integer_type, complain. */
14396 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
14397 {
14398 if (pedantic || warn_return_type)
14399 pedwarn ("return type for `main' changed to `int'");
14400 TREE_TYPE (decl1) = fntype = default_function_type;
14401 }
14402 }
14403 }
14404
14405 if (DECL_DECLARED_INLINE_P (decl1)
14406 && lookup_attribute ("noinline", attrs))
14407 warning_with_decl (decl1,
14408 "inline function `%s' given attribute noinline");
14409
14410 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14411 /* This is a constructor, we must ensure that any default args
14412 introduced by this definition are propagated to the clones
14413 now. The clones are used directly in overload resolution. */
14414 adjust_clone_args (decl1);
14415
14416 /* Sometimes we don't notice that a function is a static member, and
14417 build a METHOD_TYPE for it. Fix that up now. */
14418 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14419 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
14420 {
14421 revert_static_member_fn (decl1);
14422 last_function_parms = TREE_CHAIN (last_function_parms);
14423 ctype = NULL_TREE;
14424 }
14425
14426 /* Warn if function was previously implicitly declared
14427 (but not if we warned then). */
14428 if (! warn_implicit
14429 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
14430 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
14431
14432 /* Set up current_class_type, and enter the scope of the class, if
14433 appropriate. */
14434 if (ctype)
14435 push_nested_class (ctype, 1);
14436 else if (DECL_STATIC_FUNCTION_P (decl1))
14437 push_nested_class (DECL_CONTEXT (decl1), 2);
14438
14439 /* Now that we have entered the scope of the class, we must restore
14440 the bindings for any template parameters surrounding DECL1, if it
14441 is an inline member template. (Order is important; consider the
14442 case where a template parameter has the same name as a field of
14443 the class.) It is not until after this point that
14444 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14445 if (flags & SF_INCLASS_INLINE)
14446 maybe_begin_member_template_processing (decl1);
14447
14448 /* Effective C++ rule 15. */
14449 if (warn_ecpp
14450 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
14451 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
14452 warning ("`operator=' should return a reference to `*this'");
14453
14454 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14455 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14456 if (!DECL_INITIAL (decl1))
14457 DECL_INITIAL (decl1) = error_mark_node;
14458
14459 /* This function exists in static storage.
14460 (This does not mean `static' in the C sense!) */
14461 TREE_STATIC (decl1) = 1;
14462
14463 /* We must call push_template_decl after current_class_type is set
14464 up. (If we are processing inline definitions after exiting a
14465 class scope, current_class_type will be NULL_TREE until set above
14466 by push_nested_class.) */
14467 if (processing_template_decl)
14468 decl1 = push_template_decl (decl1);
14469
14470 /* We are now in the scope of the function being defined. */
14471 current_function_decl = decl1;
14472
14473 /* Save the parm names or decls from this function's declarator
14474 where store_parm_decls will find them. */
14475 current_function_parms = last_function_parms;
14476
14477 /* Make sure the parameter and return types are reasonable. When
14478 you declare a function, these types can be incomplete, but they
14479 must be complete when you define the function. */
14480 if (! processing_template_decl)
14481 check_function_type (decl1, current_function_parms);
14482
14483 /* Build the return declaration for the function. */
14484 restype = TREE_TYPE (fntype);
14485 /* Promote the value to int before returning it. */
14486 if (c_promoting_integer_type_p (restype))
14487 restype = type_promotes_to (restype);
14488 if (DECL_RESULT (decl1) == NULL_TREE)
14489 {
14490 DECL_RESULT (decl1)
14491 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
14492 c_apply_type_quals_to_decl (cp_type_quals (restype),
14493 DECL_RESULT (decl1));
14494 }
14495
14496 /* Initialize RTL machinery. We cannot do this until
14497 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
14498 even when processing a template; this is how we get
14499 CFUN set up, and our per-function variables initialized.
14500 FIXME factor out the non-RTL stuff. */
14501 bl = current_binding_level;
14502 init_function_start (decl1, input_filename, lineno);
14503 current_binding_level = bl;
14504
14505 /* Even though we're inside a function body, we still don't want to
14506 call expand_expr to calculate the size of a variable-sized array.
14507 We haven't necessarily assigned RTL to all variables yet, so it's
14508 not safe to try to expand expressions involving them. */
14509 immediate_size_expand = 0;
14510 cfun->x_dont_save_pending_sizes_p = 1;
14511
14512 /* Start the statement-tree, start the tree now. */
14513 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
14514
14515 /* Let the user know we're compiling this function. */
14516 announce_function (decl1);
14517
14518 /* Record the decl so that the function name is defined.
14519 If we already have a decl for this name, and it is a FUNCTION_DECL,
14520 use the old decl. */
14521 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14522 {
14523 /* A specialization is not used to guide overload resolution. */
14524 if (!DECL_TEMPLATE_SPECIALIZATION (decl1)
14525 && ! DECL_FUNCTION_MEMBER_P (decl1))
14526 decl1 = pushdecl (decl1);
14527 else
14528 {
14529 /* We need to set the DECL_CONTEXT. */
14530 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
14531 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
14532 /* And make sure we have enough default args. */
14533 check_default_args (decl1);
14534 }
14535 fntype = TREE_TYPE (decl1);
14536 }
14537
14538 /* Reset these in case the call to pushdecl changed them. */
14539 current_function_decl = decl1;
14540 cfun->decl = decl1;
14541
14542 /* If we are (erroneously) defining a function that we have already
14543 defined before, wipe out what we knew before. */
14544 if (!DECL_PENDING_INLINE_P (decl1))
14545 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
14546
14547 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
14548 {
14549 /* We know that this was set up by `grokclassfn'. We do not
14550 wait until `store_parm_decls', since evil parse errors may
14551 never get us to that point. Here we keep the consistency
14552 between `current_class_type' and `current_class_ptr'. */
14553 tree t = DECL_ARGUMENTS (decl1);
14554
14555 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
14556 162);
14557 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
14558 19990811);
14559
14560 cp_function_chain->x_current_class_ref
14561 = build_indirect_ref (t, NULL);
14562 cp_function_chain->x_current_class_ptr = t;
14563
14564 /* Constructors and destructors need to know whether they're "in
14565 charge" of initializing virtual base classes. */
14566 t = TREE_CHAIN (t);
14567 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
14568 {
14569 current_in_charge_parm = t;
14570 t = TREE_CHAIN (t);
14571 }
14572 if (DECL_HAS_VTT_PARM_P (decl1))
14573 {
14574 if (DECL_NAME (t) != vtt_parm_identifier)
14575 abort ();
14576 current_vtt_parm = t;
14577 }
14578 }
14579
14580 if (DECL_INTERFACE_KNOWN (decl1))
14581 {
14582 tree ctx = decl_function_context (decl1);
14583
14584 if (DECL_NOT_REALLY_EXTERN (decl1))
14585 DECL_EXTERNAL (decl1) = 0;
14586
14587 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
14588 && TREE_PUBLIC (ctx))
14589 /* This is a function in a local class in an extern inline
14590 function. */
14591 comdat_linkage (decl1);
14592 }
14593 /* If this function belongs to an interface, it is public.
14594 If it belongs to someone else's interface, it is also external.
14595 This only affects inlines and template instantiations. */
14596 else if (interface_unknown == 0
14597 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
14598 || flag_alt_external_templates))
14599 {
14600 if (DECL_DECLARED_INLINE_P (decl1)
14601 || DECL_TEMPLATE_INSTANTIATION (decl1)
14602 || processing_template_decl)
14603 {
14604 DECL_EXTERNAL (decl1)
14605 = (interface_only
14606 || (DECL_DECLARED_INLINE_P (decl1)
14607 && ! flag_implement_inlines
14608 && !DECL_VINDEX (decl1)));
14609
14610 /* For WIN32 we also want to put these in linkonce sections. */
14611 maybe_make_one_only (decl1);
14612 }
14613 else
14614 DECL_EXTERNAL (decl1) = 0;
14615 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14616 DECL_INTERFACE_KNOWN (decl1) = 1;
14617 }
14618 else if (interface_unknown && interface_only
14619 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
14620 || flag_alt_external_templates))
14621 {
14622 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
14623 interface, we will have interface_only set but not
14624 interface_known. In that case, we don't want to use the normal
14625 heuristics because someone will supply a #pragma implementation
14626 elsewhere, and deducing it here would produce a conflict. */
14627 comdat_linkage (decl1);
14628 DECL_EXTERNAL (decl1) = 0;
14629 DECL_INTERFACE_KNOWN (decl1) = 1;
14630 DECL_DEFER_OUTPUT (decl1) = 1;
14631 }
14632 else
14633 {
14634 /* This is a definition, not a reference.
14635 So clear DECL_EXTERNAL. */
14636 DECL_EXTERNAL (decl1) = 0;
14637
14638 if ((DECL_DECLARED_INLINE_P (decl1)
14639 || DECL_TEMPLATE_INSTANTIATION (decl1))
14640 && ! DECL_INTERFACE_KNOWN (decl1)
14641 /* Don't try to defer nested functions for now. */
14642 && ! decl_function_context (decl1))
14643 DECL_DEFER_OUTPUT (decl1) = 1;
14644 else
14645 DECL_INTERFACE_KNOWN (decl1) = 1;
14646 }
14647
14648 pushlevel (0);
14649 current_binding_level->parm_flag = 1;
14650
14651 ++function_depth;
14652
14653 if (DECL_DESTRUCTOR_P (decl1))
14654 {
14655 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14656 DECL_CONTEXT (dtor_label) = current_function_decl;
14657 }
14658
14659 start_fname_decls ();
14660
14661 store_parm_decls (current_function_parms);
14662
14663 return 1;
14664 }
14665
14666 /* Store the parameter declarations into the current function declaration.
14667 This is called after parsing the parameter declarations, before
14668 digesting the body of the function.
14669
14670 Also install to binding contour return value identifier, if any. */
14671
14672 static void
store_parm_decls(current_function_parms)14673 store_parm_decls (current_function_parms)
14674 tree current_function_parms;
14675 {
14676 register tree fndecl = current_function_decl;
14677 register tree parm;
14678
14679 /* This is a chain of any other decls that came in among the parm
14680 declarations. If a parm is declared with enum {foo, bar} x;
14681 then CONST_DECLs for foo and bar are put here. */
14682 tree nonparms = NULL_TREE;
14683
14684 if (current_function_parms)
14685 {
14686 /* This case is when the function was defined with an ANSI prototype.
14687 The parms already have decls, so we need not do anything here
14688 except record them as in effect
14689 and complain if any redundant old-style parm decls were written. */
14690
14691 tree specparms = current_function_parms;
14692 tree next;
14693
14694 /* Must clear this because it might contain TYPE_DECLs declared
14695 at class level. */
14696 storedecls (NULL_TREE);
14697
14698 /* If we're doing semantic analysis, then we'll call pushdecl
14699 for each of these. We must do them in reverse order so that
14700 they end in the correct forward order. */
14701 specparms = nreverse (specparms);
14702
14703 for (parm = specparms; parm; parm = next)
14704 {
14705 next = TREE_CHAIN (parm);
14706 if (TREE_CODE (parm) == PARM_DECL)
14707 {
14708 if (DECL_NAME (parm) == NULL_TREE
14709 || TREE_CODE (parm) != VOID_TYPE)
14710 pushdecl (parm);
14711 else
14712 error ("parameter `%D' declared void", parm);
14713 }
14714 else
14715 {
14716 /* If we find an enum constant or a type tag,
14717 put it aside for the moment. */
14718 TREE_CHAIN (parm) = NULL_TREE;
14719 nonparms = chainon (nonparms, parm);
14720 }
14721 }
14722
14723 /* Get the decls in their original chain order and record in the
14724 function. This is all and only the PARM_DECLs that were
14725 pushed into scope by the loop above. */
14726 DECL_ARGUMENTS (fndecl) = getdecls ();
14727 }
14728 else
14729 DECL_ARGUMENTS (fndecl) = NULL_TREE;
14730
14731 /* Now store the final chain of decls for the arguments
14732 as the decl-chain of the current lexical scope.
14733 Put the enumerators in as well, at the front so that
14734 DECL_ARGUMENTS is not modified. */
14735 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
14736
14737 /* Do the starting of the exception specifications, if we have any. */
14738 if (flag_exceptions && !processing_template_decl
14739 && flag_enforce_eh_specs
14740 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
14741 current_eh_spec_block = begin_eh_spec_block ();
14742 }
14743
14744
14745 /* We have finished doing semantic analysis on DECL, but have not yet
14746 generated RTL for its body. Save away our current state, so that
14747 when we want to generate RTL later we know what to do. */
14748
14749 static void
save_function_data(decl)14750 save_function_data (decl)
14751 tree decl;
14752 {
14753 struct language_function *f;
14754
14755 /* Save the language-specific per-function data so that we can
14756 get it back when we really expand this function. */
14757 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
14758 19990908);
14759
14760 /* Make a copy. */
14761 f = ((struct language_function *)
14762 ggc_alloc (sizeof (struct language_function)));
14763 memcpy (f, cp_function_chain, sizeof (struct language_function));
14764 DECL_SAVED_FUNCTION_DATA (decl) = f;
14765
14766 /* Clear out the bits we don't need. */
14767 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
14768 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
14769 f->x_named_label_uses = NULL;
14770 f->bindings = NULL;
14771 f->x_local_names = NULL;
14772
14773 /* When we get back here again, we will be expanding. */
14774 f->x_expanding_p = 1;
14775
14776 /* If we've already decided that we cannot inline this function, we
14777 must remember that fact when we actually go to expand the
14778 function. */
14779 if (current_function_cannot_inline)
14780 {
14781 f->cannot_inline = current_function_cannot_inline;
14782 DECL_INLINE (decl) = 0;
14783 }
14784 }
14785
14786 /* Add a note to mark the beginning of the main body of the constructor.
14787 This is used to set up the data structures for the cleanup regions for
14788 fully-constructed bases and members. */
14789
14790 static void
begin_constructor_body()14791 begin_constructor_body ()
14792 {
14793 }
14794
14795 /* Add a note to mark the end of the main body of the constructor. This is
14796 used to end the cleanup regions for fully-constructed bases and
14797 members. */
14798
14799 static void
finish_constructor_body()14800 finish_constructor_body ()
14801 {
14802 }
14803
14804 /* Do all the processing for the beginning of a destructor; set up the
14805 vtable pointers and cleanups for bases and members. */
14806
14807 static void
begin_destructor_body()14808 begin_destructor_body ()
14809 {
14810 tree if_stmt;
14811 tree compound_stmt;
14812
14813 /* If the dtor is empty, and we know there is not any possible
14814 way we could use any vtable entries, before they are possibly
14815 set by a base class dtor, we don't have to setup the vtables,
14816 as we know that any base class dtor will set up any vtables
14817 it needs. We avoid MI, because one base class dtor can do a
14818 virtual dispatch to an overridden function that would need to
14819 have a non-related vtable set up, we cannot avoid setting up
14820 vtables in that case. We could change this to see if there
14821 is just one vtable.
14822
14823 ??? In the destructor for a class, the vtables are set
14824 appropriately for that class. There will be no non-related
14825 vtables. jason 2001-12-11. */
14826 if_stmt = begin_if_stmt ();
14827
14828 /* If it is not safe to avoid setting up the vtables, then
14829 someone will change the condition to be boolean_true_node.
14830 (Actually, for now, we do not have code to set the condition
14831 appropriately, so we just assume that we always need to
14832 initialize the vtables.) */
14833 finish_if_stmt_cond (boolean_true_node, if_stmt);
14834
14835 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
14836
14837 /* Make all virtual function table pointers in non-virtual base
14838 classes point to CURRENT_CLASS_TYPE's virtual function
14839 tables. */
14840 initialize_vtbl_ptrs (current_class_ptr);
14841
14842 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
14843 finish_then_clause (if_stmt);
14844 finish_if_stmt ();
14845
14846 /* And insert cleanups for our bases and members so that they
14847 will be properly destroyed if we throw. */
14848 push_base_cleanups ();
14849 }
14850
14851 /* At the end of every destructor we generate code to delete the object if
14852 necessary. Do that now. */
14853
14854 static void
finish_destructor_body()14855 finish_destructor_body ()
14856 {
14857 tree exprstmt;
14858
14859 /* Any return from a destructor will end up here; that way all base
14860 and member cleanups will be run when the function returns. */
14861 add_stmt (build_stmt (LABEL_STMT, dtor_label));
14862
14863 /* In a virtual destructor, we must call delete. */
14864 if (DECL_VIRTUAL_P (current_function_decl))
14865 {
14866 tree if_stmt;
14867 tree virtual_size = cxx_sizeof (current_class_type);
14868
14869 /* [class.dtor]
14870
14871 At the point of definition of a virtual destructor (including
14872 an implicit definition), non-placement operator delete shall
14873 be looked up in the scope of the destructor's class and if
14874 found shall be accessible and unambiguous. */
14875 exprstmt = build_op_delete_call
14876 (DELETE_EXPR, current_class_ptr, virtual_size,
14877 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
14878
14879 if_stmt = begin_if_stmt ();
14880 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
14881 current_in_charge_parm,
14882 integer_one_node),
14883 if_stmt);
14884 finish_expr_stmt (exprstmt);
14885 finish_then_clause (if_stmt);
14886 finish_if_stmt ();
14887 }
14888 }
14889
14890 /* Do the necessary processing for the beginning of a function body, which
14891 in this case includes member-initializers, but not the catch clauses of
14892 a function-try-block. Currently, this means opening a binding level
14893 for the member-initializers (in a ctor) and member cleanups (in a dtor).
14894 In other functions, this isn't necessary, but it doesn't hurt. */
14895
14896 tree
begin_function_body()14897 begin_function_body ()
14898 {
14899 tree stmt;
14900
14901 if (processing_template_decl)
14902 /* Do nothing now. */;
14903 else
14904 /* Always keep the BLOCK node associated with the outermost pair of
14905 curly braces of a function. These are needed for correct
14906 operation of dwarfout.c. */
14907 keep_next_level (1);
14908
14909 stmt = begin_compound_stmt (0);
14910 COMPOUND_STMT_BODY_BLOCK (stmt) = 1;
14911
14912 if (processing_template_decl)
14913 /* Do nothing now. */;
14914 else if (DECL_CONSTRUCTOR_P (current_function_decl))
14915 begin_constructor_body ();
14916 else if (DECL_DESTRUCTOR_P (current_function_decl))
14917 begin_destructor_body ();
14918
14919 return stmt;
14920 }
14921
14922 /* Do the processing for the end of a function body. Currently, this means
14923 closing out the cleanups for fully-constructed bases and members, and in
14924 the case of the destructor, deleting the object if desired. Again, this
14925 is only meaningful for [cd]tors, since they are the only functions where
14926 there is a significant distinction between the main body and any
14927 function catch clauses. Handling, say, main() return semantics here
14928 would be wrong, as flowing off the end of a function catch clause for
14929 main() would also need to return 0. */
14930
14931 void
finish_function_body(compstmt)14932 finish_function_body (compstmt)
14933 tree compstmt;
14934 {
14935 /* Close the block. */
14936 finish_compound_stmt (0, compstmt);
14937
14938 if (processing_template_decl)
14939 /* Do nothing now. */;
14940 else if (DECL_CONSTRUCTOR_P (current_function_decl))
14941 finish_constructor_body ();
14942 else if (DECL_DESTRUCTOR_P (current_function_decl))
14943 finish_destructor_body ();
14944 }
14945
14946 /* Finish up a function declaration and compile that function
14947 all the way to assembler language output. The free the storage
14948 for the function definition.
14949
14950 FLAGS is a bitwise or of the following values:
14951 2 - INCLASS_INLINE
14952 We just finished processing the body of an in-class inline
14953 function definition. (This processing will have taken place
14954 after the class definition is complete.) */
14955
14956 tree
finish_function(flags)14957 finish_function (flags)
14958 int flags;
14959 {
14960 register tree fndecl = current_function_decl;
14961 tree fntype, ctype = NULL_TREE;
14962 int inclass_inline = (flags & 2) != 0;
14963 int nested;
14964
14965 /* When we get some parse errors, we can end up without a
14966 current_function_decl, so cope. */
14967 if (fndecl == NULL_TREE)
14968 return error_mark_node;
14969
14970 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
14971 && DECL_VIRTUAL_P (fndecl)
14972 && !processing_template_decl)
14973 {
14974 tree fnclass = DECL_CONTEXT (fndecl);
14975 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
14976 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
14977 }
14978
14979 nested = function_depth > 1;
14980 fntype = TREE_TYPE (fndecl);
14981
14982 /* TREE_READONLY (fndecl) = 1;
14983 This caused &foo to be of type ptr-to-const-function
14984 which then got a warning when stored in a ptr-to-function variable. */
14985
14986 my_friendly_assert (building_stmt_tree (), 20000911);
14987
14988 finish_fname_decls ();
14989
14990 /* For a cloned function, we've already got all the code we need;
14991 there's no need to add any extra bits. */
14992 if (!DECL_CLONED_FUNCTION_P (fndecl))
14993 {
14994 if (DECL_MAIN_P (current_function_decl))
14995 {
14996 /* Make it so that `main' always returns 0 by default. */
14997 #if VMS_TARGET
14998 finish_return_stmt (integer_one_node);
14999 #else
15000 finish_return_stmt (integer_zero_node);
15001 #endif
15002 }
15003
15004 /* Finish dealing with exception specifiers. */
15005 if (flag_exceptions && !processing_template_decl
15006 && flag_enforce_eh_specs
15007 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
15008 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15009 (TREE_TYPE (current_function_decl)),
15010 current_eh_spec_block);
15011 }
15012
15013 /* If we're saving up tree structure, tie off the function now. */
15014 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
15015
15016 /* If this function can't throw any exceptions, remember that. */
15017 if (!processing_template_decl
15018 && !cp_function_chain->can_throw
15019 && !flag_non_call_exceptions)
15020 TREE_NOTHROW (fndecl) = 1;
15021
15022 /* This must come after expand_function_end because cleanups might
15023 have declarations (from inline functions) that need to go into
15024 this function's blocks. */
15025
15026 /* If the current binding level isn't the outermost binding level
15027 for this function, either there is a bug, or we have experienced
15028 syntax errors and the statement tree is malformed. */
15029 if (current_binding_level->parm_flag != 1)
15030 {
15031 /* Make sure we have already experienced errors. */
15032 if (errorcount == 0)
15033 abort ();
15034
15035 /* Throw away the broken statement tree and extra binding
15036 levels. */
15037 DECL_SAVED_TREE (fndecl) = build_stmt (COMPOUND_STMT, NULL_TREE);
15038
15039 while (current_binding_level->parm_flag != 1)
15040 {
15041 if (current_binding_level->parm_flag == 2)
15042 pop_nested_class ();
15043 else
15044 poplevel (0, 0, 0);
15045 }
15046 }
15047 poplevel (1, 0, 1);
15048
15049 /* Set up the named return value optimization, if we can. Here, we
15050 eliminate the copy from the nrv into the RESULT_DECL and any cleanup
15051 for the nrv. genrtl_start_function and declare_return_variable
15052 handle making the nrv and RESULT_DECL share space. */
15053 if (current_function_return_value)
15054 {
15055 tree r = current_function_return_value;
15056 tree outer;
15057
15058 if (r != error_mark_node
15059 /* This is only worth doing for fns that return in memory--and
15060 simpler, since we don't have to worry about promoted modes. */
15061 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)))
15062 /* Only allow this for variables declared in the outer scope of
15063 the function so we know that their lifetime always ends with a
15064 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15065 we were to do this optimization in tree-ssa. */
15066 && (outer = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl)),
15067 chain_member (r, BLOCK_VARS (outer))))
15068 {
15069
15070 DECL_ALIGN (r) = DECL_ALIGN (DECL_RESULT (fndecl));
15071 walk_tree_without_duplicates (&DECL_SAVED_TREE (fndecl),
15072 nullify_returns_r, r);
15073 }
15074 else
15075 /* Clear it so genrtl_start_function and declare_return_variable
15076 know we're not optimizing. */
15077 current_function_return_value = NULL_TREE;
15078 }
15079
15080 /* Remember that we were in class scope. */
15081 if (current_class_name)
15082 ctype = current_class_type;
15083
15084 /* Must mark the RESULT_DECL as being in this function. */
15085 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15086
15087 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15088 to the FUNCTION_DECL node itself. */
15089 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15090
15091 /* Save away current state, if appropriate. */
15092 if (!processing_template_decl)
15093 save_function_data (fndecl);
15094
15095 /* If this function calls `setjmp' it cannot be inlined. When
15096 `longjmp' is called it is not guaranteed to restore the value of
15097 local variables that have been modified since the call to
15098 `setjmp'. So, if were to inline this function into some caller
15099 `c', then when we `longjmp', we might not restore all variables
15100 in `c'. (It might seem, at first blush, that there's no way for
15101 this function to modify local variables in `c', but their
15102 addresses may have been stored somewhere accessible to this
15103 function.) */
15104 if (!processing_template_decl && calls_setjmp_p (fndecl))
15105 DECL_UNINLINABLE (fndecl) = 1;
15106
15107 /* Complain if there's just no return statement. */
15108 if (warn_return_type
15109 && !processing_template_decl
15110 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
15111 && !current_function_returns_value && !current_function_returns_null
15112 /* Don't complain if we abort or throw. */
15113 && !current_function_returns_abnormally
15114 && !DECL_NAME (DECL_RESULT (fndecl))
15115 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
15116 inline function, as we might never be compiled separately. */
15117 && DECL_INLINE (fndecl))
15118 warning ("no return statement in function returning non-void");
15119
15120 /* Clear out memory we no longer need. */
15121 free_after_parsing (cfun);
15122 /* Since we never call rest_of_compilation, we never clear
15123 CFUN. Do so explicitly. */
15124 free_after_compilation (cfun);
15125 cfun = NULL;
15126
15127 /* If this is an in-class inline definition, we may have to pop the
15128 bindings for the template parameters that we added in
15129 maybe_begin_member_template_processing when start_function was
15130 called. */
15131 if (inclass_inline)
15132 maybe_end_member_template_processing ();
15133
15134 /* Leave the scope of the class. */
15135 if (ctype)
15136 pop_nested_class ();
15137
15138 --function_depth;
15139
15140 /* Clean up. */
15141 if (! nested)
15142 /* Let the error reporting routines know that we're outside a
15143 function. For a nested function, this value is used in
15144 cxx_pop_function_context and then reset via pop_function_context. */
15145 current_function_decl = NULL_TREE;
15146
15147 return fndecl;
15148 }
15149
15150 /* Create the FUNCTION_DECL for a function definition.
15151 DECLSPECS and DECLARATOR are the parts of the declaration;
15152 they describe the return type and the name of the function,
15153 but twisted together in a fashion that parallels the syntax of C.
15154
15155 This function creates a binding context for the function body
15156 as well as setting up the FUNCTION_DECL in current_function_decl.
15157
15158 Returns a FUNCTION_DECL on success.
15159
15160 If the DECLARATOR is not suitable for a function (it defines a datum
15161 instead), we return 0, which tells yyparse to report a parse error.
15162
15163 May return void_type_node indicating that this method is actually
15164 a friend. See grokfield for more details.
15165
15166 Came here with a `.pushlevel' .
15167
15168 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15169 CHANGES TO CODE IN `grokfield'. */
15170
15171 tree
start_method(declspecs,declarator,attrlist)15172 start_method (declspecs, declarator, attrlist)
15173 tree declarator, declspecs, attrlist;
15174 {
15175 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15176 &attrlist);
15177
15178 /* Something too ugly to handle. */
15179 if (fndecl == NULL_TREE)
15180 return NULL_TREE;
15181
15182 if (attrlist)
15183 cplus_decl_attributes (&fndecl, attrlist, 0);
15184
15185 /* Pass friends other than inline friend functions back. */
15186 if (fndecl == void_type_node)
15187 return fndecl;
15188
15189 if (TREE_CODE (fndecl) != FUNCTION_DECL)
15190 /* Not a function, tell parser to report parse error. */
15191 return NULL_TREE;
15192
15193 if (DECL_IN_AGGR_P (fndecl))
15194 {
15195 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
15196 {
15197 if (DECL_CONTEXT (fndecl)
15198 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
15199 error ("`%D' is already defined in class `%T'", fndecl,
15200 DECL_CONTEXT (fndecl));
15201 }
15202 return void_type_node;
15203 }
15204
15205 check_template_shadow (fndecl);
15206
15207 DECL_DECLARED_INLINE_P (fndecl) = 1;
15208
15209 DID_INLINE_FUNC (fndecl) = 0;
15210 if (flag_default_inline)
15211 DECL_INLINE (fndecl) = 1;
15212
15213 /* We process method specializations in finish_struct_1. */
15214 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
15215 fndecl = push_template_decl (fndecl);
15216
15217 if (! DECL_FRIEND_P (fndecl))
15218 {
15219 if (TREE_CHAIN (fndecl))
15220 {
15221 fndecl = copy_node (fndecl);
15222 TREE_CHAIN (fndecl) = NULL_TREE;
15223 }
15224 grok_special_member_properties (fndecl);
15225 }
15226
15227 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
15228
15229 /* Make a place for the parms */
15230 pushlevel (0);
15231 current_binding_level->parm_flag = 1;
15232
15233 DECL_IN_AGGR_P (fndecl) = 1;
15234 return fndecl;
15235 }
15236
15237 /* Go through the motions of finishing a function definition.
15238 We don't compile this method until after the whole class has
15239 been processed.
15240
15241 FINISH_METHOD must return something that looks as though it
15242 came from GROKFIELD (since we are defining a method, after all).
15243
15244 This is called after parsing the body of the function definition.
15245 STMTS is the chain of statements that makes up the function body.
15246
15247 DECL is the ..._DECL that `start_method' provided. */
15248
15249 tree
finish_method(decl)15250 finish_method (decl)
15251 tree decl;
15252 {
15253 register tree fndecl = decl;
15254 tree old_initial;
15255
15256 register tree link;
15257
15258 if (decl == void_type_node)
15259 return decl;
15260
15261 old_initial = DECL_INITIAL (fndecl);
15262
15263 /* Undo the level for the parms (from start_method).
15264 This is like poplevel, but it causes nothing to be
15265 saved. Saving information here confuses symbol-table
15266 output routines. Besides, this information will
15267 be correctly output when this method is actually
15268 compiled. */
15269
15270 /* Clear out the meanings of the local variables of this level;
15271 also record in each decl which block it belongs to. */
15272
15273 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
15274 {
15275 if (DECL_NAME (link) != NULL_TREE)
15276 pop_binding (DECL_NAME (link), link);
15277 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
15278 DECL_CONTEXT (link) = NULL_TREE;
15279 }
15280
15281 poplevel (0, 0, 0);
15282
15283 DECL_INITIAL (fndecl) = old_initial;
15284
15285 /* We used to check if the context of FNDECL was different from
15286 current_class_type as another way to get inside here. This didn't work
15287 for String.cc in libg++. */
15288 if (DECL_FRIEND_P (fndecl))
15289 {
15290 CLASSTYPE_INLINE_FRIENDS (current_class_type)
15291 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
15292 decl = void_type_node;
15293 }
15294
15295 return decl;
15296 }
15297
15298
15299 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15300 we can lay it out later, when and if its type becomes complete. */
15301
15302 void
maybe_register_incomplete_var(var)15303 maybe_register_incomplete_var (var)
15304 tree var;
15305 {
15306 my_friendly_assert (TREE_CODE (var) == VAR_DECL, 20020406);
15307
15308 /* Keep track of variables with incomplete types. */
15309 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
15310 && DECL_EXTERNAL (var))
15311 {
15312 tree inner_type = TREE_TYPE (var);
15313
15314 while (TREE_CODE (inner_type) == ARRAY_TYPE)
15315 inner_type = TREE_TYPE (inner_type);
15316 inner_type = TYPE_MAIN_VARIANT (inner_type);
15317
15318 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
15319 /* RTTI TD entries are created while defining the type_info. */
15320 || (TYPE_LANG_SPECIFIC (inner_type)
15321 && TYPE_BEING_DEFINED (inner_type)))
15322 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
15323 }
15324 }
15325
15326 /* Called when a class type (given by TYPE) is defined. If there are
15327 any existing VAR_DECLs whose type hsa been completed by this
15328 declaration, update them now. */
15329
15330 void
complete_vars(type)15331 complete_vars (type)
15332 tree type;
15333 {
15334 tree *list = &incomplete_vars;
15335
15336 my_friendly_assert (CLASS_TYPE_P (type), 20020406);
15337 while (*list)
15338 {
15339 if (same_type_p (type, TREE_PURPOSE (*list)))
15340 {
15341 tree var = TREE_VALUE (*list);
15342 /* Complete the type of the variable. The VAR_DECL itself
15343 will be laid out in expand_expr. */
15344 complete_type (TREE_TYPE (var));
15345 /* Remove this entry from the list. */
15346 *list = TREE_CHAIN (*list);
15347 }
15348 else
15349 list = &TREE_CHAIN (*list);
15350 }
15351 }
15352
15353 /* If DECL is of a type which needs a cleanup, build that cleanup
15354 here. */
15355
15356 tree
cxx_maybe_build_cleanup(decl)15357 cxx_maybe_build_cleanup (decl)
15358 tree decl;
15359 {
15360 tree type = TREE_TYPE (decl);
15361
15362 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
15363 {
15364 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
15365 tree rval;
15366
15367 if (TREE_CODE (type) == ARRAY_TYPE)
15368 rval = decl;
15369 else
15370 {
15371 cxx_mark_addressable (decl);
15372 rval = build_unary_op (ADDR_EXPR, decl, 0);
15373 }
15374
15375 /* Optimize for space over speed here. */
15376 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
15377 || flag_expensive_optimizations)
15378 flags |= LOOKUP_NONVIRTUAL;
15379
15380 rval = build_delete (TREE_TYPE (rval), rval,
15381 sfk_complete_destructor, flags, 0);
15382
15383 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
15384 && ! TYPE_HAS_DESTRUCTOR (type))
15385 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
15386 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
15387
15388 return rval;
15389 }
15390 return NULL_TREE;
15391 }
15392
15393 /* When a stmt has been parsed, this function is called. */
15394
15395 void
finish_stmt()15396 finish_stmt ()
15397 {
15398 /* Always assume this statement was not an expression statement. If
15399 it actually was an expression statement, its our callers
15400 responsibility to fix this up. */
15401 last_expr_type = NULL_TREE;
15402 }
15403
15404 /* DECL was originally constructed as a non-static member function,
15405 but turned out to be static. Update it accordingly. */
15406
15407 void
revert_static_member_fn(decl)15408 revert_static_member_fn (decl)
15409 tree decl;
15410 {
15411 tree tmp;
15412 tree function = TREE_TYPE (decl);
15413 tree args = TYPE_ARG_TYPES (function);
15414
15415 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
15416 != TYPE_UNQUALIFIED)
15417 error ("static member function `%#D' declared with type qualifiers",
15418 decl);
15419
15420 args = TREE_CHAIN (args);
15421 tmp = build_function_type (TREE_TYPE (function), args);
15422 tmp = build_qualified_type (tmp, cp_type_quals (function));
15423 tmp = build_exception_variant (tmp,
15424 TYPE_RAISES_EXCEPTIONS (function));
15425 TREE_TYPE (decl) = tmp;
15426 if (DECL_ARGUMENTS (decl))
15427 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
15428 DECL_STATIC_FUNCTION_P (decl) = 1;
15429 }
15430
15431 /* Initialize the variables used during compilation of a C++
15432 function. */
15433
15434 void
cxx_push_function_context(f)15435 cxx_push_function_context (f)
15436 struct function *f;
15437 {
15438 struct language_function *p
15439 = ((struct language_function *)
15440 ggc_alloc_cleared (sizeof (struct language_function)));
15441 f->language = p;
15442
15443 /* It takes an explicit call to expand_body to generate RTL for a
15444 function. */
15445 expanding_p = 0;
15446
15447 /* Whenever we start a new function, we destroy temporaries in the
15448 usual way. */
15449 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15450 }
15451
15452 /* Free the language-specific parts of F, now that we've finished
15453 compiling the function. */
15454
15455 void
cxx_pop_function_context(f)15456 cxx_pop_function_context (f)
15457 struct function *f;
15458 {
15459 f->language = 0;
15460 }
15461
15462 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
15463 one of the language-independent trees. */
15464
15465 enum cp_tree_node_structure_enum
cp_tree_node_structure(t)15466 cp_tree_node_structure (t)
15467 union lang_tree_node *t;
15468 {
15469 switch (TREE_CODE (&t->generic))
15470 {
15471 case DEFAULT_ARG: return TS_CP_IDENTIFIER;
15472 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
15473 case OVERLOAD: return TS_CP_OVERLOAD;
15474 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
15475 case PTRMEM_CST: return TS_CP_PTRMEM;
15476 case WRAPPER: return TS_CP_WRAPPER;
15477 case SRCLOC: return TS_CP_SRCLOC;
15478 default: return TS_CP_GENERIC;
15479 }
15480 }
15481
15482 /* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since
15483 the definition of IDENTIFIER_GLOBAL_VALUE is different for C and C++. */
15484
15485 tree
identifier_global_value(t)15486 identifier_global_value (t)
15487 tree t;
15488 {
15489 return IDENTIFIER_GLOBAL_VALUE (t);
15490 }
15491
15492 /* Build the void_list_node (void_type_node having been created). */
15493 tree
build_void_list_node()15494 build_void_list_node ()
15495 {
15496 tree t = build_tree_list (NULL_TREE, void_type_node);
15497 TREE_PARMLIST (t) = 1;
15498 return t;
15499 }
15500
15501 static int
cp_missing_noreturn_ok_p(decl)15502 cp_missing_noreturn_ok_p (decl)
15503 tree decl;
15504 {
15505 /* A missing noreturn is ok for the `main' function. */
15506 return DECL_MAIN_P (decl);
15507 }
15508
15509 #include "gt-cp-decl.h"
15510 #include "gtype-cp.h"
15511