OSDN Git Service

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