OSDN Git Service

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