OSDN Git Service

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