Fix copyrights
[gcc.git] / gcc / cp / decl2.c
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000 Free Software Foundation, Inc.
4 Hacked 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 "flags.h"
36 #include "cp-tree.h"
37 #include "decl.h"
38 #include "lex.h"
39 #include "output.h"
40 #include "except.h"
41 #include "expr.h"
42 #include "defaults.h"
43 #include "toplev.h"
44 #include "dwarf2out.h"
45 #include "dwarfout.h"
46 #include "ggc.h"
47
48 #if USE_CPPLIB
49 #include "cpplib.h"
50 extern cpp_reader parse_in;
51 #endif
52
53 /* This structure contains information about the initializations
54 and/or destructions required for a particular priority level. */
55 typedef struct priority_info_s {
56 /* Non-zero if there have been any initializations at this priority
57 throughout the translation unit. */
58 int initializations_p;
59 /* Non-zero if there have been any destructions at this priority
60 throughout the translation unit. */
61 int destructions_p;
62 } *priority_info;
63
64 static tree get_sentry PARAMS ((tree));
65 static void mark_vtable_entries PARAMS ((tree));
66 static void grok_function_init PARAMS ((tree, tree));
67 static int finish_vtable_vardecl PARAMS ((tree *, void *));
68 static int prune_vtable_vardecl PARAMS ((tree *, void *));
69 static int is_namespace_ancestor PARAMS ((tree, tree));
70 static void add_using_namespace PARAMS ((tree, tree, int));
71 static tree ambiguous_decl PARAMS ((tree, tree, tree,int));
72 static tree build_anon_union_vars PARAMS ((tree, tree*, int, int));
73 static int acceptable_java_type PARAMS ((tree));
74 static void output_vtable_inherit PARAMS ((tree));
75 static tree start_objects PARAMS ((int, int));
76 static void finish_objects PARAMS ((int, int, tree));
77 static tree merge_functions PARAMS ((tree, tree));
78 static tree decl_namespace PARAMS ((tree));
79 static tree validate_nonmember_using_decl PARAMS ((tree, tree *, tree *));
80 static void do_nonmember_using_decl PARAMS ((tree, tree, tree, tree,
81 tree *, tree *));
82 static tree start_static_storage_duration_function PARAMS ((void));
83 static void finish_static_storage_duration_function PARAMS ((tree));
84 static priority_info get_priority_info PARAMS ((int));
85 static void do_static_initialization PARAMS ((tree, tree));
86 static void do_static_destruction PARAMS ((tree));
87 static tree start_static_initialization_or_destruction PARAMS ((tree, int));
88 static void finish_static_initialization_or_destruction PARAMS ((tree));
89 static void generate_ctor_or_dtor_function PARAMS ((int, int));
90 static int generate_ctor_and_dtor_functions_for_priority
91 PARAMS ((splay_tree_node, void *));
92 static tree prune_vars_needing_no_initialization PARAMS ((tree));
93 static void write_out_vars PARAMS ((tree));
94
95 extern int current_class_depth;
96
97 /* A list of virtual function tables we must make sure to write out. */
98 tree pending_vtables;
99
100 /* A list of static class variables. This is needed, because a
101 static class variable can be declared inside the class without
102 an initializer, and then initialized, staticly, outside the class. */
103 static varray_type pending_statics;
104 #define pending_statics_used \
105 (pending_statics ? pending_statics->elements_used : 0)
106
107 /* A list of functions which were declared inline, but which we
108 may need to emit outline anyway. */
109 static varray_type saved_inlines;
110 #define saved_inlines_used \
111 (saved_inlines ? saved_inlines->elements_used : 0)
112
113 /* Same, but not reset. Local temp variables and global temp variables
114 can have the same name. */
115 static int global_temp_name_counter;
116
117 /* Flag used when debugging spew.c */
118
119 extern int spew_debug;
120
121 /* Nonzero if we're done parsing and into end-of-file activities. */
122
123 int at_eof;
124
125 /* Functions called along with real static constructors and destructors. */
126
127 tree static_ctors, static_dtors;
128
129 /* The :: namespace. */
130
131 tree global_namespace;
132
133 /* The stack for namespaces of current declarations. */
134
135 static tree decl_namespace_list;
136
137 \f
138 /* C (and C++) language-specific option variables. */
139
140 /* Nonzero means allow type mismatches in conditional expressions;
141 just make their values `void'. */
142
143 int flag_cond_mismatch;
144
145 /* Nonzero means give `double' the same size as `float'. */
146
147 int flag_short_double;
148
149 /* Nonzero means don't recognize the keyword `asm'. */
150
151 int flag_no_asm;
152
153 /* Nonzero means don't recognize any extension keywords. */
154
155 int flag_no_gnu_keywords;
156
157 /* Nonzero means don't recognize the non-ANSI builtin functions. */
158
159 int flag_no_builtin;
160
161 /* Nonzero means don't recognize the non-ANSI builtin functions.
162 -ansi sets this. */
163
164 int flag_no_nonansi_builtin;
165
166 /* Nonzero means do some things the same way PCC does. Only provided so
167 the compiler will link. */
168
169 int flag_traditional;
170
171 /* Nonzero means to treat bitfields as unsigned unless they say `signed'. */
172
173 int flag_signed_bitfields = 1;
174
175 /* Nonzero means enable obscure standard features and disable GNU
176 extensions that might cause standard-compliant code to be
177 miscompiled. */
178
179 int flag_ansi;
180
181 /* Nonzero means do emit exported implementations of functions even if
182 they can be inlined. */
183
184 int flag_implement_inlines = 1;
185
186 /* Nonzero means do emit exported implementations of templates, instead of
187 multiple static copies in each file that needs a definition. */
188
189 int flag_external_templates;
190
191 /* Nonzero means that the decision to emit or not emit the implementation of a
192 template depends on where the template is instantiated, rather than where
193 it is defined. */
194
195 int flag_alt_external_templates;
196
197 /* Nonzero means that implicit instantiations will be emitted if needed. */
198
199 int flag_implicit_templates = 1;
200
201 /* Nonzero means that implicit instantiations of inline templates will be
202 emitted if needed, even if instantiations of non-inline templates
203 aren't. */
204
205 int flag_implicit_inline_templates = 1;
206
207 /* Nonzero means warn about implicit declarations. */
208
209 int warn_implicit = 1;
210
211 /* Nonzero means warn about usage of long long when `-pedantic'. */
212
213 int warn_long_long = 1;
214
215 /* Nonzero means warn when all ctors or dtors are private, and the class
216 has no friends. */
217
218 int warn_ctor_dtor_privacy = 1;
219
220 /* True if we want to implement vtables using "thunks".
221 The default is off. */
222
223 #ifndef DEFAULT_VTABLE_THUNKS
224 #define DEFAULT_VTABLE_THUNKS 0
225 #endif
226 int flag_vtable_thunks = DEFAULT_VTABLE_THUNKS;
227
228 /* Nonzero means generate separate instantiation control files and juggle
229 them at link time. */
230
231 int flag_use_repository;
232
233 /* Nonzero if we want to issue diagnostics that the standard says are not
234 required. */
235
236 int flag_optional_diags = 1;
237
238 /* Nonzero means give string constants the type `const char *', as mandated
239 by the standard. */
240
241 int flag_const_strings = 1;
242
243 /* If non-NULL, dump the tree structure for the entire translation
244 unit to this file. */
245
246 char *flag_dump_translation_unit = 0;
247
248 /* Nonzero means warn about deprecated conversion from string constant to
249 `char *'. */
250
251 int warn_write_strings;
252
253 /* Nonzero means warn about pointer casts that can drop a type qualifier
254 from the pointer target type. */
255
256 int warn_cast_qual;
257
258 /* Nonzero means warn about sizeof(function) or addition/subtraction
259 of function pointers. */
260
261 int warn_pointer_arith = 1;
262
263 /* Nonzero means warn for any function def without prototype decl. */
264
265 int warn_missing_prototypes;
266
267 /* Nonzero means warn about multiple (redundant) decls for the same single
268 variable or function. */
269
270 int warn_redundant_decls;
271
272 /* Warn if initializer is not completely bracketed. */
273
274 int warn_missing_braces;
275
276 /* Warn about comparison of signed and unsigned values. */
277
278 int warn_sign_compare;
279
280 /* Warn about testing equality of floating point numbers. */
281
282 int warn_float_equal = 0;
283
284 /* Warn about *printf or *scanf format/argument anomalies. */
285
286 int warn_format;
287
288 /* Warn about a subscript that has type char. */
289
290 int warn_char_subscripts;
291
292 /* Warn if a type conversion is done that might have confusing results. */
293
294 int warn_conversion;
295
296 /* Warn if adding () is suggested. */
297
298 int warn_parentheses;
299
300 /* Non-zero means warn in function declared in derived class has the
301 same name as a virtual in the base class, but fails to match the
302 type signature of any virtual function in the base class. */
303 int warn_overloaded_virtual;
304
305 /* Non-zero means warn when declaring a class that has a non virtual
306 destructor, when it really ought to have a virtual one. */
307 int warn_nonvdtor;
308
309 /* Non-zero means warn when a function is declared extern and later inline. */
310 int warn_extern_inline;
311
312 /* Non-zero means warn when the compiler will reorder code. */
313 int warn_reorder;
314
315 /* Non-zero means warn when synthesis behavior differs from Cfront's. */
316 int warn_synth;
317
318 /* Non-zero means warn when we convert a pointer to member function
319 into a pointer to (void or function). */
320 int warn_pmf2ptr = 1;
321
322 /* Nonzero means warn about violation of some Effective C++ style rules. */
323
324 int warn_ecpp;
325
326 /* Nonzero means warn where overload resolution chooses a promotion from
327 unsigned to signed over a conversion to an unsigned of the same size. */
328
329 int warn_sign_promo;
330
331 /* Nonzero means warn when an old-style cast is used. */
332
333 int warn_old_style_cast;
334
335 /* Warn about #pragma directives that are not recognised. */
336
337 int warn_unknown_pragmas; /* Tri state variable. */
338
339 /* Nonzero means warn about use of multicharacter literals. */
340
341 int warn_multichar = 1;
342
343 /* Nonzero means warn when non-templatized friend functions are
344 declared within a template */
345
346 int warn_nontemplate_friend = 1;
347
348 /* Nonzero means complain about deprecated features. */
349
350 int warn_deprecated = 1;
351
352 /* Nonzero means `$' can be in an identifier. */
353
354 #ifndef DOLLARS_IN_IDENTIFIERS
355 #define DOLLARS_IN_IDENTIFIERS 1
356 #endif
357 int dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
358
359 /* Nonzero for -fno-strict-prototype switch: do not consider empty
360 argument prototype to mean function takes no arguments. */
361
362 int flag_strict_prototype = 2;
363 int strict_prototype = 1;
364 int strict_prototypes_lang_c, strict_prototypes_lang_cplusplus = 1;
365
366 /* Nonzero means that labels can be used as first-class objects */
367
368 int flag_labels_ok;
369
370 /* Nonzero means allow Microsoft extensions without a pedwarn. */
371
372 int flag_ms_extensions;
373
374 /* Non-zero means to collect statistics which might be expensive
375 and to print them when we are done. */
376 int flag_detailed_statistics;
377
378 /* C++ specific flags. */
379 /* Zero means that `this' is a *const. This gives nice behavior in the
380 2.0 world. 1 gives 1.2-compatible behavior. 2 gives Spring behavior.
381 -2 means we're constructing an object and it has fixed type. */
382
383 int flag_this_is_variable;
384
385 /* Nonzero means we should attempt to elide constructors when possible. */
386
387 int flag_elide_constructors = 1;
388
389 /* Nonzero means that member functions defined in class scope are
390 inline by default. */
391
392 int flag_default_inline = 1;
393
394 /* Controls whether compiler generates 'type descriptor' that give
395 run-time type information. */
396 int flag_rtti = 1;
397
398 /* Nonzero if we wish to output cross-referencing information
399 for the GNU class browser. */
400 extern int flag_gnu_xref;
401
402 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
403 objects. */
404
405 int flag_huge_objects;
406
407 /* Nonzero if we want to conserve space in the .o files. We do this
408 by putting uninitialized data and runtime initialized data into
409 .common instead of .data at the expense of not flagging multiple
410 definitions. */
411
412 int flag_conserve_space;
413
414 /* Nonzero if we want to obey access control semantics. */
415
416 int flag_access_control = 1;
417
418 /* Nonzero if we want to understand the operator names, i.e. 'bitand'. */
419
420 int flag_operator_names;
421
422 /* Nonzero if we want to check the return value of new and avoid calling
423 constructors if it is a null pointer. */
424
425 int flag_check_new;
426
427 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
428 initialization variables.
429 0: Old rules, set by -fno-for-scope.
430 2: New ISO rules, set by -ffor-scope.
431 1: Try to implement new ISO rules, but with backup compatibility
432 (and warnings). This is the default, for now. */
433
434 int flag_new_for_scope = 1;
435
436 /* Nonzero if we want to emit defined symbols with common-like linkage as
437 weak symbols where possible, in order to conform to C++ semantics.
438 Otherwise, emit them as local symbols. */
439
440 int flag_weak = 1;
441
442 /* Nonzero to enable experimental ABI changes. */
443
444 int flag_new_abi;
445
446 /* Nonzero to use __cxa_atexit, rather than atexit, to register
447 destructors for local statics and global objects. */
448
449 int flag_use_cxa_atexit;
450
451 /* Nonzero to not ignore namespace std. */
452
453 int flag_honor_std;
454
455 /* Nonzero if we should expand functions calls inline at the tree
456 level, rather than at the RTL level. */
457
458 int flag_inline_trees = 0;
459
460 /* Maximum template instantiation depth. Must be at least 17 for ISO
461 compliance. */
462
463 int max_tinst_depth = 17;
464
465 /* The name-mangling scheme to use. Must be 1 or greater to support
466 template functions with identical types, but different template
467 arguments. */
468 int name_mangling_version = 2;
469
470 /* Nonzero means that guiding declarations are allowed. */
471 int flag_guiding_decls;
472
473 /* Nonzero if wchar_t should be `unsigned short' instead of whatever it
474 would normally be, for use with WINE. */
475 int flag_short_wchar;
476
477 /* Nonzero if squashed mangling is to be performed.
478 This uses the B and K codes to reference previously seen class types
479 and class qualifiers. */
480 int flag_do_squangling;
481
482 /* Nonzero means output .vtable_{entry,inherit} for use in doing vtable gc. */
483
484 int flag_vtable_gc;
485
486 /* Nonzero means make the default pedwarns warnings instead of errors.
487 The value of this flag is ignored if -pedantic is specified. */
488
489 int flag_permissive;
490
491 /* If this variable is defined to a non-NULL value, it will be called
492 after the file has been completely parsed. */
493
494 void (*back_end_hook) PARAMS ((tree));
495
496 /* Table of language-dependent -f options.
497 STRING is the option name. VARIABLE is the address of the variable.
498 ON_VALUE is the value to store in VARIABLE
499 if `-fSTRING' is seen as an option.
500 (If `-fno-STRING' is seen as an option, the opposite value is stored.) */
501
502 static struct { const char *string; int *variable; int on_value;}
503 lang_f_options[] =
504 {
505 /* C/C++ options. */
506 {"signed-char", &flag_signed_char, 1},
507 {"unsigned-char", &flag_signed_char, 0},
508 {"signed-bitfields", &flag_signed_bitfields, 1},
509 {"unsigned-bitfields", &flag_signed_bitfields, 0},
510 {"short-enums", &flag_short_enums, 1},
511 {"short-double", &flag_short_double, 1},
512 {"short-wchar", &flag_short_wchar, 1},
513 {"cond-mismatch", &flag_cond_mismatch, 1},
514 {"asm", &flag_no_asm, 0},
515 {"builtin", &flag_no_builtin, 0},
516
517 /* C++-only options. */
518 {"access-control", &flag_access_control, 1},
519 {"check-new", &flag_check_new, 1},
520 {"conserve-space", &flag_conserve_space, 1},
521 {"const-strings", &flag_const_strings, 1},
522 {"default-inline", &flag_default_inline, 1},
523 {"dollars-in-identifiers", &dollars_in_ident, 1},
524 {"elide-constructors", &flag_elide_constructors, 1},
525 {"external-templates", &flag_external_templates, 1},
526 {"for-scope", &flag_new_for_scope, 2},
527 {"gnu-keywords", &flag_no_gnu_keywords, 0},
528 {"handle-exceptions", &flag_exceptions, 1},
529 {"honor-std", &flag_honor_std, 1},
530 {"huge-objects", &flag_huge_objects, 1},
531 {"implement-inlines", &flag_implement_inlines, 1},
532 {"implicit-inline-templates", &flag_implicit_inline_templates, 1},
533 {"implicit-templates", &flag_implicit_templates, 1},
534 {"labels-ok", &flag_labels_ok, 1},
535 {"ms-extensions", &flag_ms_extensions, 1},
536 {"nonansi-builtins", &flag_no_nonansi_builtin, 0},
537 {"operator-names", &flag_operator_names, 1},
538 {"optional-diags", &flag_optional_diags, 1},
539 {"permissive", &flag_permissive, 1},
540 {"repo", &flag_use_repository, 1},
541 {"rtti", &flag_rtti, 1},
542 {"squangle", &flag_do_squangling, 1},
543 {"stats", &flag_detailed_statistics, 1},
544 {"strict-prototype", &flag_strict_prototype, 1},
545 {"use-cxa-atexit", &flag_use_cxa_atexit, 1},
546 {"vtable-gc", &flag_vtable_gc, 1},
547 {"vtable-thunks", &flag_vtable_thunks, 1},
548 {"weak", &flag_weak, 1},
549 {"xref", &flag_gnu_xref, 1}
550 };
551
552 /* Decode the string P as a language-specific option.
553 Return the number of strings consumed for a valid option.
554 Otherwise return 0. Should not complain if it does not
555 recognise the option. */
556
557 int
558 lang_decode_option (argc, argv)
559 int argc
560 #if !USE_CPPLIB
561 ATTRIBUTE_UNUSED
562 #endif
563 ;
564 char **argv;
565
566 {
567 int strings_processed;
568 char *p = argv[0];
569 #if USE_CPPLIB
570 strings_processed = cpp_handle_option (&parse_in, argc, argv);
571 #else
572 strings_processed = 0;
573 #endif /* ! USE_CPPLIB */
574
575 if (!strcmp (p, "-ftraditional") || !strcmp (p, "-traditional"))
576 /* ignore */;
577 else if (p[0] == '-' && p[1] == 'f')
578 {
579 /* Some kind of -f option.
580 P's value is the option sans `-f'.
581 Search for it in the table of options. */
582 size_t j;
583
584 p += 2;
585 /* Try special -f options. */
586
587 if (!strcmp (p, "handle-exceptions")
588 || !strcmp (p, "no-handle-exceptions"))
589 warning ("-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)");
590 else if (!strcmp (p, "all-virtual")
591 || !strcmp (p, "enum-int-equiv")
592 || !strcmp (p, "no-nonnull-objects")
593 || !strcmp (p, "this-is-variable"))
594 warning ("-f%s is no longer supported", p);
595 else if (! strcmp (p, "alt-external-templates"))
596 {
597 flag_external_templates = 1;
598 flag_alt_external_templates = 1;
599 cp_deprecated ("-falt-external-templates");
600 }
601 else if (! strcmp (p, "no-alt-external-templates"))
602 flag_alt_external_templates = 0;
603 else if (!strcmp (p, "repo"))
604 {
605 flag_use_repository = 1;
606 flag_implicit_templates = 0;
607 }
608 else if (!strcmp (p, "guiding-decls"))
609 {
610 flag_guiding_decls = 1;
611 name_mangling_version = 0;
612 }
613 else if (!strcmp (p, "no-guiding-decls"))
614 flag_guiding_decls = 0;
615 else if (!strcmp (p, "external-templates"))
616 {
617 flag_external_templates = 1;
618 cp_deprecated ("-fexternal-templates");
619 }
620 else if (!strcmp (p, "new-abi"))
621 {
622 flag_new_abi = 1;
623 flag_do_squangling = 1;
624 flag_vtable_thunks = 1;
625 }
626 else if (!strcmp (p, "no-new-abi"))
627 {
628 flag_new_abi = 0;
629 flag_do_squangling = 0;
630 }
631 else if (!strncmp (p, "template-depth-", 15))
632 max_tinst_depth
633 = read_integral_parameter (p + 15, p - 2, max_tinst_depth);
634 else if (!strncmp (p, "name-mangling-version-", 22))
635 name_mangling_version
636 = read_integral_parameter (p + 22, p - 2, name_mangling_version);
637 else if (!strncmp (p, "message-length=", 15))
638 set_message_length
639 (read_integral_parameter (p + 15, p - 2,
640 /* default line-wrap length */ 72));
641 else if (!strncmp (p, "dump-translation-unit-", 22))
642 {
643 if (p[22] == '\0')
644 error ("no file specified with -fdump-translation-unit");
645 else
646 flag_dump_translation_unit = p + 22;
647 }
648 else
649 {
650 int found = 0;
651
652 for (j = 0;
653 !found && j < (sizeof (lang_f_options)
654 / sizeof (lang_f_options[0]));
655 j++)
656 {
657 if (!strcmp (p, lang_f_options[j].string))
658 {
659 *lang_f_options[j].variable = lang_f_options[j].on_value;
660 /* A goto here would be cleaner,
661 but breaks the vax pcc. */
662 found = 1;
663 }
664 if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
665 && ! strcmp (p+3, lang_f_options[j].string))
666 {
667 *lang_f_options[j].variable = ! lang_f_options[j].on_value;
668 found = 1;
669 }
670 }
671
672 return found;
673 }
674 }
675 else if (p[0] == '-' && p[1] == 'W')
676 {
677 int setting = 1;
678
679 /* The -W options control the warning behavior of the compiler. */
680 p += 2;
681
682 if (p[0] == 'n' && p[1] == 'o' && p[2] == '-')
683 setting = 0, p += 3;
684
685 if (!strcmp (p, "implicit"))
686 warn_implicit = setting;
687 else if (!strcmp (p, "long-long"))
688 warn_long_long = setting;
689 else if (!strcmp (p, "return-type"))
690 warn_return_type = setting;
691 else if (!strcmp (p, "ctor-dtor-privacy"))
692 warn_ctor_dtor_privacy = setting;
693 else if (!strcmp (p, "write-strings"))
694 warn_write_strings = setting;
695 else if (!strcmp (p, "cast-qual"))
696 warn_cast_qual = setting;
697 else if (!strcmp (p, "char-subscripts"))
698 warn_char_subscripts = setting;
699 else if (!strcmp (p, "pointer-arith"))
700 warn_pointer_arith = setting;
701 else if (!strcmp (p, "missing-prototypes"))
702 warn_missing_prototypes = setting;
703 else if (!strcmp (p, "redundant-decls"))
704 warn_redundant_decls = setting;
705 else if (!strcmp (p, "missing-braces"))
706 warn_missing_braces = setting;
707 else if (!strcmp (p, "sign-compare"))
708 warn_sign_compare = setting;
709 else if (!strcmp (p, "float-equal"))
710 warn_float_equal = setting;
711 else if (!strcmp (p, "format"))
712 warn_format = setting;
713 else if (!strcmp (p, "conversion"))
714 warn_conversion = setting;
715 else if (!strcmp (p, "parentheses"))
716 warn_parentheses = setting;
717 else if (!strcmp (p, "non-virtual-dtor"))
718 warn_nonvdtor = setting;
719 else if (!strcmp (p, "extern-inline"))
720 warn_extern_inline = setting;
721 else if (!strcmp (p, "reorder"))
722 warn_reorder = setting;
723 else if (!strcmp (p, "synth"))
724 warn_synth = setting;
725 else if (!strcmp (p, "pmf-conversions"))
726 warn_pmf2ptr = setting;
727 else if (!strcmp (p, "effc++"))
728 warn_ecpp = setting;
729 else if (!strcmp (p, "sign-promo"))
730 warn_sign_promo = setting;
731 else if (!strcmp (p, "old-style-cast"))
732 warn_old_style_cast = setting;
733 else if (!strcmp (p, "overloaded-virtual"))
734 warn_overloaded_virtual = setting;
735 else if (!strcmp (p, "multichar"))
736 warn_multichar = setting;
737 else if (!strcmp (p, "unknown-pragmas"))
738 /* Set to greater than 1, so that even unknown pragmas in
739 system headers will be warned about. */
740 warn_unknown_pragmas = setting * 2;
741 else if (!strcmp (p, "non-template-friend"))
742 warn_nontemplate_friend = setting;
743 else if (!strcmp (p, "deprecated"))
744 warn_deprecated = setting;
745 else if (!strcmp (p, "comment"))
746 ; /* cpp handles this one. */
747 else if (!strcmp (p, "comments"))
748 ; /* cpp handles this one. */
749 else if (!strcmp (p, "trigraphs"))
750 ; /* cpp handles this one. */
751 else if (!strcmp (p, "import"))
752 ; /* cpp handles this one. */
753 else if (!strcmp (p, "all"))
754 {
755 warn_return_type = setting;
756 warn_unused = setting;
757 warn_implicit = setting;
758 warn_switch = setting;
759 warn_format = setting;
760 warn_parentheses = setting;
761 warn_missing_braces = setting;
762 warn_sign_compare = setting;
763 warn_multichar = setting;
764 /* We save the value of warn_uninitialized, since if they put
765 -Wuninitialized on the command line, we need to generate a
766 warning about not using it without also specifying -O. */
767 if (warn_uninitialized != 1)
768 warn_uninitialized = (setting ? 2 : 0);
769 /* Only warn about unknown pragmas that are not in system
770 headers. */
771 warn_unknown_pragmas = 1;
772
773 /* C++-specific warnings. */
774 warn_ctor_dtor_privacy = setting;
775 warn_nonvdtor = setting;
776 warn_reorder = setting;
777 warn_nontemplate_friend = setting;
778 }
779 else return strings_processed;
780 }
781 else if (!strcmp (p, "-ansi"))
782 flag_no_nonansi_builtin = 1, flag_ansi = 1,
783 flag_no_gnu_keywords = 1, flag_operator_names = 1;
784 #ifdef SPEW_DEBUG
785 /* Undocumented, only ever used when you're invoking cc1plus by hand, since
786 it's probably safe to assume no sane person would ever want to use this
787 under normal circumstances. */
788 else if (!strcmp (p, "-spew-debug"))
789 spew_debug = 1;
790 #endif
791 else
792 return strings_processed;
793
794 return 1;
795 }
796 \f
797 /* Incorporate `const' and `volatile' qualifiers for member functions.
798 FUNCTION is a TYPE_DECL or a FUNCTION_DECL.
799 QUALS is a list of qualifiers. Returns any explicit
800 top-level qualifiers of the method's this pointer, anything other than
801 TYPE_UNQUALIFIED will be an extension. */
802
803 int
804 grok_method_quals (ctype, function, quals)
805 tree ctype, function, quals;
806 {
807 tree fntype = TREE_TYPE (function);
808 tree raises = TYPE_RAISES_EXCEPTIONS (fntype);
809 int type_quals = TYPE_UNQUALIFIED;
810 int dup_quals = TYPE_UNQUALIFIED;
811 int this_quals = TYPE_UNQUALIFIED;
812
813 do
814 {
815 int tq = cp_type_qual_from_rid (TREE_VALUE (quals));
816
817 if ((type_quals | this_quals) & tq)
818 dup_quals |= tq;
819 else if (tq & TYPE_QUAL_RESTRICT)
820 this_quals |= tq;
821 else
822 type_quals |= tq;
823 quals = TREE_CHAIN (quals);
824 }
825 while (quals);
826
827 if (dup_quals != TYPE_UNQUALIFIED)
828 cp_error ("duplicate type qualifiers in %s declaration",
829 TREE_CODE (function) == FUNCTION_DECL
830 ? "member function" : "type");
831
832 ctype = cp_build_qualified_type (ctype, type_quals);
833 fntype = build_cplus_method_type (ctype, TREE_TYPE (fntype),
834 (TREE_CODE (fntype) == METHOD_TYPE
835 ? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
836 : TYPE_ARG_TYPES (fntype)));
837 if (raises)
838 fntype = build_exception_variant (fntype, raises);
839
840 TREE_TYPE (function) = fntype;
841 return this_quals;
842 }
843
844 /* Warn when -fexternal-templates is used and #pragma
845 interface/implementation is not used all the times it should be,
846 inform the user. */
847
848 void
849 warn_if_unknown_interface (decl)
850 tree decl;
851 {
852 static int already_warned = 0;
853 if (already_warned++)
854 return;
855
856 if (flag_alt_external_templates)
857 {
858 struct tinst_level *til = tinst_for_decl ();
859 int sl = lineno;
860 char *sf = input_filename;
861
862 if (til)
863 {
864 lineno = til->line;
865 input_filename = til->file;
866 }
867 cp_warning ("template `%#D' instantiated in file without #pragma interface",
868 decl);
869 lineno = sl;
870 input_filename = sf;
871 }
872 else
873 cp_warning_at ("template `%#D' defined in file without #pragma interface",
874 decl);
875 }
876
877 /* A subroutine of the parser, to handle a component list. */
878
879 void
880 grok_x_components (specs)
881 tree specs;
882 {
883 struct pending_inline **p;
884 tree t;
885
886 specs = strip_attrs (specs);
887
888 check_tag_decl (specs);
889 t = groktypename (build_decl_list (specs, NULL_TREE));
890
891 /* The only case where we need to do anything additional here is an
892 anonymous union field, e.g.: `struct S { union { int i; }; };'. */
893 if (t == NULL_TREE || !ANON_AGGR_TYPE_P (t))
894 return;
895
896 fixup_anonymous_aggr (t);
897 finish_member_declaration (build_lang_decl (FIELD_DECL, NULL_TREE, t));
898
899 /* Ignore any inline function definitions in the anonymous union
900 since an anonymous union may not have function members. */
901 p = &pending_inlines;
902 for (; *p; *p = (*p)->next)
903 if (DECL_CONTEXT ((*p)->fndecl) != t)
904 break;
905 }
906
907 /* Constructors for types with virtual baseclasses need an "in-charge" flag
908 saying whether this constructor is responsible for initialization of
909 virtual baseclasses or not. All destructors also need this "in-charge"
910 flag, which additionally determines whether or not the destructor should
911 free the memory for the object.
912
913 This function adds the "in-charge" flag to member function FN if
914 appropriate. It is called from grokclassfn and tsubst.
915 FN must be either a constructor or destructor. */
916
917 void
918 maybe_retrofit_in_chrg (fn)
919 tree fn;
920 {
921 tree basetype, arg_types, parms, parm, fntype;
922
923 if (DECL_CONSTRUCTOR_P (fn)
924 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn))
925 && ! DECL_CONSTRUCTOR_FOR_VBASE_P (fn))
926 /* OK */;
927 else if (! DECL_CONSTRUCTOR_P (fn)
928 && TREE_CHAIN (DECL_ARGUMENTS (fn)) == NULL_TREE)
929 /* OK */;
930 else
931 return;
932
933 if (DECL_CONSTRUCTOR_P (fn))
934 DECL_CONSTRUCTOR_FOR_VBASE_P (fn) = 1;
935
936 /* First add it to DECL_ARGUMENTS... */
937 parm = build_decl (PARM_DECL, in_charge_identifier, integer_type_node);
938 /* Mark the artificial `__in_chrg' parameter as "artificial". */
939 SET_DECL_ARTIFICIAL (parm);
940 DECL_ARG_TYPE (parm) = integer_type_node;
941 TREE_READONLY (parm) = 1;
942 parms = DECL_ARGUMENTS (fn);
943 TREE_CHAIN (parm) = TREE_CHAIN (parms);
944 TREE_CHAIN (parms) = parm;
945
946 /* ...and then to TYPE_ARG_TYPES. */
947 arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
948 basetype = TREE_TYPE (TREE_VALUE (arg_types));
949 arg_types = hash_tree_chain (integer_type_node, TREE_CHAIN (arg_types));
950 fntype = build_cplus_method_type (basetype, TREE_TYPE (TREE_TYPE (fn)),
951 arg_types);
952 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)))
953 fntype = build_exception_variant (fntype,
954 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)));
955 TREE_TYPE (fn) = fntype;
956 }
957
958 /* Classes overload their constituent function names automatically.
959 When a function name is declared in a record structure,
960 its name is changed to it overloaded name. Since names for
961 constructors and destructors can conflict, we place a leading
962 '$' for destructors.
963
964 CNAME is the name of the class we are grokking for.
965
966 FUNCTION is a FUNCTION_DECL. It was created by `grokdeclarator'.
967
968 FLAGS contains bits saying what's special about today's
969 arguments. 1 == DESTRUCTOR. 2 == OPERATOR.
970
971 If FUNCTION is a destructor, then we must add the `auto-delete' field
972 as a second parameter. There is some hair associated with the fact
973 that we must "declare" this variable in the manner consistent with the
974 way the rest of the arguments were declared.
975
976 QUALS are the qualifiers for the this pointer. */
977
978 void
979 grokclassfn (ctype, function, flags, quals)
980 tree ctype, function;
981 enum overload_flags flags;
982 tree quals;
983 {
984 tree fn_name = DECL_NAME (function);
985 int this_quals = TYPE_UNQUALIFIED;
986
987 if (fn_name == NULL_TREE)
988 {
989 error ("name missing for member function");
990 fn_name = get_identifier ("<anonymous>");
991 DECL_NAME (function) = fn_name;
992 }
993
994 if (quals)
995 this_quals = grok_method_quals (ctype, function, quals);
996
997 if (TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
998 {
999 /* Must add the class instance variable up front. */
1000 /* Right now we just make this a pointer. But later
1001 we may wish to make it special. */
1002 tree type = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (function)));
1003
1004 tree parm = build_decl (PARM_DECL, this_identifier,
1005 cp_build_qualified_type (type, this_quals | TYPE_QUAL_CONST));
1006 /* Mark the artificial `this' parameter as "artificial". */
1007 SET_DECL_ARTIFICIAL (parm);
1008 DECL_ARG_TYPE (parm) = type;
1009 /* We can make this a register, so long as we don't
1010 accidentally complain if someone tries to take its address. */
1011 DECL_REGISTER (parm) = 1;
1012 TREE_CHAIN (parm) = last_function_parms;
1013 last_function_parms = parm;
1014 }
1015
1016 DECL_ARGUMENTS (function) = last_function_parms;
1017 DECL_CONTEXT (function) = ctype;
1018
1019 if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
1020 maybe_retrofit_in_chrg (function);
1021
1022 if (flags == DTOR_FLAG)
1023 {
1024 DECL_ASSEMBLER_NAME (function) = build_destructor_name (ctype);
1025 TYPE_HAS_DESTRUCTOR (ctype) = 1;
1026 }
1027 else
1028 set_mangled_name_for_decl (function);
1029 }
1030
1031 /* Work on the expr used by alignof (this is only called by the parser). */
1032
1033 tree
1034 grok_alignof (expr)
1035 tree expr;
1036 {
1037 tree best, t;
1038 int bestalign;
1039
1040 if (processing_template_decl)
1041 return build_min (ALIGNOF_EXPR, sizetype, expr);
1042
1043 if (TREE_CODE (expr) == COMPONENT_REF
1044 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
1045 error ("`__alignof__' applied to a bit-field");
1046
1047 if (TREE_CODE (expr) == INDIRECT_REF)
1048 {
1049 best = t = TREE_OPERAND (expr, 0);
1050 bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
1051
1052 while (TREE_CODE (t) == NOP_EXPR
1053 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
1054 {
1055 int thisalign;
1056 t = TREE_OPERAND (t, 0);
1057 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
1058 if (thisalign > bestalign)
1059 best = t, bestalign = thisalign;
1060 }
1061 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
1062 }
1063 else
1064 return c_alignof (TREE_TYPE (expr));
1065 }
1066
1067 /* Create an ARRAY_REF, checking for the user doing things backwards
1068 along the way. */
1069
1070 tree
1071 grok_array_decl (array_expr, index_exp)
1072 tree array_expr, index_exp;
1073 {
1074 tree type = TREE_TYPE (array_expr);
1075 tree p1, p2, i1, i2;
1076
1077 if (type == error_mark_node || index_exp == error_mark_node)
1078 return error_mark_node;
1079 if (processing_template_decl)
1080 return build_min (ARRAY_REF, type ? TREE_TYPE (type) : NULL_TREE,
1081 array_expr, index_exp);
1082
1083 if (type == NULL_TREE)
1084 {
1085 /* Something has gone very wrong. Assume we are mistakenly reducing
1086 an expression instead of a declaration. */
1087 error ("parser may be lost: is there a '{' missing somewhere?");
1088 return NULL_TREE;
1089 }
1090
1091 if (TREE_CODE (type) == OFFSET_TYPE
1092 || TREE_CODE (type) == REFERENCE_TYPE)
1093 type = TREE_TYPE (type);
1094
1095 /* If they have an `operator[]', use that. */
1096 if (IS_AGGR_TYPE (type) || IS_AGGR_TYPE (TREE_TYPE (index_exp)))
1097 return build_opfncall (ARRAY_REF, LOOKUP_NORMAL,
1098 array_expr, index_exp, NULL_TREE);
1099
1100 /* Otherwise, create an ARRAY_REF for a pointer or array type. It
1101 is a little-known fact that, if `a' is an array and `i' is an
1102 int, you can write `i[a]', which means the same thing as `a[i]'. */
1103
1104 if (TREE_CODE (type) == ARRAY_TYPE)
1105 p1 = array_expr;
1106 else
1107 p1 = build_expr_type_conversion (WANT_POINTER, array_expr, 0);
1108
1109 if (TREE_CODE (TREE_TYPE (index_exp)) == ARRAY_TYPE)
1110 p2 = index_exp;
1111 else
1112 p2 = build_expr_type_conversion (WANT_POINTER, index_exp, 0);
1113
1114 i1 = build_expr_type_conversion (WANT_INT | WANT_ENUM, array_expr, 0);
1115 i2 = build_expr_type_conversion (WANT_INT | WANT_ENUM, index_exp, 0);
1116
1117 if ((p1 && i2) && (i1 && p2))
1118 error ("ambiguous conversion for array subscript");
1119
1120 if (p1 && i2)
1121 array_expr = p1, index_exp = i2;
1122 else if (i1 && p2)
1123 array_expr = p2, index_exp = i1;
1124 else
1125 {
1126 cp_error ("invalid types `%T[%T]' for array subscript",
1127 type, TREE_TYPE (index_exp));
1128 return error_mark_node;
1129 }
1130
1131 if (array_expr == error_mark_node || index_exp == error_mark_node)
1132 error ("ambiguous conversion for array subscript");
1133
1134 return build_array_ref (array_expr, index_exp);
1135 }
1136
1137 /* Given the cast expression EXP, checking out its validity. Either return
1138 an error_mark_node if there was an unavoidable error, return a cast to
1139 void for trying to delete a pointer w/ the value 0, or return the
1140 call to delete. If DOING_VEC is 1, we handle things differently
1141 for doing an array delete. If DOING_VEC is 2, they gave us the
1142 array size as an argument to delete.
1143 Implements ARM $5.3.4. This is called from the parser. */
1144
1145 tree
1146 delete_sanity (exp, size, doing_vec, use_global_delete)
1147 tree exp, size;
1148 int doing_vec, use_global_delete;
1149 {
1150 tree t, type;
1151 /* For a regular vector delete (aka, no size argument) we will pass
1152 this down as a NULL_TREE into build_vec_delete. */
1153 tree maxindex = NULL_TREE;
1154
1155 if (exp == error_mark_node)
1156 return exp;
1157
1158 if (processing_template_decl)
1159 {
1160 t = build_min (DELETE_EXPR, void_type_node, exp, size);
1161 DELETE_EXPR_USE_GLOBAL (t) = use_global_delete;
1162 DELETE_EXPR_USE_VEC (t) = doing_vec;
1163 return t;
1164 }
1165
1166 if (TREE_CODE (exp) == OFFSET_REF)
1167 exp = resolve_offset_ref (exp);
1168 exp = convert_from_reference (exp);
1169 t = stabilize_reference (exp);
1170 t = build_expr_type_conversion (WANT_POINTER, t, 1);
1171
1172 if (t == NULL_TREE || t == error_mark_node)
1173 {
1174 cp_error ("type `%#T' argument given to `delete', expected pointer",
1175 TREE_TYPE (exp));
1176 return error_mark_node;
1177 }
1178
1179 if (doing_vec == 2)
1180 {
1181 maxindex = build_binary_op (MINUS_EXPR, size, integer_one_node);
1182 pedwarn ("anachronistic use of array size in vector delete");
1183 }
1184
1185 type = TREE_TYPE (t);
1186
1187 /* As of Valley Forge, you can delete a pointer to const. */
1188
1189 /* You can't delete functions. */
1190 if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
1191 {
1192 error ("cannot delete a function. Only pointer-to-objects are valid arguments to `delete'");
1193 return error_mark_node;
1194 }
1195
1196 /* Deleting ptr to void is undefined behaviour [expr.delete/3]. */
1197 if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
1198 cp_warning ("`%T' is not a pointer-to-object type", type);
1199
1200 /* An array can't have been allocated by new, so complain. */
1201 if (TREE_CODE (t) == ADDR_EXPR
1202 && TREE_CODE (TREE_OPERAND (t, 0)) == VAR_DECL
1203 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == ARRAY_TYPE)
1204 cp_warning ("deleting array `%#D'", TREE_OPERAND (t, 0));
1205
1206 /* Deleting a pointer with the value zero is valid and has no effect. */
1207 if (integer_zerop (t))
1208 return build1 (NOP_EXPR, void_type_node, t);
1209
1210 if (doing_vec)
1211 return build_vec_delete (t, maxindex, integer_one_node, use_global_delete);
1212 else
1213 {
1214 if (IS_AGGR_TYPE (TREE_TYPE (type))
1215 && TYPE_GETS_REG_DELETE (TREE_TYPE (type)))
1216 {
1217 /* Only do access checking here; we'll be calling op delete
1218 from the destructor. */
1219 tree tmp = build_op_delete_call (DELETE_EXPR, t, size_zero_node,
1220 LOOKUP_NORMAL, NULL_TREE);
1221 if (tmp == error_mark_node)
1222 return error_mark_node;
1223 }
1224
1225 return build_delete (type, t, integer_three_node,
1226 LOOKUP_NORMAL, use_global_delete);
1227 }
1228 }
1229
1230 /* Report an error if the indicated template declaration is not the
1231 sort of thing that should be a member template. */
1232
1233 void
1234 check_member_template (tmpl)
1235 tree tmpl;
1236 {
1237 tree decl;
1238
1239 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
1240 decl = DECL_TEMPLATE_RESULT (tmpl);
1241
1242 if (TREE_CODE (decl) == FUNCTION_DECL
1243 || (TREE_CODE (decl) == TYPE_DECL
1244 && IS_AGGR_TYPE (TREE_TYPE (decl))))
1245 {
1246 if (current_function_decl)
1247 /* 14.5.2.2 [temp.mem]
1248
1249 A local class shall not have member templates. */
1250 cp_error ("invalid declaration of member template `%#D' in local class",
1251 decl);
1252
1253 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
1254 {
1255 /* 14.5.2.3 [temp.mem]
1256
1257 A member function template shall not be virtual. */
1258 cp_error
1259 ("invalid use of `virtual' in template declaration of `%#D'",
1260 decl);
1261 DECL_VIRTUAL_P (decl) = 0;
1262 }
1263
1264 /* The debug-information generating code doesn't know what to do
1265 with member templates. */
1266 DECL_IGNORED_P (tmpl) = 1;
1267 }
1268 else
1269 cp_error ("template declaration of `%#D'", decl);
1270 }
1271
1272 /* Return true iff TYPE is a valid Java parameter or return type. */
1273
1274 static int
1275 acceptable_java_type (type)
1276 tree type;
1277 {
1278 if (TREE_CODE (type) == VOID_TYPE || TYPE_FOR_JAVA (type))
1279 return 1;
1280 if (TREE_CODE (type) == POINTER_TYPE)
1281 {
1282 type = TREE_TYPE (type);
1283 if (TREE_CODE (type) == RECORD_TYPE)
1284 {
1285 tree args; int i;
1286 if (! TYPE_FOR_JAVA (type))
1287 return 0;
1288 if (! CLASSTYPE_TEMPLATE_INFO (type))
1289 return 1;
1290 args = CLASSTYPE_TI_ARGS (type);
1291 i = TREE_VEC_LENGTH (args);
1292 while (--i >= 0)
1293 {
1294 type = TREE_VEC_ELT (args, i);
1295 if (TREE_CODE (type) == POINTER_TYPE)
1296 type = TREE_TYPE (type);
1297 if (! TYPE_FOR_JAVA (type))
1298 return 0;
1299 }
1300 return 1;
1301 }
1302 }
1303 return 0;
1304 }
1305
1306 /* For a METHOD in a Java class CTYPE, return 1 if
1307 the parameter and return types are valid Java types.
1308 Otherwise, print appropriate error messages, and return 0. */
1309
1310 int
1311 check_java_method (method)
1312 tree method;
1313 {
1314 int jerr = 0;
1315 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (method));
1316 tree ret_type = TREE_TYPE (TREE_TYPE (method));
1317 if (! acceptable_java_type (ret_type))
1318 {
1319 cp_error ("Java method '%D' has non-Java return type `%T'",
1320 method, ret_type);
1321 jerr++;
1322 }
1323 for (; arg_types != NULL_TREE; arg_types = TREE_CHAIN (arg_types))
1324 {
1325 tree type = TREE_VALUE (arg_types);
1326 if (! acceptable_java_type (type))
1327 {
1328 cp_error ("Java method '%D' has non-Java parameter type `%T'",
1329 method, type);
1330 jerr++;
1331 }
1332 }
1333 return jerr ? 0 : 1;
1334 }
1335
1336 /* Sanity check: report error if this function FUNCTION is not
1337 really a member of the class (CTYPE) it is supposed to belong to.
1338 CNAME is the same here as it is for grokclassfn above. */
1339
1340 tree
1341 check_classfn (ctype, function)
1342 tree ctype, function;
1343 {
1344 tree fn_name = DECL_NAME (function);
1345 tree fndecl, fndecls;
1346 tree method_vec = CLASSTYPE_METHOD_VEC (complete_type (ctype));
1347 tree *methods = 0;
1348 tree *end = 0;
1349
1350 if (DECL_USE_TEMPLATE (function)
1351 && is_member_template (DECL_TI_TEMPLATE (function)))
1352 /* Since this is a specialization of a member template,
1353 we're not going to find the declaration in the class.
1354 For example, in:
1355
1356 struct S { template <typename T> void f(T); };
1357 template <> void S::f(int);
1358
1359 we're not going to find `S::f(int)', but there's no
1360 reason we should, either. We let our callers know we didn't
1361 find the method, but we don't complain. */
1362 return NULL_TREE;
1363
1364 if (method_vec != 0)
1365 {
1366 methods = &TREE_VEC_ELT (method_vec, 0);
1367 end = TREE_VEC_END (method_vec);
1368
1369 /* First suss out ctors and dtors. */
1370 if (*methods && fn_name == DECL_NAME (OVL_CURRENT (*methods))
1371 && DECL_CONSTRUCTOR_P (function))
1372 goto got_it;
1373 if (*++methods && fn_name == DECL_NAME (OVL_CURRENT (*methods))
1374 && DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (function)))
1375 goto got_it;
1376
1377 while (++methods != end && *methods)
1378 {
1379 fndecl = *methods;
1380 if (fn_name == DECL_NAME (OVL_CURRENT (*methods)))
1381 {
1382 got_it:
1383 for (fndecls = *methods; fndecls != NULL_TREE;
1384 fndecls = OVL_NEXT (fndecls))
1385 {
1386 fndecl = OVL_CURRENT (fndecls);
1387 /* The DECL_ASSEMBLER_NAME for a TEMPLATE_DECL, or
1388 for a for member function of a template class, is
1389 not mangled, so the check below does not work
1390 correctly in that case. Since mangled destructor
1391 names do not include the type of the arguments,
1392 we can't use this short-cut for them, either.
1393 (It's not legal to declare arguments for a
1394 destructor, but some people try.) */
1395 if (!DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (function))
1396 && (DECL_ASSEMBLER_NAME (function)
1397 != DECL_NAME (function))
1398 && (DECL_ASSEMBLER_NAME (fndecl)
1399 != DECL_NAME (fndecl))
1400 && (DECL_ASSEMBLER_NAME (function)
1401 == DECL_ASSEMBLER_NAME (fndecl)))
1402 return fndecl;
1403
1404 /* We cannot simply call decls_match because this
1405 doesn't work for static member functions that are
1406 pretending to be methods, and because the name
1407 may have been changed by asm("new_name"). */
1408 if (DECL_NAME (function) == DECL_NAME (fndecl))
1409 {
1410 tree p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
1411 tree p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1412
1413 /* Get rid of the this parameter on functions that become
1414 static. */
1415 if (DECL_STATIC_FUNCTION_P (fndecl)
1416 && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
1417 p1 = TREE_CHAIN (p1);
1418
1419 if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
1420 TREE_TYPE (TREE_TYPE (fndecl)))
1421 && compparms (p1, p2)
1422 && (DECL_TEMPLATE_SPECIALIZATION (function)
1423 == DECL_TEMPLATE_SPECIALIZATION (fndecl))
1424 && (!DECL_TEMPLATE_SPECIALIZATION (function)
1425 || (DECL_TI_TEMPLATE (function)
1426 == DECL_TI_TEMPLATE (fndecl))))
1427 return fndecl;
1428 }
1429 }
1430 break; /* loser */
1431 }
1432 }
1433 }
1434
1435 if (methods != end && *methods)
1436 {
1437 tree fndecl = *methods;
1438 cp_error ("prototype for `%#D' does not match any in class `%T'",
1439 function, ctype);
1440 cp_error_at ("candidate%s: %+#D", OVL_NEXT (fndecl) ? "s are" : " is",
1441 OVL_CURRENT (fndecl));
1442 while (fndecl = OVL_NEXT (fndecl), fndecl)
1443 cp_error_at (" %#D", OVL_CURRENT(fndecl));
1444 }
1445 else
1446 {
1447 methods = 0;
1448 if (TYPE_SIZE (ctype) == 0)
1449 incomplete_type_error (function, ctype);
1450 else
1451 cp_error ("no `%#D' member function declared in class `%T'",
1452 function, ctype);
1453 }
1454
1455 /* If we did not find the method in the class, add it to avoid
1456 spurious errors (unless the CTYPE is not yet defined, in which
1457 case we'll only confuse ourselves when the function is declared
1458 properly within the class. */
1459 if (TYPE_SIZE (ctype))
1460 add_method (ctype, methods, function);
1461 return NULL_TREE;
1462 }
1463
1464 /* We have just processed the DECL, which is a static data member.
1465 Its initializer, if present, is INIT. The ASMSPEC_TREE, if
1466 present, is the assembly-language name for the data member.
1467 FLAGS is as for cp_finish_decl. */
1468
1469 void
1470 finish_static_data_member_decl (decl, init, asmspec_tree, flags)
1471 tree decl;
1472 tree init;
1473 tree asmspec_tree;
1474 int flags;
1475 {
1476 const char *asmspec = 0;
1477
1478 if (asmspec_tree)
1479 asmspec = TREE_STRING_POINTER (asmspec_tree);
1480
1481 my_friendly_assert (TREE_PUBLIC (decl), 0);
1482
1483 /* We cannot call pushdecl here, because that would fill in the
1484 decl of our TREE_CHAIN. Instead, we modify cp_finish_decl to do
1485 the right thing, namely, to put this decl out straight away. */
1486 /* current_class_type can be NULL_TREE in case of error. */
1487 if (!asmspec && current_class_type)
1488 {
1489 DECL_INITIAL (decl) = error_mark_node;
1490 DECL_ASSEMBLER_NAME (decl)
1491 = build_static_name (current_class_type, DECL_NAME (decl));
1492 }
1493 if (! processing_template_decl)
1494 {
1495 if (!pending_statics)
1496 VARRAY_TREE_INIT (pending_statics, 32, "pending_statics");
1497 VARRAY_PUSH_TREE (pending_statics, decl);
1498 }
1499
1500 /* Static consts need not be initialized in the class definition. */
1501 if (init != NULL_TREE && TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
1502 {
1503 static int explanation = 0;
1504
1505 error ("initializer invalid for static member with constructor");
1506 if (explanation++ == 0)
1507 error ("(you really want to initialize it separately)");
1508 init = 0;
1509 }
1510 /* Force the compiler to know when an uninitialized static const
1511 member is being used. */
1512 if (CP_TYPE_CONST_P (TREE_TYPE (decl)) && init == 0)
1513 TREE_USED (decl) = 1;
1514 DECL_INITIAL (decl) = init;
1515 DECL_IN_AGGR_P (decl) = 1;
1516 DECL_CONTEXT (decl) = current_class_type;
1517
1518 cp_finish_decl (decl, init, asmspec_tree, flags);
1519 }
1520
1521 /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
1522 of a structure component, returning a FIELD_DECL node.
1523 QUALS is a list of type qualifiers for this decl (such as for declaring
1524 const member functions).
1525
1526 This is done during the parsing of the struct declaration.
1527 The FIELD_DECL nodes are chained together and the lot of them
1528 are ultimately passed to `build_struct' to make the RECORD_TYPE node.
1529
1530 C++:
1531
1532 If class A defines that certain functions in class B are friends, then
1533 the way I have set things up, it is B who is interested in permission
1534 granted by A. However, it is in A's context that these declarations
1535 are parsed. By returning a void_type_node, class A does not attempt
1536 to incorporate the declarations of the friends within its structure.
1537
1538 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
1539 CHANGES TO CODE IN `start_method'. */
1540
1541 tree
1542 grokfield (declarator, declspecs, init, asmspec_tree, attrlist)
1543 tree declarator, declspecs, init, asmspec_tree, attrlist;
1544 {
1545 register tree value;
1546 const char *asmspec = 0;
1547 int flags = LOOKUP_ONLYCONVERTING;
1548
1549 /* Convert () initializers to = initializers. */
1550 if (init == NULL_TREE && declarator != NULL_TREE
1551 && TREE_CODE (declarator) == CALL_EXPR
1552 && TREE_OPERAND (declarator, 0)
1553 && (TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE
1554 || TREE_CODE (TREE_OPERAND (declarator, 0)) == SCOPE_REF)
1555 && parmlist_is_exprlist (CALL_DECLARATOR_PARMS (declarator)))
1556 {
1557 init = TREE_OPERAND (declarator, 1);
1558 declarator = TREE_OPERAND (declarator, 0);
1559 flags = 0;
1560 }
1561
1562 if (declspecs == NULL_TREE
1563 && TREE_CODE (declarator) == SCOPE_REF
1564 && TREE_CODE (TREE_OPERAND (declarator, 1)) == IDENTIFIER_NODE)
1565 {
1566 /* Access declaration */
1567 if (! IS_AGGR_TYPE_CODE (TREE_CODE (TREE_OPERAND (declarator, 0))))
1568 ;
1569 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
1570 pop_nested_class ();
1571 return do_class_using_decl (declarator);
1572 }
1573
1574 if (init
1575 && TREE_CODE (init) == TREE_LIST
1576 && TREE_VALUE (init) == error_mark_node
1577 && TREE_CHAIN (init) == NULL_TREE)
1578 init = NULL_TREE;
1579
1580 value = grokdeclarator (declarator, declspecs, FIELD, init != 0, attrlist);
1581 if (! value || value == error_mark_node)
1582 /* friend or constructor went bad. */
1583 return value;
1584
1585 /* Pass friendly classes back. */
1586 if (TREE_CODE (value) == VOID_TYPE)
1587 return void_type_node;
1588
1589 if (DECL_NAME (value) != NULL_TREE
1590 && IDENTIFIER_POINTER (DECL_NAME (value))[0] == '_'
1591 && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (value)), "_vptr"))
1592 cp_error ("member `%D' conflicts with virtual function table field name",
1593 value);
1594
1595 /* Stash away type declarations. */
1596 if (TREE_CODE (value) == TYPE_DECL)
1597 {
1598 DECL_NONLOCAL (value) = 1;
1599 DECL_CONTEXT (value) = current_class_type;
1600
1601 /* Now that we've updated the context, we need to remangle the
1602 name for this TYPE_DECL. */
1603 DECL_ASSEMBLER_NAME (value) = DECL_NAME (value);
1604 if (!uses_template_parms (value))
1605 DECL_ASSEMBLER_NAME (value) =
1606 get_identifier (build_overload_name (TREE_TYPE (value), 1, 1));
1607
1608 if (processing_template_decl)
1609 value = push_template_decl (value);
1610
1611 return value;
1612 }
1613
1614 if (DECL_IN_AGGR_P (value))
1615 {
1616 cp_error ("`%D' is already defined in `%T'", value,
1617 DECL_CONTEXT (value));
1618 return void_type_node;
1619 }
1620
1621 if (asmspec_tree)
1622 asmspec = TREE_STRING_POINTER (asmspec_tree);
1623
1624 if (init)
1625 {
1626 if (TREE_CODE (value) == FUNCTION_DECL)
1627 {
1628 grok_function_init (value, init);
1629 init = NULL_TREE;
1630 }
1631 else if (pedantic && TREE_CODE (value) != VAR_DECL)
1632 /* Already complained in grokdeclarator. */
1633 init = NULL_TREE;
1634 else
1635 {
1636 /* We allow initializers to become parameters to base
1637 initializers. */
1638 if (TREE_CODE (init) == TREE_LIST)
1639 {
1640 if (TREE_CHAIN (init) == NULL_TREE)
1641 init = TREE_VALUE (init);
1642 else
1643 init = digest_init (TREE_TYPE (value), init, (tree *)0);
1644 }
1645
1646 if (TREE_CODE (init) == CONST_DECL)
1647 init = DECL_INITIAL (init);
1648 else if (TREE_READONLY_DECL_P (init))
1649 init = decl_constant_value (init);
1650 else if (TREE_CODE (init) == CONSTRUCTOR)
1651 init = digest_init (TREE_TYPE (value), init, (tree *)0);
1652 if (init == error_mark_node)
1653 /* We must make this look different than `error_mark_node'
1654 because `decl_const_value' would mis-interpret it
1655 as only meaning that this VAR_DECL is defined. */
1656 init = build1 (NOP_EXPR, TREE_TYPE (value), init);
1657 else if (processing_template_decl)
1658 ;
1659 else if (! TREE_CONSTANT (init))
1660 {
1661 /* We can allow references to things that are effectively
1662 static, since references are initialized with the address. */
1663 if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
1664 || (TREE_STATIC (init) == 0
1665 && (TREE_CODE_CLASS (TREE_CODE (init)) != 'd'
1666 || DECL_EXTERNAL (init) == 0)))
1667 {
1668 error ("field initializer is not constant");
1669 init = error_mark_node;
1670 }
1671 }
1672 }
1673 }
1674
1675 if (processing_template_decl && ! current_function_decl
1676 && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
1677 value = push_template_decl (value);
1678
1679 if (attrlist)
1680 cplus_decl_attributes (value, TREE_PURPOSE (attrlist),
1681 TREE_VALUE (attrlist));
1682
1683 if (TREE_CODE (value) == VAR_DECL)
1684 {
1685 finish_static_data_member_decl (value, init, asmspec_tree,
1686 flags);
1687 return value;
1688 }
1689 if (TREE_CODE (value) == FIELD_DECL)
1690 {
1691 if (asmspec)
1692 {
1693 /* This must override the asm specifier which was placed
1694 by grokclassfn. Lay this out fresh. */
1695 DECL_RTL (value) = NULL_RTX;
1696 DECL_ASSEMBLER_NAME (value) = get_identifier (asmspec);
1697 }
1698 if (DECL_INITIAL (value) == error_mark_node)
1699 init = error_mark_node;
1700 cp_finish_decl (value, init, asmspec_tree, flags);
1701 DECL_INITIAL (value) = init;
1702 DECL_IN_AGGR_P (value) = 1;
1703 return value;
1704 }
1705 if (TREE_CODE (value) == FUNCTION_DECL)
1706 {
1707 if (asmspec)
1708 {
1709 /* This must override the asm specifier which was placed
1710 by grokclassfn. Lay this out fresh. */
1711 DECL_RTL (value) = NULL_RTX;
1712 DECL_ASSEMBLER_NAME (value) = get_identifier (asmspec);
1713 }
1714 cp_finish_decl (value, init, asmspec_tree, flags);
1715
1716 /* Pass friends back this way. */
1717 if (DECL_FRIEND_P (value))
1718 return void_type_node;
1719
1720 DECL_IN_AGGR_P (value) = 1;
1721 return value;
1722 }
1723 my_friendly_abort (21);
1724 /* NOTREACHED */
1725 return NULL_TREE;
1726 }
1727
1728 /* Like `grokfield', but for bitfields.
1729 WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node. */
1730
1731 tree
1732 grokbitfield (declarator, declspecs, width)
1733 tree declarator, declspecs, width;
1734 {
1735 register tree value = grokdeclarator (declarator, declspecs, BITFIELD,
1736 0, NULL_TREE);
1737
1738 if (! value) return NULL_TREE; /* friends went bad. */
1739
1740 /* Pass friendly classes back. */
1741 if (TREE_CODE (value) == VOID_TYPE)
1742 return void_type_node;
1743
1744 if (TREE_CODE (value) == TYPE_DECL)
1745 {
1746 cp_error ("cannot declare `%D' to be a bitfield type", value);
1747 return NULL_TREE;
1748 }
1749
1750 /* Usually, finish_struct_1 catches bitifields with invalid types.
1751 But, in the case of bitfields with function type, we confuse
1752 ourselves into thinking they are member functions, so we must
1753 check here. */
1754 if (TREE_CODE (value) == FUNCTION_DECL)
1755 {
1756 cp_error ("cannot declare bitfield `%D' with funcion type",
1757 DECL_NAME (value));
1758 return NULL_TREE;
1759 }
1760
1761 if (DECL_IN_AGGR_P (value))
1762 {
1763 cp_error ("`%D' is already defined in the class %T", value,
1764 DECL_CONTEXT (value));
1765 return void_type_node;
1766 }
1767
1768 GNU_xref_member (current_class_name, value);
1769
1770 if (TREE_STATIC (value))
1771 {
1772 cp_error ("static member `%D' cannot be a bitfield", value);
1773 return NULL_TREE;
1774 }
1775 cp_finish_decl (value, NULL_TREE, NULL_TREE, 0);
1776
1777 if (width != error_mark_node)
1778 {
1779 constant_expression_warning (width);
1780 DECL_INITIAL (value) = width;
1781 SET_DECL_C_BIT_FIELD (value);
1782 }
1783
1784 DECL_IN_AGGR_P (value) = 1;
1785 return value;
1786 }
1787
1788 tree
1789 grokoptypename (declspecs, declarator)
1790 tree declspecs, declarator;
1791 {
1792 tree t = grokdeclarator (declarator, declspecs, TYPENAME, 0, NULL_TREE);
1793 return build_typename_overload (t);
1794 }
1795
1796 /* When a function is declared with an initializer,
1797 do the right thing. Currently, there are two possibilities:
1798
1799 class B
1800 {
1801 public:
1802 // initialization possibility #1.
1803 virtual void f () = 0;
1804 int g ();
1805 };
1806
1807 class D1 : B
1808 {
1809 public:
1810 int d1;
1811 // error, no f ();
1812 };
1813
1814 class D2 : B
1815 {
1816 public:
1817 int d2;
1818 void f ();
1819 };
1820
1821 class D3 : B
1822 {
1823 public:
1824 int d3;
1825 // initialization possibility #2
1826 void f () = B::f;
1827 };
1828
1829 */
1830
1831 int
1832 copy_assignment_arg_p (parmtype, virtualp)
1833 tree parmtype;
1834 int virtualp ATTRIBUTE_UNUSED;
1835 {
1836 if (current_class_type == NULL_TREE)
1837 return 0;
1838
1839 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
1840 parmtype = TREE_TYPE (parmtype);
1841
1842 if ((TYPE_MAIN_VARIANT (parmtype) == current_class_type)
1843 #if 0
1844 /* Non-standard hack to support old Booch components. */
1845 || (! virtualp && DERIVED_FROM_P (parmtype, current_class_type))
1846 #endif
1847 )
1848 return 1;
1849
1850 return 0;
1851 }
1852
1853 static void
1854 grok_function_init (decl, init)
1855 tree decl;
1856 tree init;
1857 {
1858 /* An initializer for a function tells how this function should
1859 be inherited. */
1860 tree type = TREE_TYPE (decl);
1861
1862 if (TREE_CODE (type) == FUNCTION_TYPE)
1863 cp_error ("initializer specified for non-member function `%D'", decl);
1864 #if 0
1865 /* We'll check for this in finish_struct_1. */
1866 else if (DECL_VINDEX (decl) == NULL_TREE)
1867 cp_error ("initializer specified for non-virtual member function `%D'", decl);
1868 #endif
1869 else if (integer_zerop (init))
1870 {
1871 #if 0
1872 /* Mark this function as being "defined". */
1873 DECL_INITIAL (decl) = error_mark_node;
1874 /* pure virtual destructors must be defined. */
1875 /* pure virtual needs to be defined (as abort) only when put in
1876 vtbl. For wellformed call, it should be itself. pr4737 */
1877 if (!DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl)))
1878 {
1879 /* Give this node rtl from `abort'. */
1880 DECL_RTL (decl) = DECL_RTL (abort_fndecl);
1881 }
1882 #endif
1883 DECL_PURE_VIRTUAL_P (decl) = 1;
1884 if (DECL_NAME (decl) == ansi_opname [(int) MODIFY_EXPR])
1885 {
1886 tree parmtype
1887 = TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl))));
1888
1889 if (copy_assignment_arg_p (parmtype, 1))
1890 TYPE_HAS_ABSTRACT_ASSIGN_REF (current_class_type) = 1;
1891 }
1892 }
1893 else
1894 cp_error ("invalid initializer for virtual method `%D'", decl);
1895 }
1896 \f
1897 void
1898 cplus_decl_attributes (decl, attributes, prefix_attributes)
1899 tree decl, attributes, prefix_attributes;
1900 {
1901 if (decl == NULL_TREE || decl == void_type_node)
1902 return;
1903
1904 if (TREE_CODE (decl) == TEMPLATE_DECL)
1905 decl = DECL_TEMPLATE_RESULT (decl);
1906
1907 decl_attributes (decl, attributes, prefix_attributes);
1908
1909 if (TREE_CODE (decl) == TYPE_DECL)
1910 SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (decl), TREE_TYPE (decl));
1911 }
1912 \f
1913 /* CONSTRUCTOR_NAME:
1914 Return the name for the constructor (or destructor) for the
1915 specified class. Argument can be RECORD_TYPE, TYPE_DECL, or
1916 IDENTIFIER_NODE. When given a template, this routine doesn't
1917 lose the specialization. */
1918
1919 tree
1920 constructor_name_full (thing)
1921 tree thing;
1922 {
1923 if (TREE_CODE (thing) == TEMPLATE_TYPE_PARM
1924 || TREE_CODE (thing) == TEMPLATE_TEMPLATE_PARM
1925 || TREE_CODE (thing) == TYPENAME_TYPE)
1926 thing = TYPE_NAME (thing);
1927 else if (IS_AGGR_TYPE_CODE (TREE_CODE (thing)))
1928 {
1929 if (TYPE_WAS_ANONYMOUS (thing) && TYPE_HAS_CONSTRUCTOR (thing))
1930 thing = DECL_NAME (OVL_CURRENT (TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (thing), 0)));
1931 else
1932 thing = TYPE_NAME (thing);
1933 }
1934 if (TREE_CODE (thing) == TYPE_DECL
1935 || (TREE_CODE (thing) == TEMPLATE_DECL
1936 && TREE_CODE (DECL_TEMPLATE_RESULT (thing)) == TYPE_DECL))
1937 thing = DECL_NAME (thing);
1938 my_friendly_assert (TREE_CODE (thing) == IDENTIFIER_NODE, 197);
1939 return thing;
1940 }
1941
1942 /* CONSTRUCTOR_NAME:
1943 Return the name for the constructor (or destructor) for the
1944 specified class. Argument can be RECORD_TYPE, TYPE_DECL, or
1945 IDENTIFIER_NODE. When given a template, return the plain
1946 unspecialized name. */
1947
1948 tree
1949 constructor_name (thing)
1950 tree thing;
1951 {
1952 tree t;
1953 thing = constructor_name_full (thing);
1954 t = IDENTIFIER_TEMPLATE (thing);
1955 if (!t)
1956 return thing;
1957 return t;
1958 }
1959 \f
1960 /* Record the existence of an addressable inline function. */
1961
1962 void
1963 mark_inline_for_output (decl)
1964 tree decl;
1965 {
1966 decl = DECL_MAIN_VARIANT (decl);
1967 if (DECL_SAVED_INLINE (decl))
1968 return;
1969 DECL_SAVED_INLINE (decl) = 1;
1970 if (!saved_inlines)
1971 VARRAY_TREE_INIT (saved_inlines, 32, "saved_inlines");
1972
1973 VARRAY_PUSH_TREE (saved_inlines, decl);
1974 }
1975
1976 /* Hand off a unique name which can be used for variable we don't really
1977 want to know about anyway, for example, the anonymous variables which
1978 are needed to make references work. Declare this thing so we can use it.
1979 The variable created will be of type TYPE.
1980
1981 STATICP is nonzero if this variable should be static. */
1982
1983 tree
1984 get_temp_name (type, staticp)
1985 tree type;
1986 int staticp;
1987 {
1988 char buf[sizeof (AUTO_TEMP_FORMAT) + 20];
1989 tree decl;
1990 int toplev = toplevel_bindings_p ();
1991
1992 if (toplev || staticp)
1993 {
1994 sprintf (buf, AUTO_TEMP_FORMAT, global_temp_name_counter++);
1995 decl = pushdecl_top_level (build_decl (VAR_DECL, get_identifier (buf), type));
1996 }
1997 else
1998 {
1999 sprintf (buf, AUTO_TEMP_FORMAT, temp_name_counter++);
2000 decl = pushdecl (build_decl (VAR_DECL, get_identifier (buf), type));
2001 }
2002 TREE_USED (decl) = 1;
2003 TREE_STATIC (decl) = staticp;
2004 DECL_ARTIFICIAL (decl) = 1;
2005
2006 /* If this is a local variable, then lay out its rtl now.
2007 Otherwise, callers of this function are responsible for dealing
2008 with this variable's rtl. */
2009 if (! toplev)
2010 {
2011 expand_decl (decl);
2012 my_friendly_assert (DECL_INITIAL (decl) == NULL_TREE,
2013 19990826);
2014 }
2015
2016 return decl;
2017 }
2018
2019 /* Hunts through the global anonymous union ANON_DECL, building
2020 appropriate VAR_DECLs. Stores cleanups on the list of ELEMS, and
2021 returns a VAR_DECL whose size is the same as the size of the
2022 ANON_DECL, if one is available. */
2023
2024 static tree
2025 build_anon_union_vars (anon_decl, elems, static_p, external_p)
2026 tree anon_decl;
2027 tree* elems;
2028 int static_p;
2029 int external_p;
2030 {
2031 tree type = TREE_TYPE (anon_decl);
2032 tree main_decl = NULL_TREE;
2033 tree field;
2034
2035 /* Rather than write the code to handle the non-union case,
2036 just give an error. */
2037 if (TREE_CODE (type) != UNION_TYPE)
2038 error ("anonymous struct not inside named type");
2039
2040 for (field = TYPE_FIELDS (type);
2041 field != NULL_TREE;
2042 field = TREE_CHAIN (field))
2043 {
2044 tree decl;
2045
2046 if (DECL_ARTIFICIAL (field))
2047 continue;
2048 if (TREE_CODE (field) != FIELD_DECL)
2049 {
2050 cp_pedwarn_at ("`%#D' invalid; an anonymous union can only have non-static data members",
2051 field);
2052 continue;
2053 }
2054
2055 if (TREE_PRIVATE (field))
2056 cp_pedwarn_at ("private member `%#D' in anonymous union", field);
2057 else if (TREE_PROTECTED (field))
2058 cp_pedwarn_at ("protected member `%#D' in anonymous union", field);
2059
2060 if (DECL_NAME (field) == NULL_TREE
2061 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2062 {
2063 decl = build_anon_union_vars (field, elems, static_p, external_p);
2064 if (!decl)
2065 continue;
2066 }
2067 else if (DECL_NAME (field) == NULL_TREE)
2068 continue;
2069 else
2070 {
2071 decl = build_decl (VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
2072 /* tell `pushdecl' that this is not tentative. */
2073 DECL_INITIAL (decl) = error_mark_node;
2074 TREE_PUBLIC (decl) = 0;
2075 TREE_STATIC (decl) = static_p;
2076 DECL_EXTERNAL (decl) = external_p;
2077 decl = pushdecl (decl);
2078 DECL_INITIAL (decl) = NULL_TREE;
2079 }
2080
2081 /* Only write out one anon union element--choose the one that
2082 can hold them all. */
2083 if (main_decl == NULL_TREE
2084 && simple_cst_equal (DECL_SIZE (decl),
2085 DECL_SIZE (anon_decl)) == 1)
2086 main_decl = decl;
2087 else
2088 /* ??? This causes there to be no debug info written out
2089 about this decl. */
2090 TREE_ASM_WRITTEN (decl) = 1;
2091
2092 if (DECL_NAME (field) == NULL_TREE
2093 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2094 /* The remainder of the processing was already done in the
2095 recursive call. */
2096 continue;
2097
2098 /* If there's a cleanup to do, it belongs in the
2099 TREE_PURPOSE of the following TREE_LIST. */
2100 *elems = tree_cons (NULL_TREE, decl, *elems);
2101 TREE_TYPE (*elems) = type;
2102 }
2103
2104 return main_decl;
2105 }
2106
2107 /* Finish off the processing of a UNION_TYPE structure.
2108 If there are static members, then all members are
2109 static, and must be laid out together. If the
2110 union is an anonymous union, we arrange for that
2111 as well. PUBLIC_P is nonzero if this union is
2112 not declared static. */
2113
2114 void
2115 finish_anon_union (anon_union_decl)
2116 tree anon_union_decl;
2117 {
2118 tree type = TREE_TYPE (anon_union_decl);
2119 tree main_decl;
2120 int public_p = TREE_PUBLIC (anon_union_decl);
2121 int static_p = TREE_STATIC (anon_union_decl);
2122 int external_p = DECL_EXTERNAL (anon_union_decl);
2123
2124 if (TYPE_FIELDS (type) == NULL_TREE)
2125 return;
2126
2127 if (public_p)
2128 {
2129 error ("global anonymous unions must be declared static");
2130 return;
2131 }
2132
2133 main_decl = build_anon_union_vars (anon_union_decl,
2134 &DECL_ANON_UNION_ELEMS (anon_union_decl),
2135 static_p, external_p);
2136
2137 if (main_decl == NULL_TREE)
2138 {
2139 warning ("anonymous union with no members");
2140 return;
2141 }
2142
2143 if (static_p)
2144 {
2145 make_decl_rtl (main_decl, 0, toplevel_bindings_p ());
2146 DECL_RTL (anon_union_decl) = DECL_RTL (main_decl);
2147 expand_anon_union_decl (anon_union_decl,
2148 NULL_TREE,
2149 DECL_ANON_UNION_ELEMS (anon_union_decl));
2150 }
2151 else
2152 add_decl_stmt (anon_union_decl);
2153 }
2154
2155 /* Finish processing a builtin type TYPE. It's name is NAME,
2156 its fields are in the array FIELDS. LEN is the number of elements
2157 in FIELDS minus one, or put another way, it is the maximum subscript
2158 used in FIELDS.
2159
2160 It is given the same alignment as ALIGN_TYPE. */
2161
2162 void
2163 finish_builtin_type (type, name, fields, len, align_type)
2164 tree type;
2165 const char *name;
2166 tree fields[];
2167 int len;
2168 tree align_type;
2169 {
2170 register int i;
2171
2172 TYPE_FIELDS (type) = fields[0];
2173 for (i = 0; i < len; i++)
2174 {
2175 layout_type (TREE_TYPE (fields[i]));
2176 DECL_FIELD_CONTEXT (fields[i]) = type;
2177 TREE_CHAIN (fields[i]) = fields[i+1];
2178 }
2179 DECL_FIELD_CONTEXT (fields[i]) = type;
2180 TYPE_ALIGN (type) = TYPE_ALIGN (align_type);
2181 layout_type (type);
2182 #if 0 /* not yet, should get fixed properly later */
2183 TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
2184 #else
2185 TYPE_NAME (type) = build_decl (TYPE_DECL, get_identifier (name), type);
2186 #endif
2187 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2188 layout_decl (TYPE_NAME (type), 0);
2189 }
2190 \f
2191 /* Auxiliary functions to make type signatures for
2192 `operator new' and `operator delete' correspond to
2193 what compiler will be expecting. */
2194
2195 tree
2196 coerce_new_type (type)
2197 tree type;
2198 {
2199 int e1 = 0, e2 = 0;
2200
2201 if (TREE_CODE (type) == METHOD_TYPE)
2202 type = build_function_type (TREE_TYPE (type), TREE_CHAIN (TYPE_ARG_TYPES (type)));
2203 if (! same_type_p (TREE_TYPE (type), ptr_type_node))
2204 e1 = 1, error ("`operator new' must return type `void *'");
2205
2206 /* Technically the type must be `size_t', but we may not know
2207 what that is. */
2208 if (TYPE_ARG_TYPES (type) == NULL_TREE)
2209 e1 = 1, error ("`operator new' takes type `size_t' parameter");
2210 else if (! same_type_p (TREE_VALUE (TYPE_ARG_TYPES (type)), sizetype))
2211 e2 = 1, error ("`operator new' takes type `size_t' as first parameter");
2212 if (e2)
2213 type = build_function_type (ptr_type_node, tree_cons (NULL_TREE, sizetype, TREE_CHAIN (TYPE_ARG_TYPES (type))));
2214 else if (e1)
2215 type = build_function_type (ptr_type_node, TYPE_ARG_TYPES (type));
2216 return type;
2217 }
2218
2219 tree
2220 coerce_delete_type (type)
2221 tree type;
2222 {
2223 int e1 = 0, e2 = 0;
2224 #if 0
2225 e3 = 0;
2226 #endif
2227 tree arg_types = TYPE_ARG_TYPES (type);
2228
2229 if (TREE_CODE (type) == METHOD_TYPE)
2230 {
2231 type = build_function_type (TREE_TYPE (type), TREE_CHAIN (arg_types));
2232 arg_types = TREE_CHAIN (arg_types);
2233 }
2234
2235 if (TREE_TYPE (type) != void_type_node)
2236 e1 = 1, error ("`operator delete' must return type `void'");
2237
2238 if (arg_types == NULL_TREE
2239 || ! same_type_p (TREE_VALUE (arg_types), ptr_type_node))
2240 e2 = 1, error ("`operator delete' takes type `void *' as first parameter");
2241
2242 #if 0
2243 if (arg_types
2244 && TREE_CHAIN (arg_types)
2245 && TREE_CHAIN (arg_types) != void_list_node)
2246 {
2247 /* Again, technically this argument must be `size_t', but again
2248 we may not know what that is. */
2249 tree t2 = TREE_VALUE (TREE_CHAIN (arg_types));
2250 if (! same_type_p (t2, sizetype))
2251 e3 = 1, error ("second argument to `operator delete' must be of type `size_t'");
2252 else if (TREE_CHAIN (TREE_CHAIN (arg_types)) != void_list_node)
2253 {
2254 e3 = 1;
2255 if (TREE_CHAIN (TREE_CHAIN (arg_types)))
2256 error ("too many arguments in declaration of `operator delete'");
2257 else
2258 error ("`...' invalid in specification of `operator delete'");
2259 }
2260 }
2261
2262 if (e3)
2263 arg_types = tree_cons (NULL_TREE, ptr_type_node,
2264 build_tree_list (NULL_TREE, sizetype));
2265 else if (e3 |= e2)
2266 {
2267 if (arg_types == NULL_TREE)
2268 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
2269 else
2270 arg_types = tree_cons (NULL_TREE, ptr_type_node, TREE_CHAIN (arg_types));
2271 }
2272 else e3 |= e1;
2273 #endif
2274
2275 if (e2)
2276 arg_types = tree_cons (NULL_TREE, ptr_type_node,
2277 arg_types ? TREE_CHAIN (arg_types): NULL_TREE);
2278 if (e2 || e1)
2279 type = build_function_type (void_type_node, arg_types);
2280
2281 return type;
2282 }
2283 \f
2284 static void
2285 mark_vtable_entries (decl)
2286 tree decl;
2287 {
2288 tree entries = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
2289
2290 for (; entries; entries = TREE_CHAIN (entries))
2291 {
2292 tree fnaddr;
2293 tree fn;
2294
2295 fnaddr = (flag_vtable_thunks ? TREE_VALUE (entries)
2296 : FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (entries)));
2297
2298 if (TREE_CODE (fnaddr) != ADDR_EXPR)
2299 /* This entry is an offset: a virtual base class offset, a
2300 virtual call offset, and RTTI offset, etc. */
2301 continue;
2302
2303 fn = TREE_OPERAND (fnaddr, 0);
2304 TREE_ADDRESSABLE (fn) = 1;
2305 if (TREE_CODE (fn) == THUNK_DECL && DECL_EXTERNAL (fn))
2306 {
2307 DECL_EXTERNAL (fn) = 0;
2308 emit_thunk (fn);
2309 }
2310 mark_used (fn);
2311 }
2312 }
2313
2314 /* Set DECL up to have the closest approximation of "initialized common"
2315 linkage available. */
2316
2317 void
2318 comdat_linkage (decl)
2319 tree decl;
2320 {
2321 if (flag_weak)
2322 make_decl_one_only (decl);
2323 else if (TREE_CODE (decl) == FUNCTION_DECL || DECL_VIRTUAL_P (decl))
2324 /* We can just emit functions and vtables statically; it doesn't really
2325 matter if we have multiple copies. */
2326 TREE_PUBLIC (decl) = 0;
2327 else
2328 {
2329 /* Static data member template instantiations, however, cannot
2330 have multiple copies. */
2331 if (DECL_INITIAL (decl) == 0
2332 || DECL_INITIAL (decl) == error_mark_node)
2333 DECL_COMMON (decl) = 1;
2334 else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
2335 {
2336 DECL_COMMON (decl) = 1;
2337 DECL_INITIAL (decl) = error_mark_node;
2338 }
2339 else
2340 {
2341 /* We can't do anything useful; leave vars for explicit
2342 instantiation. */
2343 DECL_EXTERNAL (decl) = 1;
2344 DECL_NOT_REALLY_EXTERN (decl) = 0;
2345 }
2346 }
2347
2348 if (DECL_LANG_SPECIFIC (decl))
2349 DECL_COMDAT (decl) = 1;
2350 }
2351
2352 /* For win32 we also want to put explicit instantiations in
2353 linkonce sections, so that they will be merged with implicit
2354 instantiations; otherwise we get duplicate symbol errors. */
2355
2356 void
2357 maybe_make_one_only (decl)
2358 tree decl;
2359 {
2360 /* We used to say that this was not necessary on targets that support weak
2361 symbols, because the implicit instantiations will defer to the explicit
2362 one. However, that's not actually the case in SVR4; a strong definition
2363 after a weak one is an error. Also, not making explicit
2364 instantiations one_only means that we can end up with two copies of
2365 some template instantiations. */
2366 if (! supports_one_only ())
2367 return;
2368
2369 /* We can't set DECL_COMDAT on functions, or finish_file will think
2370 we can get away with not emitting them if they aren't used. We need
2371 to for variables so that cp_finish_decl will update their linkage,
2372 because their DECL_INITIAL may not have been set properly yet. */
2373
2374 make_decl_one_only (decl);
2375
2376 if (TREE_CODE (decl) == VAR_DECL && DECL_LANG_SPECIFIC (decl))
2377 DECL_COMDAT (decl) = 1;
2378 }
2379
2380 /* Set TREE_PUBLIC and/or DECL_EXTERN on the vtable DECL,
2381 based on TYPE and other static flags.
2382
2383 Note that anything public is tagged TREE_PUBLIC, whether
2384 it's public in this file or in another one. */
2385
2386 void
2387 import_export_vtable (decl, type, final)
2388 tree decl, type;
2389 int final;
2390 {
2391 if (DECL_INTERFACE_KNOWN (decl))
2392 return;
2393
2394 if (TYPE_FOR_JAVA (type))
2395 {
2396 TREE_PUBLIC (decl) = 1;
2397 DECL_EXTERNAL (decl) = 1;
2398 DECL_INTERFACE_KNOWN (decl) = 1;
2399 }
2400 else if (CLASSTYPE_INTERFACE_KNOWN (type))
2401 {
2402 TREE_PUBLIC (decl) = 1;
2403 DECL_EXTERNAL (decl) = ! CLASSTYPE_VTABLE_NEEDS_WRITING (type);
2404 DECL_INTERFACE_KNOWN (decl) = 1;
2405 }
2406 else
2407 {
2408 /* We can only wait to decide if we have real non-inline virtual
2409 functions in our class, or if we come from a template. */
2410
2411 int found = CLASSTYPE_TEMPLATE_INSTANTIATION (type);
2412
2413 if (! found && ! final)
2414 {
2415 tree method;
2416 for (method = TYPE_METHODS (type); method != NULL_TREE;
2417 method = TREE_CHAIN (method))
2418 if (DECL_VINDEX (method) != NULL_TREE
2419 && ! DECL_THIS_INLINE (method)
2420 && ! DECL_PURE_VIRTUAL_P (method))
2421 {
2422 found = 1;
2423 break;
2424 }
2425 }
2426
2427 if (final || ! found)
2428 {
2429 comdat_linkage (decl);
2430 DECL_EXTERNAL (decl) = 0;
2431 }
2432 else
2433 {
2434 TREE_PUBLIC (decl) = 1;
2435 DECL_EXTERNAL (decl) = 1;
2436 }
2437 }
2438 }
2439
2440 /* Determine whether or not we want to specifically import or export CTYPE,
2441 using various heuristics. */
2442
2443 void
2444 import_export_class (ctype)
2445 tree ctype;
2446 {
2447 /* -1 for imported, 1 for exported. */
2448 int import_export = 0;
2449
2450 if (CLASSTYPE_INTERFACE_KNOWN (ctype))
2451 return;
2452
2453 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma interface,
2454 we will have CLASSTYPE_INTERFACE_ONLY set but not
2455 CLASSTYPE_INTERFACE_KNOWN. In that case, we don't want to use this
2456 heuristic because someone will supply a #pragma implementation
2457 elsewhere, and deducing it here would produce a conflict. */
2458 if (CLASSTYPE_INTERFACE_ONLY (ctype))
2459 return;
2460
2461 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
2462 /* FIXME this should really use some sort of target-independent macro. */
2463 if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
2464 import_export = -1;
2465 else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
2466 import_export = 1;
2467 #endif
2468
2469 /* If we got -fno-implicit-templates, we import template classes that
2470 weren't explicitly instantiated. */
2471 if (import_export == 0
2472 && CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
2473 && ! flag_implicit_templates)
2474 import_export = -1;
2475
2476 /* Base our import/export status on that of the first non-inline,
2477 non-abstract virtual function, if any. */
2478 if (import_export == 0
2479 && TYPE_POLYMORPHIC_P (ctype)
2480 && ! CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2481 {
2482 tree method;
2483 for (method = TYPE_METHODS (ctype); method != NULL_TREE;
2484 method = TREE_CHAIN (method))
2485 {
2486 if (DECL_VINDEX (method) != NULL_TREE
2487 && !DECL_THIS_INLINE (method)
2488 && !DECL_PURE_VIRTUAL_P (method))
2489 {
2490 import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
2491 break;
2492 }
2493 }
2494 }
2495
2496 #ifdef MULTIPLE_SYMBOL_SPACES
2497 if (import_export == -1)
2498 import_export = 0;
2499 #endif
2500
2501 if (import_export)
2502 {
2503 SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
2504 CLASSTYPE_VTABLE_NEEDS_WRITING (ctype) = (import_export > 0);
2505 CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
2506 }
2507 }
2508
2509 /* We need to describe to the assembler the relationship between
2510 a vtable and the vtable of the parent class. */
2511
2512 static void
2513 output_vtable_inherit (vars)
2514 tree vars;
2515 {
2516 tree parent;
2517 rtx op[2];
2518
2519 op[0] = XEXP (DECL_RTL (vars), 0); /* strip the mem ref */
2520
2521 parent = binfo_for_vtable (vars);
2522
2523 if (parent == TYPE_BINFO (DECL_CONTEXT (vars)))
2524 op[1] = const0_rtx;
2525 else if (parent)
2526 {
2527 parent = TYPE_BINFO_VTABLE (BINFO_TYPE (parent));
2528 op[1] = XEXP (DECL_RTL (parent), 0); /* strip the mem ref */
2529 }
2530 else
2531 my_friendly_abort (980826);
2532
2533 output_asm_insn (".vtable_inherit %c0, %c1", op);
2534 }
2535
2536 static int
2537 finish_vtable_vardecl (t, data)
2538 tree *t;
2539 void *data ATTRIBUTE_UNUSED;
2540 {
2541 tree vars = *t;
2542 tree ctype = DECL_CONTEXT (vars);
2543 import_export_class (ctype);
2544 import_export_vtable (vars, ctype, 1);
2545
2546 if (! DECL_EXTERNAL (vars)
2547 && (DECL_NEEDED_P (vars)
2548 || (decl_function_context (vars) && TREE_USED (vars)))
2549 && ! TREE_ASM_WRITTEN (vars))
2550 {
2551 if (TREE_TYPE (vars) == void_type_node)
2552 /* It is a dummy vtable made by get_vtable_decl. Ignore it. */
2553 return 0;
2554
2555 /* Write it out. */
2556 mark_vtable_entries (vars);
2557 if (TREE_TYPE (DECL_INITIAL (vars)) == 0)
2558 store_init_value (vars, DECL_INITIAL (vars));
2559
2560 if (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG)
2561 {
2562 /* Mark the VAR_DECL node representing the vtable itself as a
2563 "gratuitous" one, thereby forcing dwarfout.c to ignore it.
2564 It is rather important that such things be ignored because
2565 any effort to actually generate DWARF for them will run
2566 into trouble when/if we encounter code like:
2567
2568 #pragma interface
2569 struct S { virtual void member (); };
2570
2571 because the artificial declaration of the vtable itself (as
2572 manufactured by the g++ front end) will say that the vtable
2573 is a static member of `S' but only *after* the debug output
2574 for the definition of `S' has already been output. This causes
2575 grief because the DWARF entry for the definition of the vtable
2576 will try to refer back to an earlier *declaration* of the
2577 vtable as a static member of `S' and there won't be one.
2578 We might be able to arrange to have the "vtable static member"
2579 attached to the member list for `S' before the debug info for
2580 `S' get written (which would solve the problem) but that would
2581 require more intrusive changes to the g++ front end. */
2582
2583 DECL_IGNORED_P (vars) = 1;
2584 }
2585
2586 /* Always make vtables weak. */
2587 if (flag_weak)
2588 comdat_linkage (vars);
2589
2590 rest_of_decl_compilation (vars, NULL_PTR, 1, 1);
2591
2592 if (flag_vtable_gc)
2593 output_vtable_inherit (vars);
2594
2595 /* Because we're only doing syntax-checking, we'll never end up
2596 actually marking the variable as written. */
2597 if (flag_syntax_only)
2598 TREE_ASM_WRITTEN (vars) = 1;
2599
2600 /* Since we're writing out the vtable here, also write the debug
2601 info. */
2602 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (ctype)))
2603 {
2604 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (ctype)) = 0;
2605 rest_of_type_compilation (ctype, toplevel_bindings_p ());
2606 }
2607
2608 return 1;
2609 }
2610 else if (!DECL_NEEDED_P (vars))
2611 /* We don't know what to do with this one yet. */
2612 return 0;
2613
2614 return 0;
2615 }
2616
2617 static int
2618 prune_vtable_vardecl (t, data)
2619 tree *t;
2620 void *data ATTRIBUTE_UNUSED;
2621 {
2622 *t = TREE_CHAIN (*t);
2623 return 1;
2624 }
2625
2626 /* Determines the proper settings of TREE_PUBLIC and DECL_EXTERNAL for an
2627 inline function or template instantiation at end-of-file. */
2628
2629 void
2630 import_export_decl (decl)
2631 tree decl;
2632 {
2633 if (DECL_INTERFACE_KNOWN (decl))
2634 return;
2635
2636 if (DECL_TEMPLATE_INSTANTIATION (decl)
2637 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
2638 {
2639 DECL_NOT_REALLY_EXTERN (decl) = 1;
2640 if ((DECL_IMPLICIT_INSTANTIATION (decl)
2641 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
2642 && (flag_implicit_templates
2643 || (flag_implicit_inline_templates && DECL_THIS_INLINE (decl))))
2644 {
2645 if (!TREE_PUBLIC (decl))
2646 /* Templates are allowed to have internal linkage. See
2647 [basic.link]. */
2648 ;
2649 else
2650 comdat_linkage (decl);
2651 }
2652 else
2653 DECL_NOT_REALLY_EXTERN (decl) = 0;
2654 }
2655 else if (DECL_FUNCTION_MEMBER_P (decl))
2656 {
2657 tree ctype = DECL_CONTEXT (decl);
2658 import_export_class (ctype);
2659 if (CLASSTYPE_INTERFACE_KNOWN (ctype)
2660 && (flag_new_abi
2661 ? (! DECL_THIS_INLINE (decl))
2662 : (! DECL_ARTIFICIAL (decl) || DECL_VINDEX (decl))))
2663 {
2664 DECL_NOT_REALLY_EXTERN (decl)
2665 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
2666 || (DECL_THIS_INLINE (decl) && ! flag_implement_inlines
2667 && !DECL_VINDEX (decl)));
2668
2669 /* Always make artificials weak. */
2670 if (DECL_ARTIFICIAL (decl) && flag_weak)
2671 comdat_linkage (decl);
2672 else
2673 maybe_make_one_only (decl);
2674 }
2675 else
2676 comdat_linkage (decl);
2677 }
2678 else if (DECL_TINFO_FN_P (decl))
2679 {
2680 tree ctype = TREE_TYPE (DECL_NAME (decl));
2681
2682 if (IS_AGGR_TYPE (ctype))
2683 import_export_class (ctype);
2684
2685 if (IS_AGGR_TYPE (ctype) && CLASSTYPE_INTERFACE_KNOWN (ctype)
2686 && TYPE_POLYMORPHIC_P (ctype)
2687 /* If -fno-rtti, we're not necessarily emitting this stuff with
2688 the class, so go ahead and emit it now. This can happen
2689 when a class is used in exception handling. */
2690 && flag_rtti
2691 /* If the type is a cv-qualified variant of a type, then we
2692 must emit the tinfo function in this translation unit
2693 since it will not be emitted when the vtable for the type
2694 is output (which is when the unqualified version is
2695 generated). */
2696 && same_type_p (ctype, TYPE_MAIN_VARIANT (ctype)))
2697 {
2698 DECL_NOT_REALLY_EXTERN (decl)
2699 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
2700 || (DECL_THIS_INLINE (decl) && ! flag_implement_inlines
2701 && !DECL_VINDEX (decl)));
2702
2703 /* Always make artificials weak. */
2704 if (flag_weak)
2705 comdat_linkage (decl);
2706 }
2707 else if (TYPE_BUILT_IN (ctype)
2708 && same_type_p (ctype, TYPE_MAIN_VARIANT (ctype)))
2709 DECL_NOT_REALLY_EXTERN (decl) = 0;
2710 else
2711 comdat_linkage (decl);
2712 }
2713 else
2714 comdat_linkage (decl);
2715
2716 DECL_INTERFACE_KNOWN (decl) = 1;
2717 }
2718
2719 tree
2720 build_cleanup (decl)
2721 tree decl;
2722 {
2723 tree temp;
2724 tree type = TREE_TYPE (decl);
2725
2726 if (TREE_CODE (type) == ARRAY_TYPE)
2727 temp = decl;
2728 else
2729 {
2730 mark_addressable (decl);
2731 temp = build1 (ADDR_EXPR, build_pointer_type (type), decl);
2732 }
2733 temp = build_delete (TREE_TYPE (temp), temp,
2734 integer_two_node,
2735 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
2736 return temp;
2737 }
2738
2739 extern int parse_time, varconst_time;
2740
2741 static tree
2742 get_sentry (base)
2743 tree base;
2744 {
2745 tree sname = get_id_2 ("__sn", base);
2746 /* For struct X foo __attribute__((weak)), there is a counter
2747 __snfoo. Since base is already an assembler name, sname should
2748 be globally unique */
2749 tree sentry = IDENTIFIER_GLOBAL_VALUE (sname);
2750 if (! sentry)
2751 {
2752 sentry = build_decl (VAR_DECL, sname, integer_type_node);
2753 TREE_PUBLIC (sentry) = 1;
2754 DECL_ARTIFICIAL (sentry) = 1;
2755 TREE_STATIC (sentry) = 1;
2756 TREE_USED (sentry) = 1;
2757 DECL_COMMON (sentry) = 1;
2758 pushdecl_top_level (sentry);
2759 cp_finish_decl (sentry, NULL_TREE, NULL_TREE, 0);
2760 }
2761 return sentry;
2762 }
2763
2764 /* Start the process of running a particular set of global constructors
2765 or destructors. Subroutine of do_[cd]tors. */
2766
2767 static tree
2768 start_objects (method_type, initp)
2769 int method_type, initp;
2770 {
2771 tree fnname;
2772 tree body;
2773 char type[10];
2774
2775 /* Make ctor or dtor function. METHOD_TYPE may be 'I' or 'D'. */
2776
2777 if (initp != DEFAULT_INIT_PRIORITY)
2778 {
2779 char joiner;
2780
2781 #ifdef JOINER
2782 joiner = JOINER;
2783 #else
2784 joiner = '_';
2785 #endif
2786
2787 sprintf (type, "%c%c%.5u", method_type, joiner, initp);
2788 }
2789 else
2790 sprintf (type, "%c", method_type);
2791
2792 fnname = get_file_function_name_long (type);
2793
2794 start_function (void_list_node,
2795 make_call_declarator (fnname, void_list_node, NULL_TREE,
2796 NULL_TREE),
2797 NULL_TREE, SF_DEFAULT);
2798
2799 #if defined(ASM_OUTPUT_CONSTRUCTOR) && defined(ASM_OUTPUT_DESTRUCTOR)
2800 /* It can be a static function as long as collect2 does not have
2801 to scan the object file to find its ctor/dtor routine. */
2802 TREE_PUBLIC (current_function_decl) = 0;
2803 #endif
2804
2805 /* Mark this declaration as used to avoid spurious warnings. */
2806 TREE_USED (current_function_decl) = 1;
2807
2808 /* Mark this function as a global constructor or destructor. */
2809 if (method_type == 'I')
2810 DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2811 else
2812 DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2813 GLOBAL_INIT_PRIORITY (current_function_decl) = initp;
2814
2815 body = begin_compound_stmt (/*has_no_scope=*/0);
2816
2817 /* We cannot allow these functions to be elided, even if they do not
2818 have external linkage. And, there's no point in deferring
2819 copmilation of thes functions; they're all going to have to be
2820 out anyhow. */
2821 current_function_cannot_inline
2822 = "static constructors and destructors cannot be inlined";
2823
2824 return body;
2825 }
2826
2827 /* Finish the process of running a particular set of global constructors
2828 or destructors. Subroutine of do_[cd]tors. */
2829
2830 static void
2831 finish_objects (method_type, initp, body)
2832 int method_type, initp;
2833 tree body;
2834 {
2835 char *fnname;
2836 tree fn;
2837
2838 /* Finish up. */
2839 finish_compound_stmt(/*has_no_scope=*/0, body);
2840 fn = finish_function (lineno, 0);
2841 expand_body (fn);
2842
2843 /* When only doing semantic analysis, and no RTL generation, we
2844 can't call functions that directly emit assembly code; there is
2845 no assembly file in which to put the code. */
2846 if (flag_syntax_only)
2847 return;
2848
2849 fnname = XSTR (XEXP (DECL_RTL (fn), 0), 0);
2850 if (initp == DEFAULT_INIT_PRIORITY)
2851 {
2852 if (method_type == 'I')
2853 assemble_constructor (fnname);
2854 else
2855 assemble_destructor (fnname);
2856 }
2857 #if defined (ASM_OUTPUT_SECTION_NAME) && defined (ASM_OUTPUT_CONSTRUCTOR)
2858 /* If we're using init priority we can't use assemble_*tor, but on ELF
2859 targets we can stick the references into named sections for GNU ld
2860 to collect. */
2861 else
2862 {
2863 char buf[15];
2864 sprintf (buf, ".%ctors.%.5u", method_type == 'I' ? 'c' : 'd',
2865 /* invert the numbering so the linker puts us in the proper
2866 order; constructors are run from right to left, and the
2867 linker sorts in increasing order. */
2868 MAX_INIT_PRIORITY - initp);
2869 named_section (NULL_TREE, buf, 0);
2870 assemble_integer (gen_rtx_SYMBOL_REF (Pmode, fnname),
2871 POINTER_SIZE / BITS_PER_UNIT, 1);
2872 }
2873 #endif
2874 }
2875
2876 /* The names of the parameters to the function created to handle
2877 initializations and destructions for objects with static storage
2878 duration. */
2879 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
2880 #define PRIORITY_IDENTIFIER "__priority"
2881
2882 /* The name of the function we create to handle initializations and
2883 destructions for objects with static storage duration. */
2884 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2885
2886 /* The declaration for the __INITIALIZE_P argument. */
2887 static tree initialize_p_decl;
2888
2889 /* The declaration for the __PRIORITY argument. */
2890 static tree priority_decl;
2891
2892 /* The declaration for the static storage duration function. */
2893 static tree ssdf_decl;
2894
2895 /* All the static storage duration functions created in this
2896 translation unit. */
2897 static varray_type ssdf_decls;
2898
2899 /* A map from priority levels to information about that priority
2900 level. There may be many such levels, so efficient lookup is
2901 important. */
2902 static splay_tree priority_info_map;
2903
2904 /* Begins the generation of the function that will handle all
2905 initialization and destruction of objects with static storage
2906 duration. The function generated takes two parameters of type
2907 `int': __INITIALIZE_P and __PRIORITY. If __INITIALIZE_P is
2908 non-zero, it performs initializations. Otherwise, it performs
2909 destructions. It only performs those initializations or
2910 destructions with the indicated __PRIORITY. The generated function
2911 returns no value.
2912
2913 It is assumed that this function will only be called once per
2914 translation unit. */
2915
2916 static tree
2917 start_static_storage_duration_function ()
2918 {
2919 static unsigned ssdf_number;
2920
2921 tree parm_types;
2922 tree type;
2923 tree body;
2924 char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2925
2926 /* Create the identifier for this function. It will be of the form
2927 SSDF_IDENTIFIER_<number>. */
2928 sprintf (id, "%s_%u", SSDF_IDENTIFIER, ssdf_number++);
2929 if (ssdf_number == 0)
2930 {
2931 /* Overflow occurred. That means there are at least 4 billion
2932 initialization functions. */
2933 sorry ("too many initialization functions required");
2934 my_friendly_abort (19990430);
2935 }
2936
2937 /* Create the parameters. */
2938 parm_types = void_list_node;
2939 parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2940 parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2941 type = build_function_type (void_type_node, parm_types);
2942
2943 /* Create the FUNCTION_DECL itself. */
2944 ssdf_decl = build_lang_decl (FUNCTION_DECL,
2945 get_identifier (id),
2946 type);
2947 TREE_PUBLIC (ssdf_decl) = 0;
2948 DECL_ARTIFICIAL (ssdf_decl) = 1;
2949
2950 /* Put this function in the list of functions to be called from the
2951 static constructors and destructors. */
2952 if (!ssdf_decls)
2953 {
2954 VARRAY_TREE_INIT (ssdf_decls, 32, "ssdf_decls");
2955
2956 /* Take this opportunity to initialize the map from priority
2957 numbers to information about that priority level. */
2958 priority_info_map = splay_tree_new (splay_tree_compare_ints,
2959 /*delete_key_fn=*/0,
2960 /*delete_value_fn=*/
2961 (splay_tree_delete_value_fn) &free);
2962
2963 /* We always need to generate functions for the
2964 DEFAULT_INIT_PRIORITY so enter it now. That way when we walk
2965 priorities later, we'll be sure to find the
2966 DEFAULT_INIT_PRIORITY. */
2967 get_priority_info (DEFAULT_INIT_PRIORITY);
2968 }
2969
2970 VARRAY_PUSH_TREE (ssdf_decls, ssdf_decl);
2971
2972 /* Create the argument list. */
2973 initialize_p_decl = build_decl (PARM_DECL,
2974 get_identifier (INITIALIZE_P_IDENTIFIER),
2975 integer_type_node);
2976 DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2977 DECL_ARG_TYPE (initialize_p_decl) = integer_type_node;
2978 TREE_USED (initialize_p_decl) = 1;
2979 priority_decl = build_decl (PARM_DECL, get_identifier (PRIORITY_IDENTIFIER),
2980 integer_type_node);
2981 DECL_CONTEXT (priority_decl) = ssdf_decl;
2982 DECL_ARG_TYPE (priority_decl) = integer_type_node;
2983 TREE_USED (priority_decl) = 1;
2984
2985 TREE_CHAIN (initialize_p_decl) = priority_decl;
2986 DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2987
2988 /* Put the function in the global scope. */
2989 pushdecl (ssdf_decl);
2990
2991 /* Start the function itself. This is equivalent to declarating the
2992 function as:
2993
2994 static void __ssdf (int __initialize_p, init __priority_p);
2995
2996 It is static because we only need to call this function from the
2997 various constructor and destructor functions for this module. */
2998 start_function (/*specs=*/NULL_TREE,
2999 ssdf_decl,
3000 /*attrs=*/NULL_TREE,
3001 SF_PRE_PARSED);
3002
3003 /* Set up the scope of the outermost block in the function. */
3004 body = begin_compound_stmt (/*has_no_scope=*/0);
3005
3006 /* This function must not be deferred because we are depending on
3007 its compilation to tell us what is TREE_SYMBOL_REFERENCED. */
3008 current_function_cannot_inline
3009 = "static storage duration functions cannot be inlined";
3010
3011 return body;
3012 }
3013
3014 /* Finish the generation of the function which performs initialization
3015 and destruction of objects with static storage duration. After
3016 this point, no more such objects can be created. */
3017
3018 static void
3019 finish_static_storage_duration_function (body)
3020 tree body;
3021 {
3022 /* Close out the function. */
3023 finish_compound_stmt (/*has_no_scope=*/0, body);
3024 expand_body (finish_function (lineno, 0));
3025 }
3026
3027 /* Return the information about the indicated PRIORITY level. If no
3028 code to handle this level has yet been generated, generate the
3029 appropriate prologue. */
3030
3031 static priority_info
3032 get_priority_info (priority)
3033 int priority;
3034 {
3035 priority_info pi;
3036 splay_tree_node n;
3037
3038 n = splay_tree_lookup (priority_info_map,
3039 (splay_tree_key) priority);
3040 if (!n)
3041 {
3042 /* Create a new priority information structure, and insert it
3043 into the map. */
3044 pi = (priority_info) xmalloc (sizeof (struct priority_info_s));
3045 pi->initializations_p = 0;
3046 pi->destructions_p = 0;
3047 splay_tree_insert (priority_info_map,
3048 (splay_tree_key) priority,
3049 (splay_tree_value) pi);
3050 }
3051 else
3052 pi = (priority_info) n->value;
3053
3054 return pi;
3055 }
3056
3057 /* Set up to handle the initialization or destruction of DECL. If
3058 INITP is non-zero, we are initializing the variable. Otherwise, we
3059 are destroying it. */
3060
3061 static tree
3062 start_static_initialization_or_destruction (decl, initp)
3063 tree decl;
3064 int initp;
3065 {
3066 tree sentry_if_stmt = NULL_TREE;
3067 int priority;
3068 tree cond;
3069 tree init_cond;
3070 priority_info pi;
3071
3072 /* Figure out the priority for this declaration. */
3073 priority = DECL_INIT_PRIORITY (decl);
3074 if (!priority)
3075 priority = DEFAULT_INIT_PRIORITY;
3076
3077 /* Remember that we had an initialization or finalization at this
3078 priority. */
3079 pi = get_priority_info (priority);
3080 if (initp)
3081 pi->initializations_p = 1;
3082 else
3083 pi->destructions_p = 1;
3084
3085 /* Trick the compiler into thinking we are at the file and line
3086 where DECL was declared so that error-messages make sense, and so
3087 that the debugger will show somewhat sensible file and line
3088 information. */
3089 input_filename = DECL_SOURCE_FILE (decl);
3090 lineno = DECL_SOURCE_LINE (decl);
3091
3092 /* Because of:
3093
3094 [class.access.spec]
3095
3096 Access control for implicit calls to the constructors,
3097 the conversion functions, or the destructor called to
3098 create and destroy a static data member is performed as
3099 if these calls appeared in the scope of the member's
3100 class.
3101
3102 we pretend we are in a static member function of the class of
3103 which the DECL is a member. */
3104 if (member_p (decl))
3105 {
3106 DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
3107 DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
3108 }
3109
3110 /* Conditionalize this initialization on being in the right priority
3111 and being initializing/finalizing appropriately. */
3112 sentry_if_stmt = begin_if_stmt ();
3113 cond = build_binary_op (EQ_EXPR,
3114 priority_decl,
3115 build_int_2 (priority, 0));
3116 init_cond = initp ? integer_one_node : integer_zero_node;
3117 init_cond = build_binary_op (EQ_EXPR,
3118 initialize_p_decl,
3119 init_cond);
3120 cond = build_binary_op (TRUTH_ANDIF_EXPR, cond, init_cond);
3121
3122 /* We need a sentry if this is an object with external linkage that
3123 might be initialized in more than one place. */
3124 if (TREE_PUBLIC (decl) && (DECL_COMMON (decl)
3125 || DECL_ONE_ONLY (decl)
3126 || DECL_WEAK (decl)))
3127 {
3128 tree sentry;
3129 tree sentry_cond;
3130
3131 sentry = get_sentry (DECL_ASSEMBLER_NAME (decl));
3132
3133 /* We do initializations only if the SENTRY is zero, i.e., if we
3134 are the first to initialize the variable. We do destructions
3135 only if the SENTRY is one, i.e., if we are the last to
3136 destroy the variable. */
3137 if (initp)
3138 sentry_cond = build_binary_op (EQ_EXPR,
3139 build_unary_op (PREINCREMENT_EXPR,
3140 sentry,
3141 /*noconvert=*/1),
3142 integer_one_node);
3143 else
3144 sentry_cond = build_binary_op (EQ_EXPR,
3145 build_unary_op (PREDECREMENT_EXPR,
3146 sentry,
3147 /*noconvert=*/1),
3148 integer_zero_node);
3149
3150 cond = build_binary_op (TRUTH_ANDIF_EXPR, cond, sentry_cond);
3151 }
3152
3153 finish_if_stmt_cond (cond, sentry_if_stmt);
3154
3155 return sentry_if_stmt;
3156 }
3157
3158 /* We've just finished generating code to do an initialization or
3159 finalization. SENTRY_IF_STMT is the if-statement we used to guard
3160 the initialization. */
3161
3162 static void
3163 finish_static_initialization_or_destruction (sentry_if_stmt)
3164 tree sentry_if_stmt;
3165 {
3166 finish_then_clause (sentry_if_stmt);
3167 finish_if_stmt ();
3168
3169 /* Now that we're done with DECL we don't need to pretend to be a
3170 member of its class any longer. */
3171 DECL_CONTEXT (current_function_decl) = NULL_TREE;
3172 DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
3173 }
3174
3175 /* Generate code to do the static initialization of DECL. The
3176 initialization is INIT. If DECL may be initialized more than once
3177 in different object files, SENTRY is the guard variable to
3178 check. PRIORITY is the priority for the initialization. */
3179
3180 static void
3181 do_static_initialization (decl, init)
3182 tree decl;
3183 tree init;
3184 {
3185 tree expr;
3186 tree sentry_if_stmt;
3187
3188 /* Set up for the initialization. */
3189 sentry_if_stmt
3190 = start_static_initialization_or_destruction (decl,
3191 /*initp=*/1);
3192
3193 /* Do the initialization itself. */
3194 if (IS_AGGR_TYPE (TREE_TYPE (decl))
3195 || TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
3196 expr = build_aggr_init (decl, init, 0);
3197 else if (TREE_CODE (init) == TREE_VEC)
3198 expr = build_vec_init (decl, TREE_VEC_ELT (init, 0),
3199 TREE_VEC_ELT (init, 1),
3200 TREE_VEC_ELT (init, 2), 0);
3201 else
3202 {
3203 expr = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
3204 TREE_SIDE_EFFECTS (expr) = 1;
3205 }
3206 finish_expr_stmt (expr);
3207
3208 /* If we're using __cxa_atexit, register a a function that calls the
3209 destructor for the object. */
3210 if (flag_use_cxa_atexit)
3211 register_dtor_fn (decl);
3212
3213 /* Finsh up. */
3214 finish_static_initialization_or_destruction (sentry_if_stmt);
3215 }
3216
3217 /* Generate code to do the static destruction of DECL. If DECL may be
3218 initialized more than once in different object files, SENTRY is the
3219 guard variable to check. PRIORITY is the priority for the
3220 destruction. */
3221
3222 static void
3223 do_static_destruction (decl)
3224 tree decl;
3225 {
3226 tree sentry_if_stmt;
3227
3228 /* If we're using __cxa_atexit, then destructors are registered
3229 immediately after objects are initialized. */
3230 my_friendly_assert (!flag_use_cxa_atexit, 20000121);
3231
3232 /* If we don't need a destructor, there's nothing to do. */
3233 if (!TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
3234 return;
3235
3236 /* Actually do the destruction. */
3237 sentry_if_stmt = start_static_initialization_or_destruction (decl,
3238 /*initp=*/0);
3239 finish_expr_stmt (build_cleanup (decl));
3240 finish_static_initialization_or_destruction (sentry_if_stmt);
3241 }
3242
3243 /* VARS is a list of variables with static storage duration which may
3244 need initialization and/or finalization. Remove those variables
3245 that don't really need to be initialized or finalized, and return
3246 the resulting list. The order in which the variables appear in
3247 VARS is in reverse order of the order in which they should actually
3248 be initialized. The list we return is in the unreversed order;
3249 i.e., the first variable should be initialized first. */
3250
3251 static tree
3252 prune_vars_needing_no_initialization (vars)
3253 tree vars;
3254 {
3255 tree var;
3256 tree result;
3257
3258 for (var = vars, result = NULL_TREE;
3259 var;
3260 var = TREE_CHAIN (var))
3261 {
3262 tree decl = TREE_VALUE (var);
3263 tree init = TREE_PURPOSE (var);
3264
3265 /* Deal gracefully with error. */
3266 if (decl == error_mark_node)
3267 continue;
3268
3269 /* The only things that can be initialized are variables. */
3270 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 19990420);
3271
3272 /* If this object is not defined, we don't need to do anything
3273 here. */
3274 if (DECL_EXTERNAL (decl))
3275 continue;
3276
3277 /* Also, if the initializer already contains errors, we can bail
3278 out now. */
3279 if (init && TREE_CODE (init) == TREE_LIST
3280 && value_member (error_mark_node, init))
3281 continue;
3282
3283 /* This variable is going to need initialization and/or
3284 finalization, so we add it to the list. */
3285 result = tree_cons (init, decl, result);
3286 }
3287
3288 return result;
3289 }
3290
3291 /* Make sure we have told the back end about all the variables in
3292 VARS. */
3293
3294 static void
3295 write_out_vars (vars)
3296 tree vars;
3297 {
3298 tree v;
3299
3300 for (v = vars; v; v = TREE_CHAIN (v))
3301 if (! TREE_ASM_WRITTEN (TREE_VALUE (v)))
3302 rest_of_decl_compilation (TREE_VALUE (v), 0, 1, 1);
3303 }
3304
3305 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
3306 (otherwise) that will initialize all gobal objects with static
3307 storage duration having the indicated PRIORITY. */
3308
3309 static void
3310 generate_ctor_or_dtor_function (constructor_p, priority)
3311 int constructor_p;
3312 int priority;
3313 {
3314 char function_key;
3315 tree arguments;
3316 tree body;
3317 size_t i;
3318
3319 /* We use `I' to indicate initialization and `D' to indicate
3320 destruction. */
3321 if (constructor_p)
3322 function_key = 'I';
3323 else
3324 function_key = 'D';
3325
3326 /* Begin the function. */
3327 body = start_objects (function_key, priority);
3328
3329 /* Call the static storage duration function with appropriate
3330 arguments. */
3331 for (i = 0; i < ssdf_decls->elements_used; ++i)
3332 {
3333 arguments = tree_cons (NULL_TREE, build_int_2 (priority, 0),
3334 NULL_TREE);
3335 arguments = tree_cons (NULL_TREE, build_int_2 (constructor_p, 0),
3336 arguments);
3337 finish_expr_stmt (build_function_call (VARRAY_TREE (ssdf_decls, i),
3338 arguments));
3339 }
3340
3341 /* If we're generating code for the DEFAULT_INIT_PRIORITY, throw in
3342 calls to any functions marked with attributes indicating that
3343 they should be called at initialization- or destruction-time. */
3344 if (priority == DEFAULT_INIT_PRIORITY)
3345 {
3346 tree fns;
3347
3348 for (fns = constructor_p ? static_ctors : static_dtors;
3349 fns;
3350 fns = TREE_CHAIN (fns))
3351 finish_expr_stmt (build_function_call (TREE_VALUE (fns), NULL_TREE));
3352 }
3353
3354 /* Close out the function. */
3355 finish_objects (function_key, priority, body);
3356 }
3357
3358 /* Generate constructor and destructor functions for the priority
3359 indicated by N. */
3360
3361 static int
3362 generate_ctor_and_dtor_functions_for_priority (n, data)
3363 splay_tree_node n;
3364 void *data ATTRIBUTE_UNUSED;
3365 {
3366 int priority = (int) n->key;
3367 priority_info pi = (priority_info) n->value;
3368
3369 /* Generate the functions themselves, but only if they are really
3370 needed. */
3371 if (pi->initializations_p
3372 || (priority == DEFAULT_INIT_PRIORITY && static_ctors))
3373 generate_ctor_or_dtor_function (/*constructor_p=*/1,
3374 priority);
3375 if (pi->destructions_p
3376 || (priority == DEFAULT_INIT_PRIORITY && static_dtors))
3377 generate_ctor_or_dtor_function (/*constructor_p=*/0,
3378 priority);
3379
3380 /* Keep iterating. */
3381 return 0;
3382 }
3383
3384 /* This routine is called from the last rule in yyparse ().
3385 Its job is to create all the code needed to initialize and
3386 destroy the global aggregates. We do the destruction
3387 first, since that way we only need to reverse the decls once. */
3388
3389 void
3390 finish_file ()
3391 {
3392 extern int lineno;
3393 int start_time, this_time;
3394 tree vars;
3395 int reconsider;
3396 size_t i;
3397
3398 at_eof = 1;
3399
3400 /* Bad parse errors. Just forget about it. */
3401 if (! global_bindings_p () || current_class_type || decl_namespace_list)
3402 return;
3403
3404 start_time = get_run_time ();
3405
3406 /* Otherwise, GDB can get confused, because in only knows
3407 about source for LINENO-1 lines. */
3408 lineno -= 1;
3409
3410 interface_unknown = 1;
3411 interface_only = 0;
3412
3413 /* We now have to write out all the stuff we put off writing out.
3414 These include:
3415
3416 o Template specializations that we have not yet instantiated,
3417 but which are needed.
3418 o Initialization and destruction for non-local objects with
3419 static storage duration. (Local objects with static storage
3420 duration are initialized when their scope is first entered,
3421 and are cleaned up via atexit.)
3422 o Virtual function tables.
3423
3424 All of these may cause others to be needed. For example,
3425 instantiating one function may cause another to be needed, and
3426 generating the intiailzer for an object may cause templates to be
3427 instantiated, etc., etc. */
3428
3429 this_time = get_run_time ();
3430 parse_time -= this_time - start_time;
3431 varconst_time += this_time - start_time;
3432 start_time = get_run_time ();
3433
3434 if (new_abi_rtti_p ())
3435 emit_support_tinfos ();
3436
3437 do
3438 {
3439 reconsider = 0;
3440
3441 /* If there are templates that we've put off instantiating, do
3442 them now. */
3443 instantiate_pending_templates ();
3444
3445 /* Write out virtual tables as required. Note that writing out
3446 the virtual table for a template class may cause the
3447 instantiation of members of that class. */
3448 if (walk_globals (vtable_decl_p,
3449 finish_vtable_vardecl,
3450 /*data=*/0))
3451 reconsider = 1;
3452
3453 /* Write out needed type info variables. Writing out one variable
3454 might cause others to be needed. */
3455 if (new_abi_rtti_p ()
3456 && walk_globals (tinfo_decl_p, emit_tinfo_decl, /*data=*/0))
3457 reconsider = 1;
3458
3459 /* The list of objects with static storage duration is built up
3460 in reverse order. We clear STATIC_AGGREGATES so that any new
3461 aggregates added during the initialization of these will be
3462 initialized in the correct order when we next come around the
3463 loop. */
3464 vars = prune_vars_needing_no_initialization (static_aggregates);
3465 static_aggregates = NULL_TREE;
3466
3467 if (vars)
3468 {
3469 tree v;
3470
3471 /* We need to start a new initialization function each time
3472 through the loop. That's because we need to know which
3473 vtables have been referenced, and TREE_SYMBOL_REFERENCED
3474 isn't computed until a function is finished, and written
3475 out. That's a deficiency in the back-end. When this is
3476 fixed, these initialization functions could all become
3477 inline, with resulting performance improvements. */
3478 tree ssdf_body = start_static_storage_duration_function ();
3479
3480 /* Make sure the back end knows about all the variables. */
3481 write_out_vars (vars);
3482
3483 /* First generate code to do all the initializations. */
3484 for (v = vars; v; v = TREE_CHAIN (v))
3485 do_static_initialization (TREE_VALUE (v),
3486 TREE_PURPOSE (v));
3487
3488 /* Then, generate code to do all the destructions. Do these
3489 in reverse order so that the most recently constructed
3490 variable is the first destroyed. If we're using
3491 __cxa_atexit, then we don't need to do this; functions
3492 we're registered at initialization time to destroy the
3493 local statics. */
3494 if (!flag_use_cxa_atexit)
3495 {
3496 vars = nreverse (vars);
3497 for (v = vars; v; v = TREE_CHAIN (v))
3498 do_static_destruction (TREE_VALUE (v));
3499 }
3500 else
3501 vars = NULL_TREE;
3502
3503 /* Finish up the static storage duration function for this
3504 round. */
3505 finish_static_storage_duration_function (ssdf_body);
3506
3507 /* All those initializations and finalizations might cause
3508 us to need more inline functions, more template
3509 instantiations, etc. */
3510 reconsider = 1;
3511 }
3512
3513 /* Go through the various inline functions, and see if any need
3514 synthesizing. */
3515 for (i = 0; i < saved_inlines_used; ++i)
3516 {
3517 tree decl = VARRAY_TREE (saved_inlines, i);
3518 import_export_decl (decl);
3519 if (DECL_ARTIFICIAL (decl) && ! DECL_INITIAL (decl)
3520 && TREE_USED (decl)
3521 && (! DECL_REALLY_EXTERN (decl) || DECL_INLINE (decl)))
3522 {
3523 /* Even though we're already at the top-level, we push
3524 there again. That way, when we pop back a few lines
3525 hence, all of our state is restored. Otherwise,
3526 finish_function doesn't clean things up, and we end
3527 up with CURRENT_FUNCTION_DECL set. */
3528 push_to_top_level ();
3529 if (DECL_TINFO_FN_P (decl))
3530 synthesize_tinfo_fn (decl);
3531 else
3532 synthesize_method (decl);
3533 pop_from_top_level ();
3534 reconsider = 1;
3535 }
3536 }
3537
3538 /* Mark all functions that might deal with exception-handling as
3539 referenced. */
3540 mark_all_runtime_matches ();
3541
3542 /* We lie to the back-end, pretending that some functions are
3543 not defined when they really are. This keeps these functions
3544 from being put out unncessarily. But, we must stop lying
3545 when the functions are referenced, or if they are not comdat
3546 since they need to be put out now. */
3547 for (i = 0; i < saved_inlines_used; ++i)
3548 {
3549 tree decl = VARRAY_TREE (saved_inlines, i);
3550
3551 if (DECL_NOT_REALLY_EXTERN (decl)
3552 && DECL_INITIAL (decl)
3553 && DECL_NEEDED_P (decl))
3554 DECL_EXTERNAL (decl) = 0;
3555
3556 /* If we're going to need to write this function out, and
3557 there's already a body for it, create RTL for it now.
3558 (There might be no body if this is a method we haven't
3559 gotten around to synthesizing yet.) */
3560 if (!DECL_EXTERNAL (decl)
3561 && DECL_NEEDED_P (decl)
3562 && DECL_SAVED_TREE (decl)
3563 && !DECL_SAVED_INSNS (decl)
3564 && !TREE_ASM_WRITTEN (decl))
3565 {
3566 int saved_not_really_extern;
3567
3568 /* When we call finish_function in expand_body, it will
3569 try to reset DECL_NOT_REALLY_EXTERN so we save and
3570 restore it here. */
3571 saved_not_really_extern = DECL_NOT_REALLY_EXTERN (decl);
3572 /* Generate RTL for this function now that we know we
3573 need it. */
3574 expand_body (decl);
3575 /* Undo the damage done by finish_function. */
3576 DECL_EXTERNAL (decl) = 0;
3577 DECL_NOT_REALLY_EXTERN (decl) = saved_not_really_extern;
3578 /* If we're compiling -fsyntax-only pretend that this
3579 function has been written out so that we don't try to
3580 expand it again. */
3581 if (flag_syntax_only)
3582 TREE_ASM_WRITTEN (decl) = 1;
3583 reconsider = 1;
3584 }
3585 }
3586
3587 if (saved_inlines_used
3588 && wrapup_global_declarations (&VARRAY_TREE (saved_inlines, 0),
3589 saved_inlines_used))
3590 reconsider = 1;
3591 if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
3592 reconsider = 1;
3593
3594 /* Static data members are just like namespace-scope globals. */
3595 for (i = 0; i < pending_statics_used; ++i)
3596 {
3597 tree decl = VARRAY_TREE (pending_statics, i);
3598 if (TREE_ASM_WRITTEN (decl))
3599 continue;
3600 import_export_decl (decl);
3601 if (DECL_NOT_REALLY_EXTERN (decl) && ! DECL_IN_AGGR_P (decl))
3602 DECL_EXTERNAL (decl) = 0;
3603 }
3604 if (pending_statics
3605 && wrapup_global_declarations (&VARRAY_TREE (pending_statics, 0),
3606 pending_statics_used))
3607 reconsider = 1;
3608 }
3609 while (reconsider);
3610
3611 /* We give C linkage to static constructors and destructors. */
3612 push_lang_context (lang_name_c);
3613
3614 /* Generate initialization and destruction functions for all
3615 priorities for which they are required. */
3616 if (priority_info_map)
3617 splay_tree_foreach (priority_info_map,
3618 generate_ctor_and_dtor_functions_for_priority,
3619 /*data=*/0);
3620
3621 /* We're done with the splay-tree now. */
3622 if (priority_info_map)
3623 splay_tree_delete (priority_info_map);
3624
3625 /* We're done with static constructors, so we can go back to "C++"
3626 linkage now. */
3627 pop_lang_context ();
3628
3629 /* Now delete from the chain of variables all virtual function tables.
3630 We output them all ourselves, because each will be treated
3631 specially. We don't do this if we're just doing semantic
3632 analysis, and not code-generation. */
3633 if (!flag_syntax_only)
3634 walk_globals (vtable_decl_p, prune_vtable_vardecl, /*data=*/0);
3635
3636 /* Now, issue warnings about static, but not defined, functions,
3637 etc., and emit debugging information. */
3638 walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
3639 if (pending_statics)
3640 check_global_declarations (&VARRAY_TREE (pending_statics, 0),
3641 pending_statics_used);
3642
3643 finish_repo ();
3644
3645 /* The entire file is now complete. If requested, dump everything
3646 to a file. */
3647 if (flag_dump_translation_unit)
3648 dump_node_to_file (global_namespace, flag_dump_translation_unit);
3649
3650 /* If there's some tool that wants to examine the entire translation
3651 unit, let it do so now. */
3652 if (back_end_hook)
3653 (*back_end_hook) (global_namespace);
3654
3655 this_time = get_run_time ();
3656 parse_time -= this_time - start_time;
3657 varconst_time += this_time - start_time;
3658
3659 if (flag_detailed_statistics)
3660 {
3661 dump_tree_statistics ();
3662 dump_time_statistics ();
3663 }
3664 }
3665
3666 /* This is something of the form 'A()()()()()+1' that has turned out to be an
3667 expr. Since it was parsed like a type, we need to wade through and fix
3668 that. Unfortunately, since operator() is left-associative, we can't use
3669 tail recursion. In the above example, TYPE is `A', and DECL is
3670 `()()()()()'.
3671
3672 Maybe this shouldn't be recursive, but how often will it actually be
3673 used? (jason) */
3674
3675 tree
3676 reparse_absdcl_as_expr (type, decl)
3677 tree type, decl;
3678 {
3679 /* do build_functional_cast (type, NULL_TREE) at bottom */
3680 if (TREE_OPERAND (decl, 0) == NULL_TREE)
3681 return build_functional_cast (type, NULL_TREE);
3682
3683 /* recurse */
3684 decl = reparse_absdcl_as_expr (type, TREE_OPERAND (decl, 0));
3685
3686 decl = build_x_function_call (decl, NULL_TREE, current_class_ref);
3687
3688 if (TREE_CODE (decl) == CALL_EXPR
3689 && (! TREE_TYPE (decl)
3690 || TREE_CODE (TREE_TYPE (decl)) != VOID_TYPE))
3691 decl = require_complete_type (decl);
3692
3693 return decl;
3694 }
3695
3696 /* This is something of the form `int ((int)(int)(int)1)' that has turned
3697 out to be an expr. Since it was parsed like a type, we need to wade
3698 through and fix that. Since casts are right-associative, we are
3699 reversing the order, so we don't have to recurse.
3700
3701 In the above example, DECL is the `(int)(int)(int)', and EXPR is the
3702 `1'. */
3703
3704 tree
3705 reparse_absdcl_as_casts (decl, expr)
3706 tree decl, expr;
3707 {
3708 tree type;
3709
3710 if (TREE_CODE (expr) == CONSTRUCTOR
3711 && TREE_TYPE (expr) == 0)
3712 {
3713 type = groktypename (TREE_VALUE (CALL_DECLARATOR_PARMS (decl)));
3714 decl = TREE_OPERAND (decl, 0);
3715
3716 expr = digest_init (type, expr, (tree *) 0);
3717 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
3718 {
3719 int failure = complete_array_type (type, expr, 1);
3720 if (failure)
3721 my_friendly_abort (78);
3722 }
3723 }
3724
3725 while (decl)
3726 {
3727 type = groktypename (TREE_VALUE (CALL_DECLARATOR_PARMS (decl)));
3728 decl = TREE_OPERAND (decl, 0);
3729 expr = build_c_cast (type, expr);
3730 }
3731
3732 if (warn_old_style_cast && ! in_system_header
3733 && current_lang_name != lang_name_c)
3734 warning ("use of old-style cast");
3735
3736 return expr;
3737 }
3738
3739 /* Given plain tree nodes for an expression, build up the full semantics. */
3740
3741 tree
3742 build_expr_from_tree (t)
3743 tree t;
3744 {
3745 if (t == NULL_TREE || t == error_mark_node)
3746 return t;
3747
3748 switch (TREE_CODE (t))
3749 {
3750 case IDENTIFIER_NODE:
3751 return do_identifier (t, 0, NULL_TREE);
3752
3753 case LOOKUP_EXPR:
3754 if (LOOKUP_EXPR_GLOBAL (t))
3755 return do_scoped_id (TREE_OPERAND (t, 0), 0);
3756 else
3757 return do_identifier (TREE_OPERAND (t, 0), 0, NULL_TREE);
3758
3759 case TEMPLATE_ID_EXPR:
3760 return (lookup_template_function
3761 (build_expr_from_tree (TREE_OPERAND (t, 0)),
3762 build_expr_from_tree (TREE_OPERAND (t, 1))));
3763
3764 case INDIRECT_REF:
3765 return build_x_indirect_ref
3766 (build_expr_from_tree (TREE_OPERAND (t, 0)), "unary *");
3767
3768 case CAST_EXPR:
3769 return build_functional_cast
3770 (TREE_TYPE (t), build_expr_from_tree (TREE_OPERAND (t, 0)));
3771
3772 case REINTERPRET_CAST_EXPR:
3773 return build_reinterpret_cast
3774 (TREE_TYPE (t), build_expr_from_tree (TREE_OPERAND (t, 0)));
3775
3776 case CONST_CAST_EXPR:
3777 return build_const_cast
3778 (TREE_TYPE (t), build_expr_from_tree (TREE_OPERAND (t, 0)));
3779
3780 case DYNAMIC_CAST_EXPR:
3781 return build_dynamic_cast
3782 (TREE_TYPE (t), build_expr_from_tree (TREE_OPERAND (t, 0)));
3783
3784 case STATIC_CAST_EXPR:
3785 return build_static_cast
3786 (TREE_TYPE (t), build_expr_from_tree (TREE_OPERAND (t, 0)));
3787
3788 case PREDECREMENT_EXPR:
3789 case PREINCREMENT_EXPR:
3790 case POSTDECREMENT_EXPR:
3791 case POSTINCREMENT_EXPR:
3792 case NEGATE_EXPR:
3793 case BIT_NOT_EXPR:
3794 case ABS_EXPR:
3795 case TRUTH_NOT_EXPR:
3796 case ADDR_EXPR:
3797 case CONVERT_EXPR: /* Unary + */
3798 case REALPART_EXPR:
3799 case IMAGPART_EXPR:
3800 if (TREE_TYPE (t))
3801 return t;
3802 return build_x_unary_op (TREE_CODE (t),
3803 build_expr_from_tree (TREE_OPERAND (t, 0)));
3804
3805 case PLUS_EXPR:
3806 case MINUS_EXPR:
3807 case MULT_EXPR:
3808 case TRUNC_DIV_EXPR:
3809 case CEIL_DIV_EXPR:
3810 case FLOOR_DIV_EXPR:
3811 case ROUND_DIV_EXPR:
3812 case EXACT_DIV_EXPR:
3813 case BIT_AND_EXPR:
3814 case BIT_ANDTC_EXPR:
3815 case BIT_IOR_EXPR:
3816 case BIT_XOR_EXPR:
3817 case TRUNC_MOD_EXPR:
3818 case FLOOR_MOD_EXPR:
3819 case TRUTH_ANDIF_EXPR:
3820 case TRUTH_ORIF_EXPR:
3821 case TRUTH_AND_EXPR:
3822 case TRUTH_OR_EXPR:
3823 case RSHIFT_EXPR:
3824 case LSHIFT_EXPR:
3825 case RROTATE_EXPR:
3826 case LROTATE_EXPR:
3827 case EQ_EXPR:
3828 case NE_EXPR:
3829 case MAX_EXPR:
3830 case MIN_EXPR:
3831 case LE_EXPR:
3832 case GE_EXPR:
3833 case LT_EXPR:
3834 case GT_EXPR:
3835 case MEMBER_REF:
3836 return build_x_binary_op
3837 (TREE_CODE (t),
3838 build_expr_from_tree (TREE_OPERAND (t, 0)),
3839 build_expr_from_tree (TREE_OPERAND (t, 1)));
3840
3841 case DOTSTAR_EXPR:
3842 return build_m_component_ref
3843 (build_expr_from_tree (TREE_OPERAND (t, 0)),
3844 build_expr_from_tree (TREE_OPERAND (t, 1)));
3845
3846 case SCOPE_REF:
3847 return build_offset_ref (TREE_OPERAND (t, 0), TREE_OPERAND (t, 1));
3848
3849 case ARRAY_REF:
3850 if (TREE_OPERAND (t, 0) == NULL_TREE)
3851 /* new-type-id */
3852 return build_parse_node (ARRAY_REF, NULL_TREE,
3853 build_expr_from_tree (TREE_OPERAND (t, 1)));
3854 return grok_array_decl (build_expr_from_tree (TREE_OPERAND (t, 0)),
3855 build_expr_from_tree (TREE_OPERAND (t, 1)));
3856
3857 case SIZEOF_EXPR:
3858 case ALIGNOF_EXPR:
3859 {
3860 tree r = build_expr_from_tree (TREE_OPERAND (t, 0));
3861 if (TREE_CODE_CLASS (TREE_CODE (r)) != 't')
3862 r = TREE_TYPE (r);
3863 return TREE_CODE (t) == SIZEOF_EXPR ? c_sizeof (r) : c_alignof (r);
3864 }
3865
3866 case MODOP_EXPR:
3867 return build_x_modify_expr
3868 (build_expr_from_tree (TREE_OPERAND (t, 0)),
3869 TREE_CODE (TREE_OPERAND (t, 1)),
3870 build_expr_from_tree (TREE_OPERAND (t, 2)));
3871
3872 case ARROW_EXPR:
3873 return build_x_arrow
3874 (build_expr_from_tree (TREE_OPERAND (t, 0)));
3875
3876 case NEW_EXPR:
3877 return build_new
3878 (build_expr_from_tree (TREE_OPERAND (t, 0)),
3879 build_expr_from_tree (TREE_OPERAND (t, 1)),
3880 build_expr_from_tree (TREE_OPERAND (t, 2)),
3881 NEW_EXPR_USE_GLOBAL (t));
3882
3883 case DELETE_EXPR:
3884 return delete_sanity
3885 (build_expr_from_tree (TREE_OPERAND (t, 0)),
3886 build_expr_from_tree (TREE_OPERAND (t, 1)),
3887 DELETE_EXPR_USE_VEC (t), DELETE_EXPR_USE_GLOBAL (t));
3888
3889 case COMPOUND_EXPR:
3890 if (TREE_OPERAND (t, 1) == NULL_TREE)
3891 return build_x_compound_expr
3892 (build_expr_from_tree (TREE_OPERAND (t, 0)));
3893 else
3894 my_friendly_abort (42);
3895
3896 case METHOD_CALL_EXPR:
3897 if (TREE_CODE (TREE_OPERAND (t, 0)) == SCOPE_REF)
3898 {
3899 tree ref = TREE_OPERAND (t, 0);
3900 return build_scoped_method_call
3901 (build_expr_from_tree (TREE_OPERAND (t, 1)),
3902 build_expr_from_tree (TREE_OPERAND (ref, 0)),
3903 TREE_OPERAND (ref, 1),
3904 build_expr_from_tree (TREE_OPERAND (t, 2)));
3905 }
3906 else
3907 {
3908 tree fn = TREE_OPERAND (t, 0);
3909
3910 /* We can get a TEMPLATE_ID_EXPR here on code like:
3911
3912 x->f<2>();
3913
3914 so we must resolve that. However, we can also get things
3915 like a BIT_NOT_EXPR here, when referring to a destructor,
3916 and things like that are not correctly resolved by
3917 build_expr_from_tree. So, just use build_expr_from_tree
3918 when we really need it. */
3919 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3920 fn = lookup_template_function
3921 (TREE_OPERAND (fn, 0),
3922 build_expr_from_tree (TREE_OPERAND (fn, 1)));
3923
3924 return build_method_call
3925 (build_expr_from_tree (TREE_OPERAND (t, 1)),
3926 fn,
3927 build_expr_from_tree (TREE_OPERAND (t, 2)),
3928 NULL_TREE, LOOKUP_NORMAL);
3929 }
3930
3931 case CALL_EXPR:
3932 if (TREE_CODE (TREE_OPERAND (t, 0)) == SCOPE_REF)
3933 {
3934 tree ref = TREE_OPERAND (t, 0);
3935 return build_member_call
3936 (build_expr_from_tree (TREE_OPERAND (ref, 0)),
3937 TREE_OPERAND (ref, 1),
3938 build_expr_from_tree (TREE_OPERAND (t, 1)));
3939 }
3940 else
3941 {
3942 tree name = TREE_OPERAND (t, 0);
3943 tree id;
3944 tree args = build_expr_from_tree (TREE_OPERAND (t, 1));
3945 if (args != NULL_TREE && TREE_CODE (name) == LOOKUP_EXPR
3946 && !LOOKUP_EXPR_GLOBAL (name)
3947 && TREE_CODE ((id = TREE_OPERAND (name, 0))) == IDENTIFIER_NODE
3948 && (!current_class_type
3949 || !lookup_member (current_class_type, id, 0, 0)))
3950 {
3951 /* Do Koenig lookup if there are no class members. */
3952 name = do_identifier (id, 0, args);
3953 }
3954 else if (TREE_CODE (name) == TEMPLATE_ID_EXPR
3955 || ! really_overloaded_fn (name))
3956 name = build_expr_from_tree (name);
3957 return build_x_function_call (name, args, current_class_ref);
3958 }
3959
3960 case COND_EXPR:
3961 return build_x_conditional_expr
3962 (build_expr_from_tree (TREE_OPERAND (t, 0)),
3963 build_expr_from_tree (TREE_OPERAND (t, 1)),
3964 build_expr_from_tree (TREE_OPERAND (t, 2)));
3965
3966 case PSEUDO_DTOR_EXPR:
3967 return (finish_pseudo_destructor_call_expr
3968 (build_expr_from_tree (TREE_OPERAND (t, 0)),
3969 build_expr_from_tree (TREE_OPERAND (t, 1)),
3970 build_expr_from_tree (TREE_OPERAND (t, 2))));
3971
3972 case TREE_LIST:
3973 {
3974 tree purpose, value, chain;
3975
3976 if (t == void_list_node)
3977 return t;
3978
3979 purpose = TREE_PURPOSE (t);
3980 if (purpose)
3981 purpose = build_expr_from_tree (purpose);
3982 value = TREE_VALUE (t);
3983 if (value)
3984 value = build_expr_from_tree (value);
3985 chain = TREE_CHAIN (t);
3986 if (chain && chain != void_type_node)
3987 chain = build_expr_from_tree (chain);
3988 return tree_cons (purpose, value, chain);
3989 }
3990
3991 case COMPONENT_REF:
3992 {
3993 tree object = build_expr_from_tree (TREE_OPERAND (t, 0));
3994 tree field = TREE_OPERAND (t, 1);
3995
3996 /* We use a COMPONENT_REF to indicate things of the form `x.b'
3997 and `x.A::b'. We must distinguish between those cases
3998 here. */
3999 if (TREE_CODE (field) == SCOPE_REF)
4000 return build_object_ref (object,
4001 TREE_OPERAND (field, 0),
4002 TREE_OPERAND (field, 1));
4003 else
4004 return build_x_component_ref (object, field,
4005 NULL_TREE, 1);
4006 }
4007
4008 case THROW_EXPR:
4009 return build_throw (build_expr_from_tree (TREE_OPERAND (t, 0)));
4010
4011 case CONSTRUCTOR:
4012 {
4013 tree r;
4014
4015 /* digest_init will do the wrong thing if we let it. */
4016 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
4017 return t;
4018
4019 r = build_nt (CONSTRUCTOR, NULL_TREE,
4020 build_expr_from_tree (CONSTRUCTOR_ELTS (t)));
4021 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
4022
4023 if (TREE_TYPE (t))
4024 return digest_init (TREE_TYPE (t), r, 0);
4025 return r;
4026 }
4027
4028 case TYPEID_EXPR:
4029 if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t, 0))) == 't')
4030 return get_typeid (TREE_OPERAND (t, 0));
4031 return build_typeid (build_expr_from_tree (TREE_OPERAND (t, 0)));
4032
4033 case VAR_DECL:
4034 return convert_from_reference (t);
4035
4036 case VA_ARG_EXPR:
4037 return build_va_arg (build_expr_from_tree (TREE_OPERAND (t, 0)),
4038 TREE_TYPE (t));
4039
4040 default:
4041 return t;
4042 }
4043 }
4044
4045 /* This is something of the form `int (*a)++' that has turned out to be an
4046 expr. It was only converted into parse nodes, so we need to go through
4047 and build up the semantics. Most of the work is done by
4048 build_expr_from_tree, above.
4049
4050 In the above example, TYPE is `int' and DECL is `*a'. */
4051
4052 tree
4053 reparse_decl_as_expr (type, decl)
4054 tree type, decl;
4055 {
4056 decl = build_expr_from_tree (decl);
4057 if (type)
4058 return build_functional_cast (type, build_tree_list (NULL_TREE, decl));
4059 else
4060 return decl;
4061 }
4062
4063 /* This is something of the form `int (*a)' that has turned out to be a
4064 decl. It was only converted into parse nodes, so we need to do the
4065 checking that make_{pointer,reference}_declarator do. */
4066
4067 tree
4068 finish_decl_parsing (decl)
4069 tree decl;
4070 {
4071 extern int current_class_depth;
4072
4073 switch (TREE_CODE (decl))
4074 {
4075 case IDENTIFIER_NODE:
4076 return decl;
4077 case INDIRECT_REF:
4078 return make_pointer_declarator
4079 (NULL_TREE, finish_decl_parsing (TREE_OPERAND (decl, 0)));
4080 case ADDR_EXPR:
4081 return make_reference_declarator
4082 (NULL_TREE, finish_decl_parsing (TREE_OPERAND (decl, 0)));
4083 case BIT_NOT_EXPR:
4084 TREE_OPERAND (decl, 0) = finish_decl_parsing (TREE_OPERAND (decl, 0));
4085 return decl;
4086 case SCOPE_REF:
4087 push_nested_class (TREE_TYPE (TREE_OPERAND (decl, 0)), 3);
4088 TREE_COMPLEXITY (decl) = current_class_depth;
4089 return decl;
4090 case ARRAY_REF:
4091 TREE_OPERAND (decl, 0) = finish_decl_parsing (TREE_OPERAND (decl, 0));
4092 return decl;
4093 case TREE_LIST:
4094 /* For attribute handling. */
4095 TREE_VALUE (decl) = finish_decl_parsing (TREE_VALUE (decl));
4096 return decl;
4097 default:
4098 my_friendly_abort (5);
4099 return NULL_TREE;
4100 }
4101 }
4102
4103 tree
4104 check_cp_case_value (value)
4105 tree value;
4106 {
4107 if (value == NULL_TREE)
4108 return value;
4109
4110 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4111 STRIP_TYPE_NOPS (value);
4112
4113 if (TREE_READONLY_DECL_P (value))
4114 {
4115 value = decl_constant_value (value);
4116 STRIP_TYPE_NOPS (value);
4117 }
4118 value = fold (value);
4119
4120 if (TREE_CODE (value) != INTEGER_CST
4121 && value != error_mark_node)
4122 {
4123 cp_error ("case label `%E' does not reduce to an integer constant",
4124 value);
4125 value = error_mark_node;
4126 }
4127 else
4128 /* Promote char or short to int. */
4129 value = default_conversion (value);
4130
4131 constant_expression_warning (value);
4132
4133 return value;
4134 }
4135
4136 /* Return 1 if root encloses child. */
4137
4138 static int
4139 is_namespace_ancestor (root, child)
4140 tree root, child;
4141 {
4142 if (root == child)
4143 return 1;
4144 if (root == global_namespace)
4145 return 1;
4146 if (child == global_namespace)
4147 return 0;
4148 return is_namespace_ancestor (root, CP_DECL_CONTEXT (child));
4149 }
4150
4151
4152 /* Return the namespace that is the common ancestor
4153 of two given namespaces. */
4154
4155 tree
4156 namespace_ancestor (ns1, ns2)
4157 tree ns1, ns2;
4158 {
4159 if (is_namespace_ancestor (ns1, ns2))
4160 return ns1;
4161 return namespace_ancestor (CP_DECL_CONTEXT (ns1), ns2);
4162 }
4163
4164 /* Insert used into the using list of user. Set indirect_flag if this
4165 directive is not directly from the source. Also find the common
4166 ancestor and let our users know about the new namespace */
4167 static void
4168 add_using_namespace (user, used, indirect)
4169 tree user;
4170 tree used;
4171 int indirect;
4172 {
4173 tree t;
4174 /* Using oneself is a no-op. */
4175 if (user == used)
4176 return;
4177 my_friendly_assert (TREE_CODE (user) == NAMESPACE_DECL, 380);
4178 my_friendly_assert (TREE_CODE (used) == NAMESPACE_DECL, 380);
4179 /* Check if we already have this. */
4180 t = purpose_member (used, DECL_NAMESPACE_USING (user));
4181 if (t != NULL_TREE)
4182 {
4183 if (!indirect)
4184 /* Promote to direct usage. */
4185 TREE_INDIRECT_USING (t) = 0;
4186 return;
4187 }
4188
4189 /* Add used to the user's using list. */
4190 DECL_NAMESPACE_USING (user)
4191 = tree_cons (used, namespace_ancestor (user, used),
4192 DECL_NAMESPACE_USING (user));
4193
4194 TREE_INDIRECT_USING (DECL_NAMESPACE_USING (user)) = indirect;
4195
4196 /* Add user to the used's users list. */
4197 DECL_NAMESPACE_USERS (used)
4198 = tree_cons (user, 0, DECL_NAMESPACE_USERS (used));
4199
4200 /* Recursively add all namespaces used. */
4201 for (t = DECL_NAMESPACE_USING (used); t; t = TREE_CHAIN (t))
4202 /* indirect usage */
4203 add_using_namespace (user, TREE_PURPOSE (t), 1);
4204
4205 /* Tell everyone using us about the new used namespaces. */
4206 for (t = DECL_NAMESPACE_USERS (user); t; t = TREE_CHAIN (t))
4207 add_using_namespace (TREE_PURPOSE (t), used, 1);
4208 }
4209
4210 /* Combines two sets of overloaded functions into an OVERLOAD chain, removing
4211 duplicates. The first list becomes the tail of the result.
4212
4213 The algorithm is O(n^2). We could get this down to O(n log n) by
4214 doing a sort on the addresses of the functions, if that becomes
4215 necessary. */
4216
4217 static tree
4218 merge_functions (s1, s2)
4219 tree s1;
4220 tree s2;
4221 {
4222 for (; s2; s2 = OVL_NEXT (s2))
4223 {
4224 tree fn = OVL_CURRENT (s2);
4225 if (! ovl_member (fn, s1))
4226 s1 = build_overload (fn, s1);
4227 }
4228 return s1;
4229 }
4230
4231 /* This should return an error not all definitions define functions.
4232 It is not an error if we find two functions with exactly the
4233 same signature, only if these are selected in overload resolution.
4234 old is the current set of bindings, new the freshly-found binding.
4235 XXX Do we want to give *all* candidates in case of ambiguity?
4236 XXX In what way should I treat extern declarations?
4237 XXX I don't want to repeat the entire duplicate_decls here */
4238
4239 static tree
4240 ambiguous_decl (name, old, new, flags)
4241 tree name;
4242 tree old;
4243 tree new;
4244 int flags;
4245 {
4246 tree val, type;
4247 my_friendly_assert (old != NULL_TREE, 393);
4248 /* Copy the value. */
4249 val = BINDING_VALUE (new);
4250 if (val)
4251 switch (TREE_CODE (val))
4252 {
4253 case TEMPLATE_DECL:
4254 /* If we expect types or namespaces, and not templates,
4255 or this is not a template class. */
4256 if (LOOKUP_QUALIFIERS_ONLY (flags)
4257 && !DECL_CLASS_TEMPLATE_P (val))
4258 val = NULL_TREE;
4259 break;
4260 case TYPE_DECL:
4261 if (LOOKUP_NAMESPACES_ONLY (flags))
4262 val = NULL_TREE;
4263 break;
4264 case NAMESPACE_DECL:
4265 if (LOOKUP_TYPES_ONLY (flags))
4266 val = NULL_TREE;
4267 break;
4268 default:
4269 if (LOOKUP_QUALIFIERS_ONLY (flags))
4270 val = NULL_TREE;
4271 }
4272
4273 if (!BINDING_VALUE (old))
4274 BINDING_VALUE (old) = val;
4275 else if (val && val != BINDING_VALUE (old))
4276 {
4277 if (is_overloaded_fn (BINDING_VALUE (old))
4278 && is_overloaded_fn (val))
4279 {
4280 BINDING_VALUE (old) = merge_functions (BINDING_VALUE (old),
4281 val);
4282 }
4283 else
4284 {
4285 /* Some declarations are functions, some are not. */
4286 if (flags & LOOKUP_COMPLAIN)
4287 {
4288 /* If we've already given this error for this lookup,
4289 BINDING_VALUE (old) is error_mark_node, so let's not
4290 repeat ourselves. */
4291 if (BINDING_VALUE (old) != error_mark_node)
4292 {
4293 cp_error ("use of `%D' is ambiguous", name);
4294 cp_error_at (" first declared as `%#D' here",
4295 BINDING_VALUE (old));
4296 }
4297 cp_error_at (" also declared as `%#D' here", val);
4298 }
4299 BINDING_VALUE (old) = error_mark_node;
4300 }
4301 }
4302 /* ... and copy the type. */
4303 type = BINDING_TYPE (new);
4304 if (LOOKUP_NAMESPACES_ONLY (flags))
4305 type = NULL_TREE;
4306 if (!BINDING_TYPE (old))
4307 BINDING_TYPE (old) = type;
4308 else if (type && BINDING_TYPE (old) != type)
4309 {
4310 if (flags & LOOKUP_COMPLAIN)
4311 {
4312 cp_error ("`%D' denotes an ambiguous type",name);
4313 cp_error_at (" first type here", BINDING_TYPE (old));
4314 cp_error_at (" other type here", type);
4315 }
4316 }
4317 return old;
4318 }
4319
4320 /* Subroutine of unualified_namespace_lookup:
4321 Add the bindings of NAME in used namespaces to VAL.
4322 We are currently looking for names in namespace SCOPE, so we
4323 look through USINGS for using-directives of namespaces
4324 which have SCOPE as a common ancestor with the current scope.
4325 Returns zero on errors. */
4326
4327 int
4328 lookup_using_namespace (name, val, usings, scope, flags, spacesp)
4329 tree name, val, usings, scope;
4330 int flags;
4331 tree *spacesp;
4332 {
4333 tree iter;
4334 tree val1;
4335 /* Iterate over all used namespaces in current, searching for using
4336 directives of scope. */
4337 for (iter = usings; iter; iter = TREE_CHAIN (iter))
4338 if (TREE_VALUE (iter) == scope)
4339 {
4340 if (spacesp)
4341 *spacesp = tree_cons (TREE_PURPOSE (iter), NULL_TREE,
4342 *spacesp);
4343 val1 = binding_for_name (name, TREE_PURPOSE (iter));
4344 /* Resolve ambiguities. */
4345 val = ambiguous_decl (name, val, val1, flags);
4346 }
4347 return BINDING_VALUE (val) != error_mark_node;
4348 }
4349
4350 /* [namespace.qual]
4351 Accepts the NAME to lookup and its qualifying SCOPE.
4352 Returns the name/type pair found into the CPLUS_BINDING RESULT,
4353 or 0 on error. */
4354
4355 int
4356 qualified_lookup_using_namespace (name, scope, result, flags)
4357 tree name;
4358 tree scope;
4359 tree result;
4360 int flags;
4361 {
4362 /* Maintain a list of namespaces visited... */
4363 tree seen = NULL_TREE;
4364 /* ... and a list of namespace yet to see. */
4365 tree todo = NULL_TREE;
4366 tree usings;
4367 while (scope && (result != error_mark_node))
4368 {
4369 seen = tree_cons (scope, NULL_TREE, seen);
4370 result = ambiguous_decl (name, result,
4371 binding_for_name (name, scope), flags);
4372 if (!BINDING_VALUE (result) && !BINDING_TYPE (result))
4373 /* Consider using directives. */
4374 for (usings = DECL_NAMESPACE_USING (scope); usings;
4375 usings = TREE_CHAIN (usings))
4376 /* If this was a real directive, and we have not seen it. */
4377 if (!TREE_INDIRECT_USING (usings)
4378 && !purpose_member (TREE_PURPOSE (usings), seen))
4379 todo = tree_cons (TREE_PURPOSE (usings), NULL_TREE, todo);
4380 if (todo)
4381 {
4382 scope = TREE_PURPOSE (todo);
4383 todo = TREE_CHAIN (todo);
4384 }
4385 else
4386 scope = NULL_TREE; /* If there never was a todo list. */
4387 }
4388 return result != error_mark_node;
4389 }
4390
4391 /* [namespace.memdef]/2 */
4392
4393 /* Set the context of a declaration to scope. Complain if we are not
4394 outside scope. */
4395
4396 void
4397 set_decl_namespace (decl, scope, friendp)
4398 tree decl;
4399 tree scope;
4400 int friendp;
4401 {
4402 tree old;
4403 if (scope == std_node)
4404 scope = global_namespace;
4405 /* Get rid of namespace aliases. */
4406 scope = ORIGINAL_NAMESPACE (scope);
4407
4408 /* It is ok for friends to be qualified in parallel space. */
4409 if (!friendp && !is_namespace_ancestor (current_namespace, scope))
4410 cp_error ("declaration of `%D' not in a namespace surrounding `%D'",
4411 decl, scope);
4412 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
4413 if (scope != current_namespace)
4414 {
4415 /* See whether this has been declared in the namespace. */
4416 old = namespace_binding (DECL_NAME (decl), scope);
4417 if (!old)
4418 /* No old declaration at all. */
4419 goto complain;
4420 if (!is_overloaded_fn (decl))
4421 /* Don't compare non-function decls with decls_match here,
4422 since it can't check for the correct constness at this
4423 point. pushdecl will find those errors later. */
4424 return;
4425 /* Since decl is a function, old should contain a function decl. */
4426 if (!is_overloaded_fn (old))
4427 goto complain;
4428 if (processing_template_decl || processing_specialization)
4429 /* We have not yet called push_template_decl to turn the
4430 FUNCTION_DECL into a TEMPLATE_DECL, so the declarations
4431 won't match. But, we'll check later, when we construct the
4432 template. */
4433 return;
4434 for (; old; old = OVL_NEXT (old))
4435 if (decls_match (decl, OVL_CURRENT (old)))
4436 return;
4437 }
4438 else
4439 return;
4440 complain:
4441 cp_error ("`%D' should have been declared inside `%D'",
4442 decl, scope);
4443 }
4444
4445 /* Compute the namespace where a declaration is defined. */
4446
4447 static tree
4448 decl_namespace (decl)
4449 tree decl;
4450 {
4451 while (DECL_CONTEXT (decl))
4452 {
4453 decl = DECL_CONTEXT (decl);
4454 if (TREE_CODE (decl) == NAMESPACE_DECL)
4455 return decl;
4456 if (TREE_CODE_CLASS (TREE_CODE (decl)) == 't')
4457 decl = TYPE_STUB_DECL (decl);
4458 my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd', 390);
4459 }
4460
4461 return global_namespace;
4462 }
4463
4464 /* Return the namespace where the current declaration is declared. */
4465
4466 tree
4467 current_decl_namespace ()
4468 {
4469 tree result;
4470 /* If we have been pushed into a different namespace, use it. */
4471 if (decl_namespace_list)
4472 return TREE_PURPOSE (decl_namespace_list);
4473
4474 if (current_class_type)
4475 result = decl_namespace (TYPE_STUB_DECL (current_class_type));
4476 else if (current_function_decl)
4477 result = decl_namespace (current_function_decl);
4478 else
4479 result = current_namespace;
4480 return result;
4481 }
4482
4483 /* Temporarily set the namespace for the current declaration. */
4484
4485 void
4486 push_decl_namespace (decl)
4487 tree decl;
4488 {
4489 if (TREE_CODE (decl) != NAMESPACE_DECL)
4490 decl = decl_namespace (decl);
4491 decl_namespace_list = tree_cons (decl, NULL_TREE, decl_namespace_list);
4492 }
4493
4494 void
4495 pop_decl_namespace ()
4496 {
4497 decl_namespace_list = TREE_CHAIN (decl_namespace_list);
4498 }
4499
4500 /* Enter a class or namespace scope. */
4501
4502 void
4503 push_scope (t)
4504 tree t;
4505 {
4506 if (TREE_CODE (t) == NAMESPACE_DECL)
4507 push_decl_namespace (t);
4508 else
4509 pushclass (t, 2);
4510 }
4511
4512 /* Leave scope pushed by push_scope. */
4513
4514 void
4515 pop_scope (t)
4516 tree t;
4517 {
4518 if (TREE_CODE (t) == NAMESPACE_DECL)
4519 pop_decl_namespace ();
4520 else
4521 popclass ();
4522 }
4523
4524 /* [basic.lookup.koenig] */
4525 /* A non-zero return value in the functions below indicates an error.
4526 All nodes allocated in the procedure are on the scratch obstack. */
4527
4528 struct arg_lookup
4529 {
4530 tree name;
4531 tree namespaces;
4532 tree classes;
4533 tree functions;
4534 };
4535
4536 static int arg_assoc PARAMS ((struct arg_lookup*, tree));
4537 static int arg_assoc_args PARAMS ((struct arg_lookup*, tree));
4538 static int arg_assoc_type PARAMS ((struct arg_lookup*, tree));
4539 static int add_function PARAMS ((struct arg_lookup *, tree));
4540 static int arg_assoc_namespace PARAMS ((struct arg_lookup *, tree));
4541 static int arg_assoc_class PARAMS ((struct arg_lookup *, tree));
4542 static int arg_assoc_template_arg PARAMS ((struct arg_lookup*, tree));
4543
4544 /* Add a function to the lookup structure.
4545 Returns 1 on error. */
4546
4547 static int
4548 add_function (k, fn)
4549 struct arg_lookup *k;
4550 tree fn;
4551 {
4552 /* We used to check here to see if the function was already in the list,
4553 but that's O(n^2), which is just too expensive for function lookup.
4554 Now we deal with the occasional duplicate in joust. In doing this, we
4555 assume that the number of duplicates will be small compared to the
4556 total number of functions being compared, which should usually be the
4557 case. */
4558
4559 /* We must find only functions, or exactly one non-function. */
4560 if (k->functions && is_overloaded_fn (k->functions)
4561 && is_overloaded_fn (fn))
4562 k->functions = build_overload (fn, k->functions);
4563 else if (k->functions)
4564 {
4565 tree f1 = OVL_CURRENT (k->functions);
4566 tree f2 = fn;
4567 if (is_overloaded_fn (f1))
4568 {
4569 fn = f1; f1 = f2; f2 = fn;
4570 }
4571 cp_error_at ("`%D' is not a function,", f1);
4572 cp_error_at (" conflict with `%D'", f2);
4573 cp_error (" in call to `%D'", k->name);
4574 return 1;
4575 }
4576 else
4577 k->functions = fn;
4578 return 0;
4579 }
4580
4581 /* Add functions of a namespace to the lookup structure.
4582 Returns 1 on error. */
4583
4584 static int
4585 arg_assoc_namespace (k, scope)
4586 struct arg_lookup *k;
4587 tree scope;
4588 {
4589 tree value;
4590
4591 if (purpose_member (scope, k->namespaces))
4592 return 0;
4593 k->namespaces = tree_cons (scope, NULL_TREE, k->namespaces);
4594
4595 value = namespace_binding (k->name, scope);
4596 if (!value)
4597 return 0;
4598
4599 for (; value; value = OVL_NEXT (value))
4600 if (add_function (k, OVL_CURRENT (value)))
4601 return 1;
4602
4603 return 0;
4604 }
4605
4606 /* Adds everything associated with a template argument to the lookup
4607 structure. Returns 1 on error. */
4608
4609 static int
4610 arg_assoc_template_arg (k, arg)
4611 struct arg_lookup* k;
4612 tree arg;
4613 {
4614 /* [basic.lookup.koenig]
4615
4616 If T is a template-id, its associated namespaces and classes are
4617 ... the namespaces and classes associated with the types of the
4618 template arguments provided for template type parameters
4619 (excluding template template parameters); the namespaces in which
4620 any template template arguments are defined; and the classes in
4621 which any member templates used as template template arguments
4622 are defined. [Note: non-type template arguments do not
4623 contribute to the set of associated namespaces. ] */
4624
4625 /* Consider first template template arguments. */
4626 if (TREE_CODE (arg) == TEMPLATE_DECL)
4627 {
4628 tree ctx = CP_DECL_CONTEXT (arg);
4629
4630 /* It's not a member template. */
4631 if (TREE_CODE (ctx) == NAMESPACE_DECL)
4632 return arg_assoc_namespace (k, ctx);
4633 /* Otherwise, it must be member template. */
4634 else
4635 return arg_assoc_class (k, ctx);
4636 }
4637 /* It's not a template template argument, but it is a type template
4638 argument. */
4639 else if (TREE_CODE_CLASS (TREE_CODE (arg)) == 't')
4640 return arg_assoc_type (k, arg);
4641 /* It's a non-type template argument. */
4642 else
4643 return 0;
4644 }
4645
4646 /* Adds everything associated with class to the lookup structure.
4647 Returns 1 on error. */
4648
4649 static int
4650 arg_assoc_class (k, type)
4651 struct arg_lookup* k;
4652 tree type;
4653 {
4654 tree list, friends, context;
4655 int i;
4656
4657 /* Backend build structures, such as __builtin_va_list, aren't
4658 affected by all this. */
4659 if (!CLASS_TYPE_P (type))
4660 return 0;
4661
4662 if (purpose_member (type, k->classes))
4663 return 0;
4664 k->classes = tree_cons (type, NULL_TREE, k->classes);
4665
4666 context = decl_namespace (TYPE_MAIN_DECL (type));
4667 if (arg_assoc_namespace (k, context))
4668 return 1;
4669
4670 /* Process baseclasses. */
4671 for (i = 0; i < CLASSTYPE_N_BASECLASSES (type); i++)
4672 if (arg_assoc_class (k, TYPE_BINFO_BASETYPE (type, i)))
4673 return 1;
4674
4675 /* Process friends. */
4676 for (list = DECL_FRIENDLIST (TYPE_MAIN_DECL (type)); list;
4677 list = TREE_CHAIN (list))
4678 if (k->name == TREE_PURPOSE (list))
4679 for (friends = TREE_VALUE (list); friends;
4680 friends = TREE_CHAIN (friends))
4681 /* Only interested in global functions with potentially hidden
4682 (i.e. unqualified) declarations. */
4683 if (TREE_PURPOSE (list) == error_mark_node && TREE_VALUE (list)
4684 && decl_namespace (TREE_VALUE (list)) == context)
4685 if (add_function (k, TREE_VALUE (list)))
4686 return 1;
4687
4688 /* Process template arguments. */
4689 if (CLASSTYPE_TEMPLATE_INFO (type))
4690 {
4691 list = innermost_args (CLASSTYPE_TI_ARGS (type));
4692 for (i = 0; i < TREE_VEC_LENGTH (list); ++i)
4693 arg_assoc_template_arg (k, TREE_VEC_ELT (list, i));
4694 }
4695
4696 return 0;
4697 }
4698
4699 /* Adds everything associated with a given type.
4700 Returns 1 on error. */
4701
4702 static int
4703 arg_assoc_type (k, type)
4704 struct arg_lookup *k;
4705 tree type;
4706 {
4707 switch (TREE_CODE (type))
4708 {
4709 case VOID_TYPE:
4710 case INTEGER_TYPE:
4711 case REAL_TYPE:
4712 case COMPLEX_TYPE:
4713 case CHAR_TYPE:
4714 case BOOLEAN_TYPE:
4715 return 0;
4716 case RECORD_TYPE:
4717 if (TYPE_PTRMEMFUNC_P (type))
4718 return arg_assoc_type (k, TYPE_PTRMEMFUNC_FN_TYPE (type));
4719 return arg_assoc_class (k, type);
4720 case POINTER_TYPE:
4721 case REFERENCE_TYPE:
4722 case ARRAY_TYPE:
4723 return arg_assoc_type (k, TREE_TYPE (type));
4724 case UNION_TYPE:
4725 case ENUMERAL_TYPE:
4726 return arg_assoc_namespace (k, decl_namespace (TYPE_MAIN_DECL (type)));
4727 case OFFSET_TYPE:
4728 /* Pointer to member: associate class type and value type. */
4729 if (arg_assoc_type (k, TYPE_OFFSET_BASETYPE (type)))
4730 return 1;
4731 return arg_assoc_type (k, TREE_TYPE (type));
4732 case METHOD_TYPE:
4733 /* The basetype is referenced in the first arg type, so just
4734 fall through. */
4735 case FUNCTION_TYPE:
4736 /* Associate the parameter types. */
4737 if (arg_assoc_args (k, TYPE_ARG_TYPES (type)))
4738 return 1;
4739 /* Associate the return type. */
4740 return arg_assoc_type (k, TREE_TYPE (type));
4741 case TEMPLATE_TYPE_PARM:
4742 case TEMPLATE_TEMPLATE_PARM:
4743 return 0;
4744 case LANG_TYPE:
4745 if (type == unknown_type_node)
4746 return 0;
4747 /* else fall through */
4748 default:
4749 my_friendly_abort (390);
4750 }
4751 return 0;
4752 }
4753
4754 /* Adds everything associated with arguments. Returns 1 on error. */
4755
4756 static int
4757 arg_assoc_args (k, args)
4758 struct arg_lookup* k;
4759 tree args;
4760 {
4761 for (; args; args = TREE_CHAIN (args))
4762 if (arg_assoc (k, TREE_VALUE (args)))
4763 return 1;
4764 return 0;
4765 }
4766
4767 /* Adds everything associated with a given tree_node. Returns 1 on error. */
4768
4769 static int
4770 arg_assoc (k, n)
4771 struct arg_lookup* k;
4772 tree n;
4773 {
4774 if (n == error_mark_node)
4775 return 0;
4776
4777 if (TREE_CODE_CLASS (TREE_CODE (n)) == 't')
4778 return arg_assoc_type (k, n);
4779
4780 if (! type_unknown_p (n))
4781 return arg_assoc_type (k, TREE_TYPE (n));
4782
4783 if (TREE_CODE (n) == ADDR_EXPR)
4784 n = TREE_OPERAND (n, 0);
4785 if (TREE_CODE (n) == COMPONENT_REF)
4786 n = TREE_OPERAND (n, 1);
4787 if (TREE_CODE (n) == OFFSET_REF)
4788 n = TREE_OPERAND (n, 1);
4789 while (TREE_CODE (n) == TREE_LIST)
4790 n = TREE_VALUE (n);
4791
4792 if (TREE_CODE (n) == FUNCTION_DECL)
4793 return arg_assoc_type (k, TREE_TYPE (n));
4794 if (TREE_CODE (n) == TEMPLATE_ID_EXPR)
4795 {
4796 /* [basic.lookup.koenig]
4797
4798 If T is a template-id, its associated namespaces and classes
4799 are the namespace in which the template is defined; for
4800 member templates, the member template's class... */
4801 tree template = TREE_OPERAND (n, 0);
4802 tree args = TREE_OPERAND (n, 1);
4803 tree ctx;
4804 tree arg;
4805
4806 /* First, the template. There may actually be more than one if
4807 this is an overloaded function template. But, in that case,
4808 we only need the first; all the functions will be in the same
4809 namespace. */
4810 template = OVL_CURRENT (template);
4811
4812 ctx = CP_DECL_CONTEXT (template);
4813
4814 if (TREE_CODE (ctx) == NAMESPACE_DECL)
4815 {
4816 if (arg_assoc_namespace (k, ctx) == 1)
4817 return 1;
4818 }
4819 /* It must be a member template. */
4820 else if (arg_assoc_class (k, ctx) == 1)
4821 return 1;
4822
4823 /* Now the arguments. */
4824 for (arg = args; arg != NULL_TREE; arg = TREE_CHAIN (arg))
4825 if (arg_assoc_template_arg (k, TREE_VALUE (arg)) == 1)
4826 return 1;
4827 }
4828 else
4829 {
4830 my_friendly_assert (TREE_CODE (n) == OVERLOAD, 980715);
4831
4832 for (; n; n = OVL_CHAIN (n))
4833 if (arg_assoc_type (k, TREE_TYPE (OVL_FUNCTION (n))))
4834 return 1;
4835 }
4836
4837 return 0;
4838 }
4839
4840 /* Performs Koenig lookup depending on arguments, where fns
4841 are the functions found in normal lookup. */
4842
4843 tree
4844 lookup_arg_dependent (name, fns, args)
4845 tree name;
4846 tree fns;
4847 tree args;
4848 {
4849 struct arg_lookup k;
4850 tree fn = NULL_TREE;
4851
4852 k.name = name;
4853 k.functions = fns;
4854 k.classes = NULL_TREE;
4855
4856 /* Note that we've already looked at some namespaces during normal
4857 unqualified lookup, unless we found a decl in function scope. */
4858 if (fns)
4859 fn = OVL_CURRENT (fns);
4860 if (fn && TREE_CODE (fn) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (fn))
4861 k.namespaces = NULL_TREE;
4862 else
4863 unqualified_namespace_lookup (name, 0, &k.namespaces);
4864
4865 arg_assoc_args (&k, args);
4866 return k.functions;
4867 }
4868
4869 /* Process a namespace-alias declaration. */
4870
4871 void
4872 do_namespace_alias (alias, namespace)
4873 tree alias, namespace;
4874 {
4875 if (TREE_CODE (namespace) != NAMESPACE_DECL)
4876 {
4877 /* The parser did not find it, so it's not there. */
4878 cp_error ("unknown namespace `%D'", namespace);
4879 return;
4880 }
4881
4882 namespace = ORIGINAL_NAMESPACE (namespace);
4883
4884 /* Build the alias. */
4885 alias = build_lang_decl (NAMESPACE_DECL, alias, void_type_node);
4886 DECL_NAMESPACE_ALIAS (alias) = namespace;
4887 pushdecl (alias);
4888 }
4889
4890 /* Check a non-member using-declaration. Return the name and scope
4891 being used, and the USING_DECL, or NULL_TREE on failure. */
4892
4893 static tree
4894 validate_nonmember_using_decl (decl, scope, name)
4895 tree decl;
4896 tree *scope;
4897 tree *name;
4898 {
4899 if (TREE_CODE (decl) == SCOPE_REF
4900 && TREE_OPERAND (decl, 0) == std_node)
4901 {
4902 if (namespace_bindings_p ()
4903 && current_namespace == global_namespace)
4904 /* There's no need for a using declaration at all, here,
4905 since `std' is the same as `::'. We can't just pass this
4906 on because we'll complain later about declaring something
4907 in the same scope as a using declaration with the same
4908 name. We return NULL_TREE which indicates to the caller
4909 that there's no need to do any further processing. */
4910 return NULL_TREE;
4911
4912 *scope = global_namespace;
4913 *name = TREE_OPERAND (decl, 1);
4914 }
4915 else if (TREE_CODE (decl) == SCOPE_REF)
4916 {
4917 *scope = TREE_OPERAND (decl, 0);
4918 *name = TREE_OPERAND (decl, 1);
4919
4920 /* [namespace.udecl]
4921
4922 A using-declaration for a class member shall be a
4923 member-declaration. */
4924 if (TREE_CODE (*scope) != NAMESPACE_DECL)
4925 {
4926 if (TYPE_P (*scope))
4927 cp_error ("`%T' is not a namespace", *scope);
4928 else
4929 cp_error ("`%D' is not a namespace", *scope);
4930 return NULL_TREE;
4931 }
4932 }
4933 else if (TREE_CODE (decl) == IDENTIFIER_NODE
4934 || TREE_CODE (decl) == TYPE_DECL
4935 || TREE_CODE (decl) == TEMPLATE_DECL)
4936 {
4937 *scope = global_namespace;
4938 *name = decl;
4939 }
4940 else
4941 my_friendly_abort (382);
4942 if (TREE_CODE_CLASS (TREE_CODE (*name)) == 'd')
4943 *name = DECL_NAME (*name);
4944 /* Make a USING_DECL. */
4945 return push_using_decl (*scope, *name);
4946 }
4947
4948 /* Process local and global using-declarations. */
4949
4950 static void
4951 do_nonmember_using_decl (scope, name, oldval, oldtype, newval, newtype)
4952 tree scope, name;
4953 tree oldval, oldtype;
4954 tree *newval, *newtype;
4955 {
4956 tree decls;
4957
4958 *newval = *newtype = NULL_TREE;
4959 decls = make_node (CPLUS_BINDING);
4960 if (!qualified_lookup_using_namespace (name, scope, decls, 0))
4961 /* Lookup error */
4962 return;
4963
4964 if (!BINDING_VALUE (decls) && !BINDING_TYPE (decls))
4965 {
4966 cp_error ("`%D' not declared", name);
4967 return;
4968 }
4969
4970 /* Check for using functions. */
4971 if (BINDING_VALUE (decls) && is_overloaded_fn (BINDING_VALUE (decls)))
4972 {
4973 tree tmp, tmp1;
4974
4975 if (oldval && !is_overloaded_fn (oldval))
4976 {
4977 duplicate_decls (OVL_CURRENT (BINDING_VALUE (decls)), oldval);
4978 oldval = NULL_TREE;
4979 }
4980
4981 *newval = oldval;
4982 for (tmp = BINDING_VALUE (decls); tmp; tmp = OVL_NEXT (tmp))
4983 {
4984 tree new_fn = OVL_CURRENT (tmp);
4985
4986 /* [namespace.udecl]
4987
4988 If a function declaration in namespace scope or block
4989 scope has the same name and the same parameter types as a
4990 function introduced by a using declaration the program is
4991 ill-formed. */
4992 for (tmp1 = oldval; tmp1; tmp1 = OVL_NEXT (tmp1))
4993 {
4994 tree old_fn = OVL_CURRENT (tmp1);
4995
4996 if (!OVL_USED (tmp1)
4997 && compparms (TYPE_ARG_TYPES (TREE_TYPE (new_fn)),
4998 TYPE_ARG_TYPES (TREE_TYPE (old_fn))))
4999 {
5000 /* There was already a non-using declaration in
5001 this scope with the same parameter types. */
5002 cp_error ("`%D' is already declared in this scope",
5003 name);
5004 break;
5005 }
5006 else if (duplicate_decls (new_fn, old_fn))
5007 /* We're re-using something we already used
5008 before. We don't need to add it again. */
5009 break;
5010 }
5011
5012 /* If we broke out of the loop, there's no reason to add
5013 this function to the using declarations for this
5014 scope. */
5015 if (tmp1)
5016 continue;
5017
5018 *newval = build_overload (OVL_CURRENT (tmp), *newval);
5019 if (TREE_CODE (*newval) != OVERLOAD)
5020 *newval = ovl_cons (*newval, NULL_TREE);
5021 OVL_USED (*newval) = 1;
5022 }
5023 }
5024 else
5025 {
5026 *newval = BINDING_VALUE (decls);
5027 if (oldval)
5028 duplicate_decls (*newval, oldval);
5029 }
5030
5031 *newtype = BINDING_TYPE (decls);
5032 if (oldtype && *newtype && oldtype != *newtype)
5033 {
5034 cp_error ("using directive `%D' introduced ambiguous type `%T'",
5035 name, oldtype);
5036 return;
5037 }
5038 }
5039
5040 /* Process a using-declaration not appearing in class or local scope. */
5041
5042 void
5043 do_toplevel_using_decl (decl)
5044 tree decl;
5045 {
5046 tree scope, name, binding;
5047 tree oldval, oldtype, newval, newtype;
5048
5049 decl = validate_nonmember_using_decl (decl, &scope, &name);
5050 if (decl == NULL_TREE)
5051 return;
5052
5053 binding = binding_for_name (name, current_namespace);
5054
5055 oldval = BINDING_VALUE (binding);
5056 oldtype = BINDING_TYPE (binding);
5057
5058 do_nonmember_using_decl (scope, name, oldval, oldtype, &newval, &newtype);
5059
5060 /* Copy declarations found. */
5061 if (newval)
5062 BINDING_VALUE (binding) = newval;
5063 if (newtype)
5064 BINDING_TYPE (binding) = newtype;
5065 return;
5066 }
5067
5068 /* Process a using-declaration at function scope. */
5069
5070 void
5071 do_local_using_decl (decl)
5072 tree decl;
5073 {
5074 tree scope, name;
5075 tree oldval, oldtype, newval, newtype;
5076
5077 decl = validate_nonmember_using_decl (decl, &scope, &name);
5078 if (decl == NULL_TREE)
5079 return;
5080
5081 oldval = lookup_name_current_level (name);
5082 oldtype = lookup_type_current_level (name);
5083
5084 do_nonmember_using_decl (scope, name, oldval, oldtype, &newval, &newtype);
5085
5086 if (newval)
5087 {
5088 if (is_overloaded_fn (newval))
5089 {
5090 tree fn, term;
5091
5092 /* We only need to push declarations for those functions
5093 that were not already bound in the current level.
5094 The old value might be NULL_TREE, it might be a single
5095 function, or an OVERLOAD. */
5096 if (oldval && TREE_CODE (oldval) == OVERLOAD)
5097 term = OVL_FUNCTION (oldval);
5098 else
5099 term = oldval;
5100 for (fn = newval; fn && OVL_CURRENT (fn) != term;
5101 fn = OVL_NEXT (fn))
5102 push_overloaded_decl (OVL_CURRENT (fn),
5103 PUSH_LOCAL | PUSH_USING);
5104 }
5105 else
5106 push_local_binding (name, newval, PUSH_USING);
5107 }
5108 if (newtype)
5109 set_identifier_type_value (name, newtype);
5110 }
5111
5112 tree
5113 do_class_using_decl (decl)
5114 tree decl;
5115 {
5116 tree name, value;
5117
5118 if (TREE_CODE (decl) != SCOPE_REF
5119 || TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (decl, 0))) != 't')
5120 {
5121 cp_error ("using-declaration for non-member at class scope");
5122 return NULL_TREE;
5123 }
5124 name = TREE_OPERAND (decl, 1);
5125 if (TREE_CODE (name) == BIT_NOT_EXPR)
5126 {
5127 cp_error ("using-declaration for destructor");
5128 return NULL_TREE;
5129 }
5130 if (TREE_CODE (name) == TYPE_DECL)
5131 name = DECL_NAME (name);
5132
5133 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 980716);
5134
5135 value = build_lang_decl (USING_DECL, name, void_type_node);
5136 DECL_INITIAL (value) = TREE_OPERAND (decl, 0);
5137 return value;
5138 }
5139
5140 /* Process a using-directive. */
5141
5142 void
5143 do_using_directive (namespace)
5144 tree namespace;
5145 {
5146 if (namespace == std_node)
5147 return;
5148 /* using namespace A::B::C; */
5149 if (TREE_CODE (namespace) == SCOPE_REF)
5150 namespace = TREE_OPERAND (namespace, 1);
5151 if (TREE_CODE (namespace) == IDENTIFIER_NODE)
5152 {
5153 /* Lookup in lexer did not find a namespace. */
5154 cp_error ("namespace `%T' undeclared", namespace);
5155 return;
5156 }
5157 if (TREE_CODE (namespace) != NAMESPACE_DECL)
5158 {
5159 cp_error ("`%T' is not a namespace", namespace);
5160 return;
5161 }
5162 namespace = ORIGINAL_NAMESPACE (namespace);
5163 if (!toplevel_bindings_p ())
5164 push_using_directive (namespace);
5165 else
5166 /* direct usage */
5167 add_using_namespace (current_namespace, namespace, 0);
5168 }
5169
5170 void
5171 check_default_args (x)
5172 tree x;
5173 {
5174 tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
5175 int saw_def = 0, i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
5176 for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
5177 {
5178 if (TREE_PURPOSE (arg))
5179 saw_def = 1;
5180 else if (saw_def)
5181 {
5182 cp_error_at ("default argument missing for parameter %P of `%+#D'",
5183 i, x);
5184 break;
5185 }
5186 }
5187 }
5188
5189 void
5190 mark_used (decl)
5191 tree decl;
5192 {
5193 TREE_USED (decl) = 1;
5194 if (processing_template_decl)
5195 return;
5196 assemble_external (decl);
5197
5198 /* Is it a synthesized method that needs to be synthesized? */
5199 if (TREE_CODE (decl) == FUNCTION_DECL
5200 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
5201 && DECL_ARTIFICIAL (decl)
5202 && ! DECL_INITIAL (decl)
5203 /* Kludge: don't synthesize for default args. */
5204 && current_function_decl)
5205 synthesize_method (decl);
5206
5207 /* If this is a function or variable that is an instance of some
5208 template, we now know that we will need to actually do the
5209 instantiation. We check that DECL is not an explicit
5210 instantiation because that is not checked in instantiate_decl. */
5211 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
5212 && DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
5213 && (!DECL_EXPLICIT_INSTANTIATION (decl)
5214 || (TREE_CODE (decl) == FUNCTION_DECL && DECL_INLINE (decl))))
5215 instantiate_decl (decl);
5216 }
5217
5218 /* Helper function for named_class_head_sans_basetype nonterminal. We
5219 have just seen something of the form `AGGR SCOPE::ID'. Return a
5220 TYPE_DECL for the type declared by ID in SCOPE. */
5221
5222 tree
5223 handle_class_head (aggr, scope, id)
5224 tree aggr, scope, id;
5225 {
5226 tree decl;
5227
5228 if (TREE_CODE (id) == TYPE_DECL)
5229 decl = id;
5230 else if (DECL_CLASS_TEMPLATE_P (id))
5231 decl = DECL_TEMPLATE_RESULT (id);
5232 else
5233 {
5234 tree current = current_scope();
5235
5236 if (current == NULL_TREE)
5237 current = current_namespace;
5238 if (scope == std_node)
5239 scope = global_namespace;
5240 if (scope == NULL_TREE)
5241 scope = global_namespace;
5242 if (scope == current)
5243 {
5244 /* We've been given AGGR SCOPE::ID, when we're already inside SCOPE.
5245 Be nice about it. */
5246 if (pedantic)
5247 cp_pedwarn ("extra qualification `%T::' on member `%D' ignored",
5248 FROB_CONTEXT (scope), id);
5249 }
5250 else if (scope != global_namespace)
5251 cp_error ("`%T' does not have a nested type named `%D'", scope, id);
5252 else
5253 cp_error ("no file-scope type named `%D'", id);
5254
5255 /* Inject it at the current scope. */
5256 decl = TYPE_MAIN_DECL (xref_tag (aggr, id, 1));
5257 }
5258
5259 /* Enter the SCOPE. If this turns out not to be a definition, the
5260 parser must leave the scope. */
5261 push_scope (CP_DECL_CONTEXT (decl));
5262
5263 /* If we see something like:
5264
5265 template <typename T> struct S::I ....
5266
5267 we must create a TEMPLATE_DECL for the nested type. */
5268 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5269 decl = push_template_decl (decl);
5270
5271 return decl;
5272 }
5273
5274 /* Initialize decl2.c. */
5275
5276 void
5277 init_decl2 ()
5278 {
5279 ggc_add_tree_root (&decl_namespace_list, 1);
5280 ggc_add_tree_varray_root (&saved_inlines, 1);
5281 ggc_add_tree_varray_root (&pending_statics, 1);
5282 ggc_add_tree_varray_root (&ssdf_decls, 1);
5283 ggc_add_tree_root (&ssdf_decl, 1);
5284 ggc_add_tree_root (&priority_decl, 1);
5285 ggc_add_tree_root (&initialize_p_decl, 1);
5286 ggc_add_tree_root (&pending_vtables, 1);
5287 }