OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [cp/] [decl2.c] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
/* Process declarations and variables for C++ compiler.
2
   Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3
   1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
4
   Hacked by Michael Tiemann (tiemann@cygnus.com)
5
 
6
This file is part of GCC.
7
 
8
GCC 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
GCC 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 GCC; see the file COPYING.  If not, write to
20
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21
Boston, MA 02110-1301, 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 "coretypes.h"
34
#include "tm.h"
35
#include "tree.h"
36
#include "rtl.h"
37
#include "expr.h"
38
#include "flags.h"
39
#include "cp-tree.h"
40
#include "decl.h"
41
#include "output.h"
42
#include "except.h"
43
#include "toplev.h"
44
#include "timevar.h"
45
#include "cpplib.h"
46
#include "target.h"
47
#include "c-common.h"
48
#include "tree-mudflap.h"
49
#include "cgraph.h"
50
#include "tree-inline.h"
51
#include "c-pragma.h"
52
#include "tree-dump.h"
53
#include "intl.h"
54
 
55
extern cpp_reader *parse_in;
56
 
57
/* This structure contains information about the initializations
58
   and/or destructions required for a particular priority level.  */
59
typedef struct priority_info_s {
60
  /* Nonzero if there have been any initializations at this priority
61
     throughout the translation unit.  */
62
  int initializations_p;
63
  /* Nonzero if there have been any destructions at this priority
64
     throughout the translation unit.  */
65
  int destructions_p;
66
} *priority_info;
67
 
68
static void mark_vtable_entries (tree);
69
static bool maybe_emit_vtables (tree);
70
static bool acceptable_java_type (tree);
71
static tree start_objects (int, int);
72
static void finish_objects (int, int, tree);
73
static tree start_static_storage_duration_function (unsigned);
74
static void finish_static_storage_duration_function (tree);
75
static priority_info get_priority_info (int);
76
static void do_static_initialization_or_destruction (tree, bool);
77
static void one_static_initialization_or_destruction (tree, tree, bool);
78
static void generate_ctor_or_dtor_function (bool, int, location_t *);
79
static int generate_ctor_and_dtor_functions_for_priority (splay_tree_node,
80
                                                          void *);
81
static tree prune_vars_needing_no_initialization (tree *);
82
static void write_out_vars (tree);
83
static void import_export_class (tree);
84
static tree get_guard_bits (tree);
85
 
86
/* A list of static class variables.  This is needed, because a
87
   static class variable can be declared inside the class without
88
   an initializer, and then initialized, statically, outside the class.  */
89
static GTY(()) VEC(tree,gc) *pending_statics;
90
 
91
/* A list of functions which were declared inline, but which we
92
   may need to emit outline anyway.  */
93
static GTY(()) VEC(tree,gc) *deferred_fns;
94
 
95
/* Nonzero if we're done parsing and into end-of-file activities.  */
96
 
97
int at_eof;
98
 
99
/* Functions called along with real static constructors and destructors.  */
100
 
101
tree static_ctors;
102
tree static_dtors;
103
 
104
 
105
/* Incorporate `const' and `volatile' qualifiers for member functions.
106
   FUNCTION is a TYPE_DECL or a FUNCTION_DECL.
107
   QUALS is a list of qualifiers.  Returns any explicit
108
   top-level qualifiers of the method's this pointer, anything other than
109
   TYPE_UNQUALIFIED will be an extension.  */
110
 
111
int
112
grok_method_quals (tree ctype, tree function, cp_cv_quals quals)
113
{
114
  tree fntype = TREE_TYPE (function);
115
  tree raises = TYPE_RAISES_EXCEPTIONS (fntype);
116
  int type_quals = TYPE_UNQUALIFIED;
117
  int this_quals = TYPE_UNQUALIFIED;
118
 
119
  type_quals = quals & ~TYPE_QUAL_RESTRICT;
120
  this_quals = quals & TYPE_QUAL_RESTRICT;
121
 
122
  ctype = cp_build_qualified_type (ctype, type_quals);
123
  fntype = build_method_type_directly (ctype, TREE_TYPE (fntype),
124
                                       (TREE_CODE (fntype) == METHOD_TYPE
125
                                        ? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
126
                                        : TYPE_ARG_TYPES (fntype)));
127
  if (raises)
128
    fntype = build_exception_variant (fntype, raises);
129
 
130
  TREE_TYPE (function) = fntype;
131
  return this_quals;
132
}
133
 
134
/* Build a PARM_DECL with NAME and TYPE, and set DECL_ARG_TYPE
135
   appropriately.  */
136
 
137
tree
138
cp_build_parm_decl (tree name, tree type)
139
{
140
  tree parm = build_decl (PARM_DECL, name, type);
141
  /* DECL_ARG_TYPE is only used by the back end and the back end never
142
     sees templates.  */
143
  if (!processing_template_decl)
144
    DECL_ARG_TYPE (parm) = type_passed_as (type);
145
  return parm;
146
}
147
 
148
/* Returns a PARM_DECL for a parameter of the indicated TYPE, with the
149
   indicated NAME.  */
150
 
151
static tree
152
build_artificial_parm (tree name, tree type)
153
{
154
  tree parm = cp_build_parm_decl (name, type);
155
  DECL_ARTIFICIAL (parm) = 1;
156
  /* All our artificial parms are implicitly `const'; they cannot be
157
     assigned to.  */
158
  TREE_READONLY (parm) = 1;
159
  return parm;
160
}
161
 
162
/* Constructors for types with virtual baseclasses need an "in-charge" flag
163
   saying whether this constructor is responsible for initialization of
164
   virtual baseclasses or not.  All destructors also need this "in-charge"
165
   flag, which additionally determines whether or not the destructor should
166
   free the memory for the object.
167
 
168
   This function adds the "in-charge" flag to member function FN if
169
   appropriate.  It is called from grokclassfn and tsubst.
170
   FN must be either a constructor or destructor.
171
 
172
   The in-charge flag follows the 'this' parameter, and is followed by the
173
   VTT parm (if any), then the user-written parms.  */
174
 
175
void
176
maybe_retrofit_in_chrg (tree fn)
177
{
178
  tree basetype, arg_types, parms, parm, fntype;
179
 
180
  /* If we've already add the in-charge parameter don't do it again.  */
181
  if (DECL_HAS_IN_CHARGE_PARM_P (fn))
182
    return;
183
 
184
  /* When processing templates we can't know, in general, whether or
185
     not we're going to have virtual baseclasses.  */
186
  if (processing_template_decl)
187
    return;
188
 
189
  /* We don't need an in-charge parameter for constructors that don't
190
     have virtual bases.  */
191
  if (DECL_CONSTRUCTOR_P (fn)
192
      && !CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
193
    return;
194
 
195
  arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
196
  basetype = TREE_TYPE (TREE_VALUE (arg_types));
197
  arg_types = TREE_CHAIN (arg_types);
198
 
199
  parms = TREE_CHAIN (DECL_ARGUMENTS (fn));
200
 
201
  /* If this is a subobject constructor or destructor, our caller will
202
     pass us a pointer to our VTT.  */
203
  if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
204
    {
205
      parm = build_artificial_parm (vtt_parm_identifier, vtt_parm_type);
206
 
207
      /* First add it to DECL_ARGUMENTS between 'this' and the real args...  */
208
      TREE_CHAIN (parm) = parms;
209
      parms = parm;
210
 
211
      /* ...and then to TYPE_ARG_TYPES.  */
212
      arg_types = hash_tree_chain (vtt_parm_type, arg_types);
213
 
214
      DECL_HAS_VTT_PARM_P (fn) = 1;
215
    }
216
 
217
  /* Then add the in-charge parm (before the VTT parm).  */
218
  parm = build_artificial_parm (in_charge_identifier, integer_type_node);
219
  TREE_CHAIN (parm) = parms;
220
  parms = parm;
221
  arg_types = hash_tree_chain (integer_type_node, arg_types);
222
 
223
  /* Insert our new parameter(s) into the list.  */
224
  TREE_CHAIN (DECL_ARGUMENTS (fn)) = parms;
225
 
226
  /* And rebuild the function type.  */
227
  fntype = build_method_type_directly (basetype, TREE_TYPE (TREE_TYPE (fn)),
228
                                       arg_types);
229
  if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)))
230
    fntype = build_exception_variant (fntype,
231
                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)));
232
  TREE_TYPE (fn) = fntype;
233
 
234
  /* Now we've got the in-charge parameter.  */
235
  DECL_HAS_IN_CHARGE_PARM_P (fn) = 1;
236
}
237
 
238
/* Classes overload their constituent function names automatically.
239
   When a function name is declared in a record structure,
240
   its name is changed to it overloaded name.  Since names for
241
   constructors and destructors can conflict, we place a leading
242
   '$' for destructors.
243
 
244
   CNAME is the name of the class we are grokking for.
245
 
246
   FUNCTION is a FUNCTION_DECL.  It was created by `grokdeclarator'.
247
 
248
   FLAGS contains bits saying what's special about today's
249
   arguments.  1 == DESTRUCTOR.  2 == OPERATOR.
250
 
251
   If FUNCTION is a destructor, then we must add the `auto-delete' field
252
   as a second parameter.  There is some hair associated with the fact
253
   that we must "declare" this variable in the manner consistent with the
254
   way the rest of the arguments were declared.
255
 
256
   QUALS are the qualifiers for the this pointer.  */
257
 
258
void
259
grokclassfn (tree ctype, tree function, enum overload_flags flags,
260
             cp_cv_quals quals)
261
{
262
  tree fn_name = DECL_NAME (function);
263
  cp_cv_quals this_quals = TYPE_UNQUALIFIED;
264
 
265
  /* Even within an `extern "C"' block, members get C++ linkage.  See
266
     [dcl.link] for details.  */
267
  SET_DECL_LANGUAGE (function, lang_cplusplus);
268
 
269
  if (fn_name == NULL_TREE)
270
    {
271
      error ("name missing for member function");
272
      fn_name = get_identifier ("<anonymous>");
273
      DECL_NAME (function) = fn_name;
274
    }
275
 
276
  if (quals)
277
    this_quals = grok_method_quals (ctype, function, quals);
278
 
279
  if (TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
280
    {
281
      /* Must add the class instance variable up front.  */
282
      /* Right now we just make this a pointer.  But later
283
         we may wish to make it special.  */
284
      tree type = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (function)));
285
      tree qual_type;
286
      tree parm;
287
 
288
      /* The `this' parameter is implicitly `const'; it cannot be
289
         assigned to.  */
290
      this_quals |= TYPE_QUAL_CONST;
291
      qual_type = cp_build_qualified_type (type, this_quals);
292
      parm = build_artificial_parm (this_identifier, qual_type);
293
      cp_apply_type_quals_to_decl (this_quals, parm);
294
      TREE_CHAIN (parm) = DECL_ARGUMENTS (function);
295
      DECL_ARGUMENTS (function) = parm;
296
    }
297
 
298
  DECL_CONTEXT (function) = ctype;
299
 
300
  if (flags == DTOR_FLAG)
301
    DECL_DESTRUCTOR_P (function) = 1;
302
 
303
  if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
304
    maybe_retrofit_in_chrg (function);
305
}
306
 
307
/* Create an ARRAY_REF, checking for the user doing things backwards
308
   along the way.  */
309
 
310
tree
311
grok_array_decl (tree array_expr, tree index_exp)
312
{
313
  tree type;
314
  tree expr;
315
  tree orig_array_expr = array_expr;
316
  tree orig_index_exp = index_exp;
317
 
318
  if (error_operand_p (array_expr) || error_operand_p (index_exp))
319
    return error_mark_node;
320
 
321
  if (processing_template_decl)
322
    {
323
      if (type_dependent_expression_p (array_expr)
324
          || type_dependent_expression_p (index_exp))
325
        return build_min_nt (ARRAY_REF, array_expr, index_exp,
326
                             NULL_TREE, NULL_TREE);
327
      array_expr = build_non_dependent_expr (array_expr);
328
      index_exp = build_non_dependent_expr (index_exp);
329
    }
330
 
331
  type = TREE_TYPE (array_expr);
332
  gcc_assert (type);
333
  type = non_reference (type);
334
 
335
  /* If they have an `operator[]', use that.  */
336
  if (IS_AGGR_TYPE (type) || IS_AGGR_TYPE (TREE_TYPE (index_exp)))
337
    expr = build_new_op (ARRAY_REF, LOOKUP_NORMAL,
338
                         array_expr, index_exp, NULL_TREE,
339
                         /*overloaded_p=*/NULL);
340
  else
341
    {
342
      tree p1, p2, i1, i2;
343
 
344
      /* Otherwise, create an ARRAY_REF for a pointer or array type.
345
         It is a little-known fact that, if `a' is an array and `i' is
346
         an int, you can write `i[a]', which means the same thing as
347
         `a[i]'.  */
348
      if (TREE_CODE (type) == ARRAY_TYPE)
349
        p1 = array_expr;
350
      else
351
        p1 = build_expr_type_conversion (WANT_POINTER, array_expr, false);
352
 
353
      if (TREE_CODE (TREE_TYPE (index_exp)) == ARRAY_TYPE)
354
        p2 = index_exp;
355
      else
356
        p2 = build_expr_type_conversion (WANT_POINTER, index_exp, false);
357
 
358
      i1 = build_expr_type_conversion (WANT_INT | WANT_ENUM, array_expr,
359
                                       false);
360
      i2 = build_expr_type_conversion (WANT_INT | WANT_ENUM, index_exp,
361
                                       false);
362
 
363
      if ((p1 && i2) && (i1 && p2))
364
        error ("ambiguous conversion for array subscript");
365
 
366
      if (p1 && i2)
367
        array_expr = p1, index_exp = i2;
368
      else if (i1 && p2)
369
        array_expr = p2, index_exp = i1;
370
      else
371
        {
372
          error ("invalid types %<%T[%T]%> for array subscript",
373
                 type, TREE_TYPE (index_exp));
374
          return error_mark_node;
375
        }
376
 
377
      if (array_expr == error_mark_node || index_exp == error_mark_node)
378
        error ("ambiguous conversion for array subscript");
379
 
380
      expr = build_array_ref (array_expr, index_exp);
381
    }
382
  if (processing_template_decl && expr != error_mark_node)
383
    return build_min_non_dep (ARRAY_REF, expr, orig_array_expr, orig_index_exp,
384
                              NULL_TREE, NULL_TREE);
385
  return expr;
386
}
387
 
388
/* Given the cast expression EXP, checking out its validity.   Either return
389
   an error_mark_node if there was an unavoidable error, return a cast to
390
   void for trying to delete a pointer w/ the value 0, or return the
391
   call to delete.  If DOING_VEC is true, we handle things differently
392
   for doing an array delete.
393
   Implements ARM $5.3.4.  This is called from the parser.  */
394
 
395
tree
396
delete_sanity (tree exp, tree size, bool doing_vec, int use_global_delete)
397
{
398
  tree t, type;
399
 
400
  if (exp == error_mark_node)
401
    return exp;
402
 
403
  if (processing_template_decl)
404
    {
405
      t = build_min (DELETE_EXPR, void_type_node, exp, size);
406
      DELETE_EXPR_USE_GLOBAL (t) = use_global_delete;
407
      DELETE_EXPR_USE_VEC (t) = doing_vec;
408
      TREE_SIDE_EFFECTS (t) = 1;
409
      return t;
410
    }
411
 
412
  /* An array can't have been allocated by new, so complain.  */
413
  if (TREE_CODE (exp) == VAR_DECL
414
      && TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
415
    warning (0, "deleting array %q#D", exp);
416
 
417
  t = build_expr_type_conversion (WANT_POINTER, exp, true);
418
 
419
  if (t == NULL_TREE || t == error_mark_node)
420
    {
421
      error ("type %q#T argument given to %<delete%>, expected pointer",
422
             TREE_TYPE (exp));
423
      return error_mark_node;
424
    }
425
 
426
  type = TREE_TYPE (t);
427
 
428
  /* As of Valley Forge, you can delete a pointer to const.  */
429
 
430
  /* You can't delete functions.  */
431
  if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
432
    {
433
      error ("cannot delete a function.  Only pointer-to-objects are "
434
             "valid arguments to %<delete%>");
435
      return error_mark_node;
436
    }
437
 
438
  /* Deleting ptr to void is undefined behavior [expr.delete/3].  */
439
  if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
440
    {
441
      warning (0, "deleting %qT is undefined", type);
442
      doing_vec = 0;
443
    }
444
 
445
  /* Deleting a pointer with the value zero is valid and has no effect.  */
446
  if (integer_zerop (t))
447
    return build1 (NOP_EXPR, void_type_node, t);
448
 
449
  if (doing_vec)
450
    return build_vec_delete (t, /*maxindex=*/NULL_TREE,
451
                             sfk_deleting_destructor,
452
                             use_global_delete);
453
  else
454
    return build_delete (type, t, sfk_deleting_destructor,
455
                         LOOKUP_NORMAL, use_global_delete);
456
}
457
 
458
/* Report an error if the indicated template declaration is not the
459
   sort of thing that should be a member template.  */
460
 
461
void
462
check_member_template (tree tmpl)
463
{
464
  tree decl;
465
 
466
  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
467
  decl = DECL_TEMPLATE_RESULT (tmpl);
468
 
469
  if (TREE_CODE (decl) == FUNCTION_DECL
470
      || (TREE_CODE (decl) == TYPE_DECL
471
          && IS_AGGR_TYPE (TREE_TYPE (decl))))
472
    {
473
      if (current_function_decl)
474
        /* 14.5.2.2 [temp.mem]
475
 
476
           A local class shall not have member templates.  */
477
        error ("invalid declaration of member template %q#D in local class",
478
               decl);
479
 
480
      if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
481
        {
482
          /* 14.5.2.3 [temp.mem]
483
 
484
             A member function template shall not be virtual.  */
485
          error
486
            ("invalid use of %<virtual%> in template declaration of %q#D",
487
             decl);
488
          DECL_VIRTUAL_P (decl) = 0;
489
        }
490
 
491
      /* The debug-information generating code doesn't know what to do
492
         with member templates.  */
493
      DECL_IGNORED_P (tmpl) = 1;
494
    }
495
  else
496
    error ("template declaration of %q#D", decl);
497
}
498
 
499
/* Return true iff TYPE is a valid Java parameter or return type.  */
500
 
501
static bool
502
acceptable_java_type (tree type)
503
{
504
  if (TREE_CODE (type) == VOID_TYPE || TYPE_FOR_JAVA (type))
505
    return 1;
506
  if (TREE_CODE (type) == POINTER_TYPE || TREE_CODE (type) == REFERENCE_TYPE)
507
    {
508
      type = TREE_TYPE (type);
509
      if (TREE_CODE (type) == RECORD_TYPE)
510
        {
511
          tree args;  int i;
512
          if (! TYPE_FOR_JAVA (type))
513
            return false;
514
          if (! CLASSTYPE_TEMPLATE_INFO (type))
515
            return true;
516
          args = CLASSTYPE_TI_ARGS (type);
517
          i = TREE_VEC_LENGTH (args);
518
          while (--i >= 0)
519
            {
520
              type = TREE_VEC_ELT (args, i);
521
              if (TREE_CODE (type) == POINTER_TYPE)
522
                type = TREE_TYPE (type);
523
              if (! TYPE_FOR_JAVA (type))
524
                return false;
525
            }
526
          return true;
527
        }
528
    }
529
  return false;
530
}
531
 
532
/* For a METHOD in a Java class CTYPE, return true if
533
   the parameter and return types are valid Java types.
534
   Otherwise, print appropriate error messages, and return false.  */
535
 
536
bool
537
check_java_method (tree method)
538
{
539
  bool jerr = false;
540
  tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (method));
541
  tree ret_type = TREE_TYPE (TREE_TYPE (method));
542
 
543
  if (!acceptable_java_type (ret_type))
544
    {
545
      error ("Java method %qD has non-Java return type %qT",
546
             method, ret_type);
547
      jerr = true;
548
    }
549
 
550
  arg_types = TREE_CHAIN (arg_types);
551
  if (DECL_HAS_IN_CHARGE_PARM_P (method))
552
    arg_types = TREE_CHAIN (arg_types);
553
  if (DECL_HAS_VTT_PARM_P (method))
554
    arg_types = TREE_CHAIN (arg_types);
555
 
556
  for (; arg_types != NULL_TREE; arg_types = TREE_CHAIN (arg_types))
557
    {
558
      tree type = TREE_VALUE (arg_types);
559
      if (!acceptable_java_type (type))
560
        {
561
          error ("Java method %qD has non-Java parameter type %qT",
562
                 method, type);
563
          jerr = true;
564
        }
565
    }
566
  return !jerr;
567
}
568
 
569
/* Sanity check: report error if this function FUNCTION is not
570
   really a member of the class (CTYPE) it is supposed to belong to.
571
   TEMPLATE_PARMS is used to specify the template parameters of a member
572
   template passed as FUNCTION_DECL. If the member template is passed as a
573
   TEMPLATE_DECL, it can be NULL since the parameters can be extracted
574
   from the declaration. If the function is not a function template, it
575
   must be NULL.
576
   It returns the original declaration for the function, or NULL_TREE
577
   if no declaration was found (and an error was emitted).  */
578
 
579
tree
580
check_classfn (tree ctype, tree function, tree template_parms)
581
{
582
  int ix;
583
  bool is_template;
584
 
585
  if (DECL_USE_TEMPLATE (function)
586
      && !(TREE_CODE (function) == TEMPLATE_DECL
587
           && DECL_TEMPLATE_SPECIALIZATION (function))
588
      && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (function)))
589
    /* Since this is a specialization of a member template,
590
       we're not going to find the declaration in the class.
591
       For example, in:
592
 
593
         struct S { template <typename T> void f(T); };
594
         template <> void S::f(int);
595
 
596
       we're not going to find `S::f(int)', but there's no
597
       reason we should, either.  We let our callers know we didn't
598
       find the method, but we don't complain.  */
599
    return NULL_TREE;
600
 
601
  /* Basic sanity check: for a template function, the template parameters
602
     either were not passed, or they are the same of DECL_TEMPLATE_PARMS.  */
603
  if (TREE_CODE (function) == TEMPLATE_DECL)
604
    {
605
      gcc_assert (!template_parms
606
                  || comp_template_parms (template_parms,
607
                                          DECL_TEMPLATE_PARMS (function)));
608
      template_parms = DECL_TEMPLATE_PARMS (function);
609
    }
610
 
611
  /* OK, is this a definition of a member template?  */
612
  is_template = (template_parms != NULL_TREE);
613
 
614
  ix = class_method_index_for_fn (complete_type (ctype), function);
615
  if (ix >= 0)
616
    {
617
      VEC(tree,gc) *methods = CLASSTYPE_METHOD_VEC (ctype);
618
      tree fndecls, fndecl = 0;
619
      bool is_conv_op;
620
      tree pushed_scope;
621
      const char *format = NULL;
622
 
623
      pushed_scope = push_scope (ctype);
624
      for (fndecls = VEC_index (tree, methods, ix);
625
           fndecls; fndecls = OVL_NEXT (fndecls))
626
        {
627
          tree p1, p2;
628
 
629
          fndecl = OVL_CURRENT (fndecls);
630
          p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
631
          p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
632
 
633
          /* We cannot simply call decls_match because this doesn't
634
             work for static member functions that are pretending to
635
             be methods, and because the name may have been changed by
636
             asm("new_name").  */
637
 
638
           /* Get rid of the this parameter on functions that become
639
              static.  */
640
          if (DECL_STATIC_FUNCTION_P (fndecl)
641
              && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
642
            p1 = TREE_CHAIN (p1);
643
 
644
          /* A member template definition only matches a member template
645
             declaration.  */
646
          if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
647
            continue;
648
 
649
          if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
650
                           TREE_TYPE (TREE_TYPE (fndecl)))
651
              && compparms (p1, p2)
652
              && (!is_template
653
                  || comp_template_parms (template_parms,
654
                                          DECL_TEMPLATE_PARMS (fndecl)))
655
              && (DECL_TEMPLATE_SPECIALIZATION (function)
656
                  == DECL_TEMPLATE_SPECIALIZATION (fndecl))
657
              && (!DECL_TEMPLATE_SPECIALIZATION (function)
658
                  || (DECL_TI_TEMPLATE (function)
659
                      == DECL_TI_TEMPLATE (fndecl))))
660
            break;
661
        }
662
      if (pushed_scope)
663
        pop_scope (pushed_scope);
664
      if (fndecls)
665
        return OVL_CURRENT (fndecls);
666
      error ("prototype for %q#D does not match any in class %qT",
667
             function, ctype);
668
      is_conv_op = DECL_CONV_FN_P (fndecl);
669
 
670
      if (is_conv_op)
671
        ix = CLASSTYPE_FIRST_CONVERSION_SLOT;
672
      fndecls = VEC_index (tree, methods, ix);
673
      while (fndecls)
674
        {
675
          fndecl = OVL_CURRENT (fndecls);
676
          fndecls = OVL_NEXT (fndecls);
677
 
678
          if (!fndecls && is_conv_op)
679
            {
680
              if (VEC_length (tree, methods) > (size_t) ++ix)
681
                {
682
                  fndecls = VEC_index (tree, methods, ix);
683
                  if (!DECL_CONV_FN_P (OVL_CURRENT (fndecls)))
684
                    {
685
                      fndecls = NULL_TREE;
686
                      is_conv_op = false;
687
                    }
688
                }
689
              else
690
                is_conv_op = false;
691
            }
692
          if (format)
693
            format = "                %+#D";
694
          else if (fndecls)
695
            format = N_("candidates are: %+#D");
696
          else
697
            format = N_("candidate is: %+#D");
698
          error (format, fndecl);
699
        }
700
    }
701
  else if (!COMPLETE_TYPE_P (ctype))
702
    cxx_incomplete_type_error (function, ctype);
703
  else
704
    error ("no %q#D member function declared in class %qT",
705
           function, ctype);
706
 
707
  /* If we did not find the method in the class, add it to avoid
708
     spurious errors (unless the CTYPE is not yet defined, in which
709
     case we'll only confuse ourselves when the function is declared
710
     properly within the class.  */
711
  if (COMPLETE_TYPE_P (ctype))
712
    add_method (ctype, function, NULL_TREE);
713
  return NULL_TREE;
714
}
715
 
716
/* DECL is a function with vague linkage.  Remember it so that at the
717
   end of the translation unit we can decide whether or not to emit
718
   it.  */
719
 
720
void
721
note_vague_linkage_fn (tree decl)
722
{
723
  if (!DECL_DEFERRED_FN (decl))
724
    {
725
      DECL_DEFERRED_FN (decl) = 1;
726
      DECL_DEFER_OUTPUT (decl) = 1;
727
      VEC_safe_push (tree, gc, deferred_fns, decl);
728
    }
729
}
730
 
731
/* Like note_vague_linkage_fn but for variables.  */
732
 
733
static void
734
note_vague_linkage_var (tree var)
735
{
736
  VEC_safe_push (tree, gc, pending_statics, var);
737
}
738
 
739
/* We have just processed the DECL, which is a static data member.
740
   The other parameters are as for cp_finish_decl.  */
741
 
742
void
743
finish_static_data_member_decl (tree decl,
744
                                tree init, bool init_const_expr_p,
745
                                tree asmspec_tree,
746
                                int flags)
747
{
748
  gcc_assert (TREE_PUBLIC (decl));
749
 
750
  DECL_CONTEXT (decl) = current_class_type;
751
 
752
  /* We cannot call pushdecl here, because that would fill in the
753
     TREE_CHAIN of our decl.  Instead, we modify cp_finish_decl to do
754
     the right thing, namely, to put this decl out straight away.  */
755
  /* current_class_type can be NULL_TREE in case of error.  */
756
  if (!asmspec_tree && current_class_type)
757
    DECL_INITIAL (decl) = error_mark_node;
758
 
759
  if (! processing_template_decl)
760
    note_vague_linkage_var (decl);
761
 
762
  if (LOCAL_CLASS_P (current_class_type))
763
    pedwarn ("local class %q#T shall not have static data member %q#D",
764
             current_class_type, decl);
765
 
766
  /* Static consts need not be initialized in the class definition.  */
767
  if (init != NULL_TREE && TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
768
    {
769
      static int explained = 0;
770
 
771
      error ("initializer invalid for static member with constructor");
772
      if (!explained)
773
        {
774
          error ("(an out of class initialization is required)");
775
          explained = 1;
776
        }
777
      init = NULL_TREE;
778
    }
779
  /* Force the compiler to know when an uninitialized static const
780
     member is being used.  */
781
  if (CP_TYPE_CONST_P (TREE_TYPE (decl)) && init == 0)
782
    TREE_USED (decl) = 1;
783
  DECL_INITIAL (decl) = init;
784
  DECL_IN_AGGR_P (decl) = 1;
785
 
786
  cp_finish_decl (decl, init, init_const_expr_p, asmspec_tree, flags);
787
}
788
 
789
/* DECLARATOR and DECLSPECS correspond to a class member.  The othe
790
   parameters are as for cp_finish_decl.  Return the DECL for the
791
   class member declared.  */
792
 
793
tree
794
grokfield (const cp_declarator *declarator,
795
           cp_decl_specifier_seq *declspecs,
796
           tree init, bool init_const_expr_p,
797
           tree asmspec_tree,
798
           tree attrlist)
799
{
800
  tree value;
801
  const char *asmspec = 0;
802
  int flags = LOOKUP_ONLYCONVERTING;
803
 
804
  if (!declspecs->any_specifiers_p
805
      && declarator->kind == cdk_id
806
      && declarator->u.id.qualifying_scope
807
      && TREE_CODE (declarator->u.id.unqualified_name) == IDENTIFIER_NODE)
808
    /* Access declaration */
809
    return do_class_using_decl (declarator->u.id.qualifying_scope,
810
                                declarator->u.id.unqualified_name);
811
 
812
  if (init
813
      && TREE_CODE (init) == TREE_LIST
814
      && TREE_VALUE (init) == error_mark_node
815
      && TREE_CHAIN (init) == NULL_TREE)
816
    init = NULL_TREE;
817
 
818
  value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
819
  if (! value || error_operand_p (value))
820
    /* friend or constructor went bad.  */
821
    return error_mark_node;
822
 
823
  if (TREE_CODE (value) == TYPE_DECL && init)
824
    {
825
      error ("typedef %qD is initialized (use __typeof__ instead)", value);
826
      init = NULL_TREE;
827
    }
828
 
829
  /* Pass friendly classes back.  */
830
  if (value == void_type_node)
831
    return value;
832
 
833
  /* Pass friend decls back.  */
834
  if ((TREE_CODE (value) == FUNCTION_DECL
835
       || TREE_CODE (value) == TEMPLATE_DECL)
836
      && DECL_CONTEXT (value) != current_class_type)
837
    return value;
838
 
839
  if (DECL_NAME (value) != NULL_TREE
840
      && IDENTIFIER_POINTER (DECL_NAME (value))[0] == '_'
841
      && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (value)), "_vptr"))
842
    error ("member %qD conflicts with virtual function table field name",
843
           value);
844
 
845
  /* Stash away type declarations.  */
846
  if (TREE_CODE (value) == TYPE_DECL)
847
    {
848
      DECL_NONLOCAL (value) = 1;
849
      DECL_CONTEXT (value) = current_class_type;
850
 
851
      if (processing_template_decl)
852
        value = push_template_decl (value);
853
 
854
      if (attrlist)
855
        {
856
          /* Avoid storing attributes in template parameters:
857
             tsubst is not ready to handle them.  */
858
          tree type = TREE_TYPE (value);
859
          if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
860
              || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
861
            sorry ("applying attributes to template parameters is not implemented");
862
          else
863
            cplus_decl_attributes (&value, attrlist, 0);
864
        }
865
 
866
      return value;
867
    }
868
 
869
  if (DECL_IN_AGGR_P (value))
870
    {
871
      error ("%qD is already defined in %qT", value, DECL_CONTEXT (value));
872
      return void_type_node;
873
    }
874
 
875
  if (asmspec_tree)
876
    asmspec = TREE_STRING_POINTER (asmspec_tree);
877
 
878
  if (init)
879
    {
880
      if (TREE_CODE (value) == FUNCTION_DECL)
881
        {
882
          /* Initializers for functions are rejected early in the parser.
883
             If we get here, it must be a pure specifier for a method.  */
884
          if (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE)
885
            {
886
              gcc_assert (error_operand_p (init) || integer_zerop (init));
887
              DECL_PURE_VIRTUAL_P (value) = 1;
888
            }
889
          else
890
            {
891
              gcc_assert (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE);
892
              error ("initializer specified for static member function %qD",
893
                     value);
894
            }
895
        }
896
      else if (pedantic && TREE_CODE (value) != VAR_DECL)
897
        /* Already complained in grokdeclarator.  */
898
        init = NULL_TREE;
899
      else if (!processing_template_decl)
900
        {
901
          if (TREE_CODE (init) == CONSTRUCTOR)
902
            init = digest_init (TREE_TYPE (value), init);
903
          else
904
            init = integral_constant_value (init);
905
 
906
          if (init != error_mark_node && !TREE_CONSTANT (init))
907
            {
908
              /* We can allow references to things that are effectively
909
                 static, since references are initialized with the
910
                 address.  */
911
              if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
912
                  || (TREE_STATIC (init) == 0
913
                      && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
914
                {
915
                  error ("field initializer is not constant");
916
                  init = error_mark_node;
917
                }
918
            }
919
        }
920
    }
921
 
922
  if (processing_template_decl
923
      && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
924
    {
925
      value = push_template_decl (value);
926
      if (error_operand_p (value))
927
        return error_mark_node;
928
    }
929
 
930
  if (attrlist)
931
    cplus_decl_attributes (&value, attrlist, 0);
932
 
933
  switch (TREE_CODE (value))
934
    {
935
    case VAR_DECL:
936
      finish_static_data_member_decl (value, init, init_const_expr_p,
937
                                      asmspec_tree, flags);
938
      return value;
939
 
940
    case FIELD_DECL:
941
      if (asmspec)
942
        error ("%<asm%> specifiers are not permitted on non-static data members");
943
      if (DECL_INITIAL (value) == error_mark_node)
944
        init = error_mark_node;
945
      cp_finish_decl (value, init, /*init_const_expr_p=*/false,
946
                      NULL_TREE, flags);
947
      DECL_INITIAL (value) = init;
948
      DECL_IN_AGGR_P (value) = 1;
949
      return value;
950
 
951
    case  FUNCTION_DECL:
952
      if (asmspec)
953
        set_user_assembler_name (value, asmspec);
954
      if (!DECL_FRIEND_P (value))
955
        grok_special_member_properties (value);
956
 
957
      cp_finish_decl (value, init, /*init_const_expr_p=*/false,
958
                      asmspec_tree, flags);
959
 
960
      /* Pass friends back this way.  */
961
      if (DECL_FRIEND_P (value))
962
        return void_type_node;
963
 
964
      DECL_IN_AGGR_P (value) = 1;
965
      return value;
966
 
967
    default:
968
      gcc_unreachable ();
969
    }
970
  return NULL_TREE;
971
}
972
 
973
/* Like `grokfield', but for bitfields.
974
   WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.  */
975
 
976
tree
977
grokbitfield (const cp_declarator *declarator,
978
              cp_decl_specifier_seq *declspecs, tree width)
979
{
980
  tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, NULL);
981
 
982
  if (! value) return NULL_TREE; /* friends went bad.  */
983
 
984
  /* Pass friendly classes back.  */
985
  if (TREE_CODE (value) == VOID_TYPE)
986
    return void_type_node;
987
 
988
  if (TREE_CODE (value) == TYPE_DECL)
989
    {
990
      error ("cannot declare %qD to be a bit-field type", value);
991
      return NULL_TREE;
992
    }
993
 
994
  /* Usually, finish_struct_1 catches bitfields with invalid types.
995
     But, in the case of bitfields with function type, we confuse
996
     ourselves into thinking they are member functions, so we must
997
     check here.  */
998
  if (TREE_CODE (value) == FUNCTION_DECL)
999
    {
1000
      error ("cannot declare bit-field %qD with function type",
1001
             DECL_NAME (value));
1002
      return NULL_TREE;
1003
    }
1004
 
1005
  if (DECL_IN_AGGR_P (value))
1006
    {
1007
      error ("%qD is already defined in the class %qT", value,
1008
             DECL_CONTEXT (value));
1009
      return void_type_node;
1010
    }
1011
 
1012
  if (TREE_STATIC (value))
1013
    {
1014
      error ("static member %qD cannot be a bit-field", value);
1015
      return NULL_TREE;
1016
    }
1017
  finish_decl (value, NULL_TREE, NULL_TREE);
1018
 
1019
  if (width != error_mark_node)
1020
    {
1021
      constant_expression_warning (width);
1022
      DECL_INITIAL (value) = width;
1023
      SET_DECL_C_BIT_FIELD (value);
1024
    }
1025
 
1026
  DECL_IN_AGGR_P (value) = 1;
1027
  return value;
1028
}
1029
 
1030
 
1031
void
1032
cplus_decl_attributes (tree *decl, tree attributes, int flags)
1033
{
1034
  if (*decl == NULL_TREE || *decl == void_type_node)
1035
    return;
1036
 
1037
  if (TREE_CODE (*decl) == TEMPLATE_DECL)
1038
    decl = &DECL_TEMPLATE_RESULT (*decl);
1039
 
1040
  decl_attributes (decl, attributes, flags);
1041
 
1042
  if (TREE_CODE (*decl) == TYPE_DECL)
1043
    SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1044
}
1045
 
1046
/* Walks through the namespace- or function-scope anonymous union
1047
   OBJECT, with the indicated TYPE, building appropriate VAR_DECLs.
1048
   Returns one of the fields for use in the mangled name.  */
1049
 
1050
static tree
1051
build_anon_union_vars (tree type, tree object)
1052
{
1053
  tree main_decl = NULL_TREE;
1054
  tree field;
1055
 
1056
  /* Rather than write the code to handle the non-union case,
1057
     just give an error.  */
1058
  if (TREE_CODE (type) != UNION_TYPE)
1059
    error ("anonymous struct not inside named type");
1060
 
1061
  for (field = TYPE_FIELDS (type);
1062
       field != NULL_TREE;
1063
       field = TREE_CHAIN (field))
1064
    {
1065
      tree decl;
1066
      tree ref;
1067
 
1068
      if (DECL_ARTIFICIAL (field))
1069
        continue;
1070
      if (TREE_CODE (field) != FIELD_DECL)
1071
        {
1072
          pedwarn ("%q+#D invalid; an anonymous union can only "
1073
                   "have non-static data members", field);
1074
          continue;
1075
        }
1076
 
1077
      if (TREE_PRIVATE (field))
1078
        pedwarn ("private member %q+#D in anonymous union", field);
1079
      else if (TREE_PROTECTED (field))
1080
        pedwarn ("protected member %q+#D in anonymous union", field);
1081
 
1082
      if (processing_template_decl)
1083
        ref = build_min_nt (COMPONENT_REF, object,
1084
                            DECL_NAME (field), NULL_TREE);
1085
      else
1086
        ref = build_class_member_access_expr (object, field, NULL_TREE,
1087
                                              false);
1088
 
1089
      if (DECL_NAME (field))
1090
        {
1091
          tree base;
1092
 
1093
          decl = build_decl (VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
1094
 
1095
          base = get_base_address (object);
1096
          TREE_PUBLIC (decl) = TREE_PUBLIC (base);
1097
          TREE_STATIC (decl) = TREE_STATIC (base);
1098
          DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
1099
 
1100
          SET_DECL_VALUE_EXPR (decl, ref);
1101
          DECL_HAS_VALUE_EXPR_P (decl) = 1;
1102
 
1103
          decl = pushdecl (decl);
1104
        }
1105
      else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1106
        decl = build_anon_union_vars (TREE_TYPE (field), ref);
1107
      else
1108
        decl = 0;
1109
 
1110
      if (main_decl == NULL_TREE)
1111
        main_decl = decl;
1112
    }
1113
 
1114
  return main_decl;
1115
}
1116
 
1117
/* Finish off the processing of a UNION_TYPE structure.  If the union is an
1118
   anonymous union, then all members must be laid out together.  PUBLIC_P
1119
   is nonzero if this union is not declared static.  */
1120
 
1121
void
1122
finish_anon_union (tree anon_union_decl)
1123
{
1124
  tree type;
1125
  tree main_decl;
1126
  bool public_p;
1127
 
1128
  if (anon_union_decl == error_mark_node)
1129
    return;
1130
 
1131
  type = TREE_TYPE (anon_union_decl);
1132
  public_p = TREE_PUBLIC (anon_union_decl);
1133
 
1134
  /* The VAR_DECL's context is the same as the TYPE's context.  */
1135
  DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1136
 
1137
  if (TYPE_FIELDS (type) == NULL_TREE)
1138
    return;
1139
 
1140
  if (public_p)
1141
    {
1142
      error ("namespace-scope anonymous aggregates must be static");
1143
      return;
1144
    }
1145
 
1146
  main_decl = build_anon_union_vars (type, anon_union_decl);
1147
  if (main_decl == NULL_TREE)
1148
    {
1149
      warning (0, "anonymous union with no members");
1150
      return;
1151
    }
1152
 
1153
  if (!processing_template_decl)
1154
    {
1155
      /* Use main_decl to set the mangled name.  */
1156
      DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1157
      mangle_decl (anon_union_decl);
1158
      DECL_NAME (anon_union_decl) = NULL_TREE;
1159
    }
1160
 
1161
  pushdecl (anon_union_decl);
1162
  if (building_stmt_tree ()
1163
      && at_function_scope_p ())
1164
    add_decl_expr (anon_union_decl);
1165
  else if (!processing_template_decl)
1166
    rest_of_decl_compilation (anon_union_decl,
1167
                              toplevel_bindings_p (), at_eof);
1168
}
1169
 
1170
/* Auxiliary functions to make type signatures for
1171
   `operator new' and `operator delete' correspond to
1172
   what compiler will be expecting.  */
1173
 
1174
tree
1175
coerce_new_type (tree type)
1176
{
1177
  int e = 0;
1178
  tree args = TYPE_ARG_TYPES (type);
1179
 
1180
  gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1181
 
1182
  if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1183
    {
1184
      e = 1;
1185
      error ("%<operator new%> must return type %qT", ptr_type_node);
1186
    }
1187
 
1188
  if (!args || args == void_list_node
1189
      || !same_type_p (TREE_VALUE (args), size_type_node))
1190
    {
1191
      e = 2;
1192
      if (args && args != void_list_node)
1193
        args = TREE_CHAIN (args);
1194
      pedwarn ("%<operator new%> takes type %<size_t%> (%qT) "
1195
               "as first parameter", size_type_node);
1196
    }
1197
  switch (e)
1198
  {
1199
    case 2:
1200
      args = tree_cons (NULL_TREE, size_type_node, args);
1201
      /* Fall through.  */
1202
    case 1:
1203
      type = build_exception_variant
1204
              (build_function_type (ptr_type_node, args),
1205
               TYPE_RAISES_EXCEPTIONS (type));
1206
      /* Fall through.  */
1207
    default:;
1208
  }
1209
  return type;
1210
}
1211
 
1212
tree
1213
coerce_delete_type (tree type)
1214
{
1215
  int e = 0;
1216
  tree args = TYPE_ARG_TYPES (type);
1217
 
1218
  gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1219
 
1220
  if (!same_type_p (TREE_TYPE (type), void_type_node))
1221
    {
1222
      e = 1;
1223
      error ("%<operator delete%> must return type %qT", void_type_node);
1224
    }
1225
 
1226
  if (!args || args == void_list_node
1227
      || !same_type_p (TREE_VALUE (args), ptr_type_node))
1228
    {
1229
      e = 2;
1230
      if (args && args != void_list_node)
1231
        args = TREE_CHAIN (args);
1232
      error ("%<operator delete%> takes type %qT as first parameter",
1233
             ptr_type_node);
1234
    }
1235
  switch (e)
1236
  {
1237
    case 2:
1238
      args = tree_cons (NULL_TREE, ptr_type_node, args);
1239
      /* Fall through.  */
1240
    case 1:
1241
      type = build_exception_variant
1242
              (build_function_type (void_type_node, args),
1243
               TYPE_RAISES_EXCEPTIONS (type));
1244
      /* Fall through.  */
1245
    default:;
1246
  }
1247
 
1248
  return type;
1249
}
1250
 
1251
static void
1252
mark_vtable_entries (tree decl)
1253
{
1254
  tree fnaddr;
1255
  unsigned HOST_WIDE_INT idx;
1256
 
1257
  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
1258
                              idx, fnaddr)
1259
    {
1260
      tree fn;
1261
 
1262
      STRIP_NOPS (fnaddr);
1263
 
1264
      if (TREE_CODE (fnaddr) != ADDR_EXPR
1265
          && TREE_CODE (fnaddr) != FDESC_EXPR)
1266
        /* This entry is an offset: a virtual base class offset, a
1267
           virtual call offset, an RTTI offset, etc.  */
1268
        continue;
1269
 
1270
      fn = TREE_OPERAND (fnaddr, 0);
1271
      TREE_ADDRESSABLE (fn) = 1;
1272
      /* When we don't have vcall offsets, we output thunks whenever
1273
         we output the vtables that contain them.  With vcall offsets,
1274
         we know all the thunks we'll need when we emit a virtual
1275
         function, so we emit the thunks there instead.  */
1276
      if (DECL_THUNK_P (fn))
1277
        use_thunk (fn, /*emit_p=*/0);
1278
      mark_used (fn);
1279
    }
1280
}
1281
 
1282
/* Set DECL up to have the closest approximation of "initialized common"
1283
   linkage available.  */
1284
 
1285
void
1286
comdat_linkage (tree decl)
1287
{
1288
  if (flag_weak)
1289
    make_decl_one_only (decl);
1290
  else if (TREE_CODE (decl) == FUNCTION_DECL
1291
           || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1292
    /* We can just emit function and compiler-generated variables
1293
       statically; having multiple copies is (for the most part) only
1294
       a waste of space.
1295
 
1296
       There are two correctness issues, however: the address of a
1297
       template instantiation with external linkage should be the
1298
       same, independent of what translation unit asks for the
1299
       address, and this will not hold when we emit multiple copies of
1300
       the function.  However, there's little else we can do.
1301
 
1302
       Also, by default, the typeinfo implementation assumes that
1303
       there will be only one copy of the string used as the name for
1304
       each type.  Therefore, if weak symbols are unavailable, the
1305
       run-time library should perform a more conservative check; it
1306
       should perform a string comparison, rather than an address
1307
       comparison.  */
1308
    TREE_PUBLIC (decl) = 0;
1309
  else
1310
    {
1311
      /* Static data member template instantiations, however, cannot
1312
         have multiple copies.  */
1313
      if (DECL_INITIAL (decl) == 0
1314
          || DECL_INITIAL (decl) == error_mark_node)
1315
        DECL_COMMON (decl) = 1;
1316
      else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1317
        {
1318
          DECL_COMMON (decl) = 1;
1319
          DECL_INITIAL (decl) = error_mark_node;
1320
        }
1321
      else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1322
        {
1323
          /* We can't do anything useful; leave vars for explicit
1324
             instantiation.  */
1325
          DECL_EXTERNAL (decl) = 1;
1326
          DECL_NOT_REALLY_EXTERN (decl) = 0;
1327
        }
1328
    }
1329
 
1330
  if (DECL_LANG_SPECIFIC (decl))
1331
    DECL_COMDAT (decl) = 1;
1332
}
1333
 
1334
/* For win32 we also want to put explicit instantiations in
1335
   linkonce sections, so that they will be merged with implicit
1336
   instantiations; otherwise we get duplicate symbol errors.
1337
   For Darwin we do not want explicit instantiations to be
1338
   linkonce.  */
1339
 
1340
void
1341
maybe_make_one_only (tree decl)
1342
{
1343
  /* We used to say that this was not necessary on targets that support weak
1344
     symbols, because the implicit instantiations will defer to the explicit
1345
     one.  However, that's not actually the case in SVR4; a strong definition
1346
     after a weak one is an error.  Also, not making explicit
1347
     instantiations one_only means that we can end up with two copies of
1348
     some template instantiations.  */
1349
  if (! flag_weak)
1350
    return;
1351
 
1352
  /* We can't set DECL_COMDAT on functions, or cp_finish_file will think
1353
     we can get away with not emitting them if they aren't used.  We need
1354
     to for variables so that cp_finish_decl will update their linkage,
1355
     because their DECL_INITIAL may not have been set properly yet.  */
1356
 
1357
  if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1358
      || (! DECL_EXPLICIT_INSTANTIATION (decl)
1359
          && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1360
    {
1361
      make_decl_one_only (decl);
1362
 
1363
      if (TREE_CODE (decl) == VAR_DECL)
1364
        {
1365
          DECL_COMDAT (decl) = 1;
1366
          /* Mark it needed so we don't forget to emit it.  */
1367
          mark_decl_referenced (decl);
1368
        }
1369
    }
1370
}
1371
 
1372
/* Determine whether or not we want to specifically import or export CTYPE,
1373
   using various heuristics.  */
1374
 
1375
static void
1376
import_export_class (tree ctype)
1377
{
1378
  /* -1 for imported, 1 for exported.  */
1379
  int import_export = 0;
1380
 
1381
  /* It only makes sense to call this function at EOF.  The reason is
1382
     that this function looks at whether or not the first non-inline
1383
     non-abstract virtual member function has been defined in this
1384
     translation unit.  But, we can't possibly know that until we've
1385
     seen the entire translation unit.  */
1386
  gcc_assert (at_eof);
1387
 
1388
  if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1389
    return;
1390
 
1391
  /* If MULTIPLE_SYMBOL_SPACES is set and we saw a #pragma interface,
1392
     we will have CLASSTYPE_INTERFACE_ONLY set but not
1393
     CLASSTYPE_INTERFACE_KNOWN.  In that case, we don't want to use this
1394
     heuristic because someone will supply a #pragma implementation
1395
     elsewhere, and deducing it here would produce a conflict.  */
1396
  if (CLASSTYPE_INTERFACE_ONLY (ctype))
1397
    return;
1398
 
1399
  if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1400
    import_export = -1;
1401
  else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1402
    import_export = 1;
1403
  else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1404
           && !flag_implicit_templates)
1405
    /* For a template class, without -fimplicit-templates, check the
1406
       repository.  If the virtual table is assigned to this
1407
       translation unit, then export the class; otherwise, import
1408
       it.  */
1409
      import_export = repo_export_class_p (ctype) ? 1 : -1;
1410
  else if (TYPE_POLYMORPHIC_P (ctype))
1411
    {
1412
      /* The ABI specifies that the virtual table and associated
1413
         information are emitted with the key method, if any.  */
1414
      tree method = CLASSTYPE_KEY_METHOD (ctype);
1415
      /* If weak symbol support is not available, then we must be
1416
         careful not to emit the vtable when the key function is
1417
         inline.  An inline function can be defined in multiple
1418
         translation units.  If we were to emit the vtable in each
1419
         translation unit containing a definition, we would get
1420
         multiple definition errors at link-time.  */
1421
      if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1422
        import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1423
    }
1424
 
1425
  /* When MULTIPLE_SYMBOL_SPACES is set, we cannot count on seeing
1426
     a definition anywhere else.  */
1427
  if (MULTIPLE_SYMBOL_SPACES && import_export == -1)
1428
    import_export = 0;
1429
 
1430
  /* Allow backends the chance to overrule the decision.  */
1431
  if (targetm.cxx.import_export_class)
1432
    import_export = targetm.cxx.import_export_class (ctype, import_export);
1433
 
1434
  if (import_export)
1435
    {
1436
      SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1437
      CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1438
    }
1439
}
1440
 
1441
/* Return true if VAR has already been provided to the back end; in that
1442
   case VAR should not be modified further by the front end.  */
1443
static bool
1444
var_finalized_p (tree var)
1445
{
1446
  return cgraph_varpool_node (var)->finalized;
1447
}
1448
 
1449
/* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1450
   must be emitted in this translation unit.  Mark it as such.  */
1451
 
1452
void
1453
mark_needed (tree decl)
1454
{
1455
  /* It's possible that we no longer need to set
1456
     TREE_SYMBOL_REFERENCED here directly, but doing so is
1457
     harmless.  */
1458
  TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = 1;
1459
  mark_decl_referenced (decl);
1460
}
1461
 
1462
/* DECL is either a FUNCTION_DECL or a VAR_DECL.  This function
1463
   returns true if a definition of this entity should be provided in
1464
   this object file.  Callers use this function to determine whether
1465
   or not to let the back end know that a definition of DECL is
1466
   available in this translation unit.  */
1467
 
1468
bool
1469
decl_needed_p (tree decl)
1470
{
1471
  gcc_assert (TREE_CODE (decl) == VAR_DECL
1472
              || TREE_CODE (decl) == FUNCTION_DECL);
1473
  /* This function should only be called at the end of the translation
1474
     unit.  We cannot be sure of whether or not something will be
1475
     COMDAT until that point.  */
1476
  gcc_assert (at_eof);
1477
 
1478
  /* All entities with external linkage that are not COMDAT should be
1479
     emitted; they may be referred to from other object files.  */
1480
  if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1481
    return true;
1482
  /* If this entity was used, let the back-end see it; it will decide
1483
     whether or not to emit it into the object file.  */
1484
  if (TREE_USED (decl)
1485
      || (DECL_ASSEMBLER_NAME_SET_P (decl)
1486
          && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
1487
      return true;
1488
  /* Otherwise, DECL does not need to be emitted -- yet.  A subsequent
1489
     reference to DECL might cause it to be emitted later.  */
1490
  return false;
1491
}
1492
 
1493
/* If necessary, write out the vtables for the dynamic class CTYPE.
1494
   Returns true if any vtables were emitted.  */
1495
 
1496
static bool
1497
maybe_emit_vtables (tree ctype)
1498
{
1499
  tree vtbl;
1500
  tree primary_vtbl;
1501
  int needed = 0;
1502
 
1503
  /* If the vtables for this class have already been emitted there is
1504
     nothing more to do.  */
1505
  primary_vtbl = CLASSTYPE_VTABLES (ctype);
1506
  if (var_finalized_p (primary_vtbl))
1507
    return false;
1508
  /* Ignore dummy vtables made by get_vtable_decl.  */
1509
  if (TREE_TYPE (primary_vtbl) == void_type_node)
1510
    return false;
1511
 
1512
  /* On some targets, we cannot determine the key method until the end
1513
     of the translation unit -- which is when this function is
1514
     called.  */
1515
  if (!targetm.cxx.key_method_may_be_inline ())
1516
    determine_key_method (ctype);
1517
 
1518
  /* See if any of the vtables are needed.  */
1519
  for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1520
    {
1521
      import_export_decl (vtbl);
1522
      if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1523
        needed = 1;
1524
    }
1525
  if (!needed)
1526
    {
1527
      /* If the references to this class' vtables are optimized away,
1528
         still emit the appropriate debugging information.  See
1529
         dfs_debug_mark.  */
1530
      if (DECL_COMDAT (primary_vtbl)
1531
          && CLASSTYPE_DEBUG_REQUESTED (ctype))
1532
        note_debug_info_needed (ctype);
1533
      return false;
1534
    }
1535
 
1536
  /* The ABI requires that we emit all of the vtables if we emit any
1537
     of them.  */
1538
  for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1539
    {
1540
      /* Mark entities references from the virtual table as used.  */
1541
      mark_vtable_entries (vtbl);
1542
 
1543
      if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1544
        {
1545
          tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl));
1546
 
1547
          /* It had better be all done at compile-time.  */
1548
          gcc_assert (!expr);
1549
        }
1550
 
1551
      /* Write it out.  */
1552
      DECL_EXTERNAL (vtbl) = 0;
1553
      rest_of_decl_compilation (vtbl, 1, 1);
1554
 
1555
      /* Because we're only doing syntax-checking, we'll never end up
1556
         actually marking the variable as written.  */
1557
      if (flag_syntax_only)
1558
        TREE_ASM_WRITTEN (vtbl) = 1;
1559
    }
1560
 
1561
  /* Since we're writing out the vtable here, also write the debug
1562
     info.  */
1563
  note_debug_info_needed (ctype);
1564
 
1565
  return true;
1566
}
1567
 
1568
/* Like c_determine_visibility, but with additional C++-specific
1569
   behavior.  */
1570
 
1571
void
1572
determine_visibility (tree decl)
1573
{
1574
  tree class_type;
1575
 
1576
  /* Cloned constructors and destructors get the same visibility as
1577
     the underlying function.  That should be set up in
1578
     maybe_clone_body.  */
1579
  gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
1580
 
1581
  /* Give the common code a chance to make a determination.  */
1582
  if (c_determine_visibility (decl))
1583
    return;
1584
 
1585
  /* If DECL is a member of a class, visibility specifiers on the
1586
     class can influence the visibility of the DECL.  */
1587
  if (DECL_CLASS_SCOPE_P (decl))
1588
    class_type = DECL_CONTEXT (decl);
1589
  else if (TREE_CODE (decl) == VAR_DECL
1590
           && DECL_TINFO_P (decl)
1591
           && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl))))
1592
    class_type = TREE_TYPE (DECL_NAME (decl));
1593
  else
1594
    {
1595
      /* Virtual tables have DECL_CONTEXT set to their associated class,
1596
         so they are automatically handled above.  */
1597
      gcc_assert (TREE_CODE (decl) != VAR_DECL
1598
                  || !DECL_VTABLE_OR_VTT_P (decl));
1599
      /* Entities not associated with any class just get the
1600
         visibility specified by their attributes.  */
1601
      return;
1602
    }
1603
 
1604
  /* By default, static data members and function members receive
1605
     the visibility of their containing class.  */
1606
  if (class_type)
1607
    {
1608
      if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
1609
          && lookup_attribute ("dllexport", TYPE_ATTRIBUTES (class_type)))
1610
        {
1611
          DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
1612
          DECL_VISIBILITY_SPECIFIED (decl) = 1;
1613
        }
1614
      else if (TREE_CODE (decl) == FUNCTION_DECL
1615
               && DECL_DECLARED_INLINE_P (decl)
1616
               && visibility_options.inlines_hidden)
1617
        {
1618
          /* Don't change it if it has been set explicitly by user.  */
1619
          if (!DECL_VISIBILITY_SPECIFIED (decl))
1620
            {
1621
              DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
1622
              DECL_VISIBILITY_SPECIFIED (decl) = 1;
1623
            }
1624
        }
1625
      else if (CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
1626
        {
1627
          DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
1628
          DECL_VISIBILITY_SPECIFIED (decl) = 1;
1629
        }
1630
      else if (!DECL_VISIBILITY_SPECIFIED (decl))
1631
        {
1632
          DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
1633
          DECL_VISIBILITY_SPECIFIED (decl) = 0;
1634
        }
1635
    }
1636
}
1637
 
1638
/* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
1639
   for DECL has not already been determined, do so now by setting
1640
   DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
1641
   function is called entities with vague linkage whose definitions
1642
   are available must have TREE_PUBLIC set.
1643
 
1644
   If this function decides to place DECL in COMDAT, it will set
1645
   appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
1646
   the caller to decide whether or not to clear DECL_EXTERNAL.  Some
1647
   callers defer that decision until it is clear that DECL is actually
1648
   required.  */
1649
 
1650
void
1651
import_export_decl (tree decl)
1652
{
1653
  int emit_p;
1654
  bool comdat_p;
1655
  bool import_p;
1656
  tree class_type = NULL_TREE;
1657
 
1658
  if (DECL_INTERFACE_KNOWN (decl))
1659
    return;
1660
 
1661
  /* We cannot determine what linkage to give to an entity with vague
1662
     linkage until the end of the file.  For example, a virtual table
1663
     for a class will be defined if and only if the key method is
1664
     defined in this translation unit.  As a further example, consider
1665
     that when compiling a translation unit that uses PCH file with
1666
     "-frepo" it would be incorrect to make decisions about what
1667
     entities to emit when building the PCH; those decisions must be
1668
     delayed until the repository information has been processed.  */
1669
  gcc_assert (at_eof);
1670
  /* Object file linkage for explicit instantiations is handled in
1671
     mark_decl_instantiated.  For static variables in functions with
1672
     vague linkage, maybe_commonize_var is used.
1673
 
1674
     Therefore, the only declarations that should be provided to this
1675
     function are those with external linkage that are:
1676
 
1677
     * implicit instantiations of function templates
1678
 
1679
     * inline function
1680
 
1681
     * implicit instantiations of static data members of class
1682
       templates
1683
 
1684
     * virtual tables
1685
 
1686
     * typeinfo objects
1687
 
1688
     Furthermore, all entities that reach this point must have a
1689
     definition available in this translation unit.
1690
 
1691
     The following assertions check these conditions.  */
1692
  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1693
              || TREE_CODE (decl) == VAR_DECL);
1694
  /* Any code that creates entities with TREE_PUBLIC cleared should
1695
     also set DECL_INTERFACE_KNOWN.  */
1696
  gcc_assert (TREE_PUBLIC (decl));
1697
  if (TREE_CODE (decl) == FUNCTION_DECL)
1698
    gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
1699
                || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
1700
                || DECL_DECLARED_INLINE_P (decl));
1701
  else
1702
    gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
1703
                || DECL_VTABLE_OR_VTT_P (decl)
1704
                || DECL_TINFO_P (decl));
1705
  /* Check that a definition of DECL is available in this translation
1706
     unit.  */
1707
  gcc_assert (!DECL_REALLY_EXTERN (decl));
1708
 
1709
  /* Assume that DECL will not have COMDAT linkage.  */
1710
  comdat_p = false;
1711
  /* Assume that DECL will not be imported into this translation
1712
     unit.  */
1713
  import_p = false;
1714
 
1715
  /* See if the repository tells us whether or not to emit DECL in
1716
     this translation unit.  */
1717
  emit_p = repo_emit_p (decl);
1718
  if (emit_p == 0)
1719
    import_p = true;
1720
  else if (emit_p == 1)
1721
    {
1722
      /* The repository indicates that this entity should be defined
1723
         here.  Make sure the back end honors that request.  */
1724
      if (TREE_CODE (decl) == VAR_DECL)
1725
        mark_needed (decl);
1726
      else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
1727
               || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
1728
        {
1729
          tree clone;
1730
          FOR_EACH_CLONE (clone, decl)
1731
            mark_needed (clone);
1732
        }
1733
      else
1734
        mark_needed (decl);
1735
      /* Output the definition as an ordinary strong definition.  */
1736
      DECL_EXTERNAL (decl) = 0;
1737
      DECL_INTERFACE_KNOWN (decl) = 1;
1738
      return;
1739
    }
1740
 
1741
  if (import_p)
1742
    /* We have already decided what to do with this DECL; there is no
1743
       need to check anything further.  */
1744
    ;
1745
  else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
1746
    {
1747
      class_type = DECL_CONTEXT (decl);
1748
      import_export_class (class_type);
1749
      if (TYPE_FOR_JAVA (class_type))
1750
        import_p = true;
1751
      else if (CLASSTYPE_INTERFACE_KNOWN (class_type)
1752
               && CLASSTYPE_INTERFACE_ONLY (class_type))
1753
        import_p = true;
1754
      else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
1755
               && !CLASSTYPE_USE_TEMPLATE (class_type)
1756
               && CLASSTYPE_KEY_METHOD (class_type)
1757
               && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type)))
1758
        /* The ABI requires that all virtual tables be emitted with
1759
           COMDAT linkage.  However, on systems where COMDAT symbols
1760
           don't show up in the table of contents for a static
1761
           archive, or on systems without weak symbols (where we
1762
           approximate COMDAT linkage by using internal linkage), the
1763
           linker will report errors about undefined symbols because
1764
           it will not see the virtual table definition.  Therefore,
1765
           in the case that we know that the virtual table will be
1766
           emitted in only one translation unit, we make the virtual
1767
           table an ordinary definition with external linkage.  */
1768
        DECL_EXTERNAL (decl) = 0;
1769
      else if (CLASSTYPE_INTERFACE_KNOWN (class_type))
1770
        {
1771
          /* CLASS_TYPE is being exported from this translation unit,
1772
             so DECL should be defined here.  */
1773
          if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (class_type))
1774
            /* If a class is declared in a header with the "extern
1775
               template" extension, then it will not be instantiated,
1776
               even in translation units that would normally require
1777
               it.  Often such classes are explicitly instantiated in
1778
               one translation unit.  Therefore, the explicit
1779
               instantiation must be made visible to other translation
1780
               units.  */
1781
            DECL_EXTERNAL (decl) = 0;
1782
          else
1783
            {
1784
              /* The generic C++ ABI says that class data is always
1785
                 COMDAT, even if there is a key function.  Some
1786
                 variants (e.g., the ARM EABI) says that class data
1787
                 only has COMDAT linkage if the class data might
1788
                 be emitted in more than one translation unit.  */
1789
              if (!CLASSTYPE_KEY_METHOD (class_type)
1790
                  || targetm.cxx.class_data_always_comdat ())
1791
                {
1792
                  /* The ABI requires COMDAT linkage.  Normally, we
1793
                     only emit COMDAT things when they are needed;
1794
                     make sure that we realize that this entity is
1795
                     indeed needed.  */
1796
                  comdat_p = true;
1797
                  mark_needed (decl);
1798
                }
1799
            }
1800
        }
1801
      else if (!flag_implicit_templates
1802
               && CLASSTYPE_IMPLICIT_INSTANTIATION (class_type))
1803
        import_p = true;
1804
      else
1805
        comdat_p = true;
1806
    }
1807
  else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
1808
    {
1809
      tree type = TREE_TYPE (DECL_NAME (decl));
1810
      if (CLASS_TYPE_P (type))
1811
        {
1812
          class_type = type;
1813
          import_export_class (type);
1814
          if (CLASSTYPE_INTERFACE_KNOWN (type)
1815
              && TYPE_POLYMORPHIC_P (type)
1816
              && CLASSTYPE_INTERFACE_ONLY (type)
1817
              /* If -fno-rtti was specified, then we cannot be sure
1818
                 that RTTI information will be emitted with the
1819
                 virtual table of the class, so we must emit it
1820
                 wherever it is used.  */
1821
              && flag_rtti)
1822
            import_p = true;
1823
          else
1824
            {
1825
              if (CLASSTYPE_INTERFACE_KNOWN (type)
1826
                  && !CLASSTYPE_INTERFACE_ONLY (type))
1827
                {
1828
                  comdat_p = targetm.cxx.class_data_always_comdat ();
1829
                  mark_needed (decl);
1830
                  if (!flag_weak)
1831
                    {
1832
                      comdat_p = false;
1833
                      DECL_EXTERNAL (decl) = 0;
1834
                    }
1835
                }
1836
              else
1837
                comdat_p = true;
1838
            }
1839
        }
1840
      else
1841
        comdat_p = true;
1842
    }
1843
  else if (DECL_TEMPLATE_INSTANTIATION (decl)
1844
           || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
1845
    {
1846
      /* DECL is an implicit instantiation of a function or static
1847
         data member.  */
1848
      if (flag_implicit_templates
1849
          || (flag_implicit_inline_templates
1850
              && TREE_CODE (decl) == FUNCTION_DECL
1851
              && DECL_DECLARED_INLINE_P (decl)))
1852
        comdat_p = true;
1853
      else
1854
        /* If we are not implicitly generating templates, then mark
1855
           this entity as undefined in this translation unit.  */
1856
        import_p = true;
1857
    }
1858
  else if (DECL_FUNCTION_MEMBER_P (decl))
1859
    {
1860
      if (!DECL_DECLARED_INLINE_P (decl))
1861
        {
1862
          tree ctype = DECL_CONTEXT (decl);
1863
          import_export_class (ctype);
1864
          if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1865
            {
1866
              DECL_NOT_REALLY_EXTERN (decl)
1867
                = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
1868
                     || (DECL_DECLARED_INLINE_P (decl)
1869
                         && ! flag_implement_inlines
1870
                         && !DECL_VINDEX (decl)));
1871
 
1872
              if (!DECL_NOT_REALLY_EXTERN (decl))
1873
                DECL_EXTERNAL (decl) = 1;
1874
 
1875
              /* Always make artificials weak.  */
1876
              if (DECL_ARTIFICIAL (decl) && flag_weak)
1877
                comdat_p = true;
1878
              else
1879
                maybe_make_one_only (decl);
1880
            }
1881
        }
1882
      else
1883
        comdat_p = true;
1884
    }
1885
  else
1886
    comdat_p = true;
1887
 
1888
  if (import_p)
1889
    {
1890
      /* If we are importing DECL into this translation unit, mark is
1891
         an undefined here.  */
1892
      DECL_EXTERNAL (decl) = 1;
1893
      DECL_NOT_REALLY_EXTERN (decl) = 0;
1894
    }
1895
  else if (comdat_p)
1896
    {
1897
      /* If we decided to put DECL in COMDAT, mark it accordingly at
1898
         this point.  */
1899
      comdat_linkage (decl);
1900
    }
1901
 
1902
  /* Give the target a chance to override the visibility associated
1903
     with DECL.  */
1904
  if (TREE_CODE (decl) == VAR_DECL
1905
      && (DECL_TINFO_P (decl)
1906
          || (DECL_VTABLE_OR_VTT_P (decl)
1907
              /* Construction virtual tables are not exported because
1908
                 they cannot be referred to from other object files;
1909
                 their name is not standardized by the ABI.  */
1910
              && !DECL_CONSTRUCTION_VTABLE_P (decl)))
1911
      && TREE_PUBLIC (decl)
1912
      && !DECL_REALLY_EXTERN (decl)
1913
      && DECL_VISIBILITY_SPECIFIED (decl)
1914
      && (!class_type || !CLASSTYPE_VISIBILITY_SPECIFIED (class_type)))
1915
    targetm.cxx.determine_class_data_visibility (decl);
1916
 
1917
  DECL_INTERFACE_KNOWN (decl) = 1;
1918
}
1919
 
1920
/* Return an expression that performs the destruction of DECL, which
1921
   must be a VAR_DECL whose type has a non-trivial destructor, or is
1922
   an array whose (innermost) elements have a non-trivial destructor.  */
1923
 
1924
tree
1925
build_cleanup (tree decl)
1926
{
1927
  tree temp;
1928
  tree type = TREE_TYPE (decl);
1929
 
1930
  /* This function should only be called for declarations that really
1931
     require cleanups.  */
1932
  gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
1933
 
1934
  /* Treat all objects with destructors as used; the destructor may do
1935
     something substantive.  */
1936
  mark_used (decl);
1937
 
1938
  if (TREE_CODE (type) == ARRAY_TYPE)
1939
    temp = decl;
1940
  else
1941
    {
1942
      cxx_mark_addressable (decl);
1943
      temp = build1 (ADDR_EXPR, build_pointer_type (type), decl);
1944
    }
1945
  temp = build_delete (TREE_TYPE (temp), temp,
1946
                       sfk_complete_destructor,
1947
                       LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
1948
  return temp;
1949
}
1950
 
1951
/* Returns the initialization guard variable for the variable DECL,
1952
   which has static storage duration.  */
1953
 
1954
tree
1955
get_guard (tree decl)
1956
{
1957
  tree sname;
1958
  tree guard;
1959
 
1960
  sname = mangle_guard_variable (decl);
1961
  guard = IDENTIFIER_GLOBAL_VALUE (sname);
1962
  if (! guard)
1963
    {
1964
      tree guard_type;
1965
 
1966
      /* We use a type that is big enough to contain a mutex as well
1967
         as an integer counter.  */
1968
      guard_type = targetm.cxx.guard_type ();
1969
      guard = build_decl (VAR_DECL, sname, guard_type);
1970
 
1971
      /* The guard should have the same linkage as what it guards.  */
1972
      TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
1973
      TREE_STATIC (guard) = TREE_STATIC (decl);
1974
      DECL_COMMON (guard) = DECL_COMMON (decl);
1975
      DECL_ONE_ONLY (guard) = DECL_ONE_ONLY (decl);
1976
      if (TREE_PUBLIC (decl))
1977
        DECL_WEAK (guard) = DECL_WEAK (decl);
1978
 
1979
      DECL_ARTIFICIAL (guard) = 1;
1980
      DECL_IGNORED_P (guard) = 1;
1981
      TREE_USED (guard) = 1;
1982
      pushdecl_top_level_and_finish (guard, NULL_TREE);
1983
    }
1984
  return guard;
1985
}
1986
 
1987
/* Return those bits of the GUARD variable that should be set when the
1988
   guarded entity is actually initialized.  */
1989
 
1990
static tree
1991
get_guard_bits (tree guard)
1992
{
1993
  if (!targetm.cxx.guard_mask_bit ())
1994
    {
1995
      /* We only set the first byte of the guard, in order to leave room
1996
         for a mutex in the high-order bits.  */
1997
      guard = build1 (ADDR_EXPR,
1998
                      build_pointer_type (TREE_TYPE (guard)),
1999
                      guard);
2000
      guard = build1 (NOP_EXPR,
2001
                      build_pointer_type (char_type_node),
2002
                      guard);
2003
      guard = build1 (INDIRECT_REF, char_type_node, guard);
2004
    }
2005
 
2006
  return guard;
2007
}
2008
 
2009
/* Return an expression which determines whether or not the GUARD
2010
   variable has already been initialized.  */
2011
 
2012
tree
2013
get_guard_cond (tree guard)
2014
{
2015
  tree guard_value;
2016
 
2017
  /* Check to see if the GUARD is zero.  */
2018
  guard = get_guard_bits (guard);
2019
 
2020
  /* Mask off all but the low bit.  */
2021
  if (targetm.cxx.guard_mask_bit ())
2022
    {
2023
      guard_value = integer_one_node;
2024
      if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2025
        guard_value = convert (TREE_TYPE (guard), guard_value);
2026
        guard = cp_build_binary_op (BIT_AND_EXPR, guard, guard_value);
2027
    }
2028
 
2029
  guard_value = integer_zero_node;
2030
  if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2031
    guard_value = convert (TREE_TYPE (guard), guard_value);
2032
  return cp_build_binary_op (EQ_EXPR, guard, guard_value);
2033
}
2034
 
2035
/* Return an expression which sets the GUARD variable, indicating that
2036
   the variable being guarded has been initialized.  */
2037
 
2038
tree
2039
set_guard (tree guard)
2040
{
2041
  tree guard_init;
2042
 
2043
  /* Set the GUARD to one.  */
2044
  guard = get_guard_bits (guard);
2045
  guard_init = integer_one_node;
2046
  if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
2047
    guard_init = convert (TREE_TYPE (guard), guard_init);
2048
  return build_modify_expr (guard, NOP_EXPR, guard_init);
2049
}
2050
 
2051
/* Start the process of running a particular set of global constructors
2052
   or destructors.  Subroutine of do_[cd]tors.  */
2053
 
2054
static tree
2055
start_objects (int method_type, int initp)
2056
{
2057
  tree body;
2058
  tree fndecl;
2059
  char type[10];
2060
 
2061
  /* Make ctor or dtor function.  METHOD_TYPE may be 'I' or 'D'.  */
2062
 
2063
  if (initp != DEFAULT_INIT_PRIORITY)
2064
    {
2065
      char joiner;
2066
 
2067
#ifdef JOINER
2068
      joiner = JOINER;
2069
#else
2070
      joiner = '_';
2071
#endif
2072
 
2073
      sprintf (type, "%c%c%.5u", method_type, joiner, initp);
2074
    }
2075
  else
2076
    sprintf (type, "%c", method_type);
2077
 
2078
  fndecl = build_lang_decl (FUNCTION_DECL,
2079
                            get_file_function_name_long (type),
2080
                            build_function_type (void_type_node,
2081
                                                 void_list_node));
2082
  start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
2083
 
2084
  /* It can be a static function as long as collect2 does not have
2085
     to scan the object file to find its ctor/dtor routine.  */
2086
  TREE_PUBLIC (current_function_decl) = ! targetm.have_ctors_dtors;
2087
 
2088
  /* Mark this declaration as used to avoid spurious warnings.  */
2089
  TREE_USED (current_function_decl) = 1;
2090
 
2091
  /* Mark this function as a global constructor or destructor.  */
2092
  if (method_type == 'I')
2093
    DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2094
  else
2095
    DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2096
  DECL_LANG_SPECIFIC (current_function_decl)->decl_flags.u2sel = 1;
2097
 
2098
  body = begin_compound_stmt (BCS_FN_BODY);
2099
 
2100
  /* We cannot allow these functions to be elided, even if they do not
2101
     have external linkage.  And, there's no point in deferring
2102
     compilation of thes functions; they're all going to have to be
2103
     out anyhow.  */
2104
  DECL_INLINE (current_function_decl) = 0;
2105
  DECL_UNINLINABLE (current_function_decl) = 1;
2106
 
2107
  return body;
2108
}
2109
 
2110
/* Finish the process of running a particular set of global constructors
2111
   or destructors.  Subroutine of do_[cd]tors.  */
2112
 
2113
static void
2114
finish_objects (int method_type, int initp, tree body)
2115
{
2116
  tree fn;
2117
 
2118
  /* Finish up.  */
2119
  finish_compound_stmt (body);
2120
  fn = finish_function (0);
2121
  expand_or_defer_fn (fn);
2122
 
2123
  /* When only doing semantic analysis, and no RTL generation, we
2124
     can't call functions that directly emit assembly code; there is
2125
     no assembly file in which to put the code.  */
2126
  if (flag_syntax_only)
2127
    return;
2128
 
2129
  if (targetm.have_ctors_dtors)
2130
    {
2131
      rtx fnsym = XEXP (DECL_RTL (fn), 0);
2132
      cgraph_mark_needed_node (cgraph_node (fn));
2133
      if (method_type == 'I')
2134
        (* targetm.asm_out.constructor) (fnsym, initp);
2135
      else
2136
        (* targetm.asm_out.destructor) (fnsym, initp);
2137
    }
2138
}
2139
 
2140
/* The names of the parameters to the function created to handle
2141
   initializations and destructions for objects with static storage
2142
   duration.  */
2143
#define INITIALIZE_P_IDENTIFIER "__initialize_p"
2144
#define PRIORITY_IDENTIFIER "__priority"
2145
 
2146
/* The name of the function we create to handle initializations and
2147
   destructions for objects with static storage duration.  */
2148
#define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2149
 
2150
/* The declaration for the __INITIALIZE_P argument.  */
2151
static GTY(()) tree initialize_p_decl;
2152
 
2153
/* The declaration for the __PRIORITY argument.  */
2154
static GTY(()) tree priority_decl;
2155
 
2156
/* The declaration for the static storage duration function.  */
2157
static GTY(()) tree ssdf_decl;
2158
 
2159
/* All the static storage duration functions created in this
2160
   translation unit.  */
2161
static GTY(()) VEC(tree,gc) *ssdf_decls;
2162
 
2163
/* A map from priority levels to information about that priority
2164
   level.  There may be many such levels, so efficient lookup is
2165
   important.  */
2166
static splay_tree priority_info_map;
2167
 
2168
/* Begins the generation of the function that will handle all
2169
   initialization and destruction of objects with static storage
2170
   duration.  The function generated takes two parameters of type
2171
   `int': __INITIALIZE_P and __PRIORITY.  If __INITIALIZE_P is
2172
   nonzero, it performs initializations.  Otherwise, it performs
2173
   destructions.  It only performs those initializations or
2174
   destructions with the indicated __PRIORITY.  The generated function
2175
   returns no value.
2176
 
2177
   It is assumed that this function will only be called once per
2178
   translation unit.  */
2179
 
2180
static tree
2181
start_static_storage_duration_function (unsigned count)
2182
{
2183
  tree parm_types;
2184
  tree type;
2185
  tree body;
2186
  char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2187
 
2188
  /* Create the identifier for this function.  It will be of the form
2189
     SSDF_IDENTIFIER_<number>.  */
2190
  sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2191
 
2192
  /* Create the parameters.  */
2193
  parm_types = void_list_node;
2194
  parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2195
  parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2196
  type = build_function_type (void_type_node, parm_types);
2197
 
2198
  /* Create the FUNCTION_DECL itself.  */
2199
  ssdf_decl = build_lang_decl (FUNCTION_DECL,
2200
                               get_identifier (id),
2201
                               type);
2202
  TREE_PUBLIC (ssdf_decl) = 0;
2203
  DECL_ARTIFICIAL (ssdf_decl) = 1;
2204
 
2205
  /* Put this function in the list of functions to be called from the
2206
     static constructors and destructors.  */
2207
  if (!ssdf_decls)
2208
    {
2209
      ssdf_decls = VEC_alloc (tree, gc, 32);
2210
 
2211
      /* Take this opportunity to initialize the map from priority
2212
         numbers to information about that priority level.  */
2213
      priority_info_map = splay_tree_new (splay_tree_compare_ints,
2214
                                          /*delete_key_fn=*/0,
2215
                                          /*delete_value_fn=*/
2216
                                          (splay_tree_delete_value_fn) &free);
2217
 
2218
      /* We always need to generate functions for the
2219
         DEFAULT_INIT_PRIORITY so enter it now.  That way when we walk
2220
         priorities later, we'll be sure to find the
2221
         DEFAULT_INIT_PRIORITY.  */
2222
      get_priority_info (DEFAULT_INIT_PRIORITY);
2223
    }
2224
 
2225
  VEC_safe_push (tree, gc, ssdf_decls, ssdf_decl);
2226
 
2227
  /* Create the argument list.  */
2228
  initialize_p_decl = cp_build_parm_decl
2229
    (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2230
  DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2231
  TREE_USED (initialize_p_decl) = 1;
2232
  priority_decl = cp_build_parm_decl
2233
    (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2234
  DECL_CONTEXT (priority_decl) = ssdf_decl;
2235
  TREE_USED (priority_decl) = 1;
2236
 
2237
  TREE_CHAIN (initialize_p_decl) = priority_decl;
2238
  DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2239
 
2240
  /* Put the function in the global scope.  */
2241
  pushdecl (ssdf_decl);
2242
 
2243
  /* Start the function itself.  This is equivalent to declaring the
2244
     function as:
2245
 
2246
       static void __ssdf (int __initialize_p, init __priority_p);
2247
 
2248
     It is static because we only need to call this function from the
2249
     various constructor and destructor functions for this module.  */
2250
  start_preparsed_function (ssdf_decl,
2251
                            /*attrs=*/NULL_TREE,
2252
                            SF_PRE_PARSED);
2253
 
2254
  /* Set up the scope of the outermost block in the function.  */
2255
  body = begin_compound_stmt (BCS_FN_BODY);
2256
 
2257
  /* This function must not be deferred because we are depending on
2258
     its compilation to tell us what is TREE_SYMBOL_REFERENCED.  */
2259
  DECL_INLINE (ssdf_decl) = 0;
2260
  DECL_UNINLINABLE (ssdf_decl) = 1;
2261
 
2262
  return body;
2263
}
2264
 
2265
/* Finish the generation of the function which performs initialization
2266
   and destruction of objects with static storage duration.  After
2267
   this point, no more such objects can be created.  */
2268
 
2269
static void
2270
finish_static_storage_duration_function (tree body)
2271
{
2272
  /* Close out the function.  */
2273
  finish_compound_stmt (body);
2274
  expand_or_defer_fn (finish_function (0));
2275
}
2276
 
2277
/* Return the information about the indicated PRIORITY level.  If no
2278
   code to handle this level has yet been generated, generate the
2279
   appropriate prologue.  */
2280
 
2281
static priority_info
2282
get_priority_info (int priority)
2283
{
2284
  priority_info pi;
2285
  splay_tree_node n;
2286
 
2287
  n = splay_tree_lookup (priority_info_map,
2288
                         (splay_tree_key) priority);
2289
  if (!n)
2290
    {
2291
      /* Create a new priority information structure, and insert it
2292
         into the map.  */
2293
      pi = xmalloc (sizeof (struct priority_info_s));
2294
      pi->initializations_p = 0;
2295
      pi->destructions_p = 0;
2296
      splay_tree_insert (priority_info_map,
2297
                         (splay_tree_key) priority,
2298
                         (splay_tree_value) pi);
2299
    }
2300
  else
2301
    pi = (priority_info) n->value;
2302
 
2303
  return pi;
2304
}
2305
 
2306
/* The effective initialization priority of a DECL.  */
2307
 
2308
#define DECL_EFFECTIVE_INIT_PRIORITY(decl)                                    \
2309
        ((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \
2310
         ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl))
2311
 
2312
/* Whether a DECL needs a guard to protect it against multiple
2313
   initialization.  */
2314
 
2315
#define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl)      \
2316
                                                    || DECL_ONE_ONLY (decl) \
2317
                                                    || DECL_WEAK (decl)))
2318
 
2319
/* Set up to handle the initialization or destruction of DECL.  If
2320
   INITP is nonzero, we are initializing the variable.  Otherwise, we
2321
   are destroying it.  */
2322
 
2323
static void
2324
one_static_initialization_or_destruction (tree decl, tree init, bool initp)
2325
{
2326
  tree guard_if_stmt = NULL_TREE;
2327
  tree guard;
2328
 
2329
  /* If we are supposed to destruct and there's a trivial destructor,
2330
     nothing has to be done.  */
2331
  if (!initp
2332
      && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2333
    return;
2334
 
2335
  /* Trick the compiler into thinking we are at the file and line
2336
     where DECL was declared so that error-messages make sense, and so
2337
     that the debugger will show somewhat sensible file and line
2338
     information.  */
2339
  input_location = DECL_SOURCE_LOCATION (decl);
2340
 
2341
  /* Because of:
2342
 
2343
       [class.access.spec]
2344
 
2345
       Access control for implicit calls to the constructors,
2346
       the conversion functions, or the destructor called to
2347
       create and destroy a static data member is performed as
2348
       if these calls appeared in the scope of the member's
2349
       class.
2350
 
2351
     we pretend we are in a static member function of the class of
2352
     which the DECL is a member.  */
2353
  if (member_p (decl))
2354
    {
2355
      DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
2356
      DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
2357
    }
2358
 
2359
  /* Assume we don't need a guard.  */
2360
  guard = NULL_TREE;
2361
  /* We need a guard if this is an object with external linkage that
2362
     might be initialized in more than one place.  (For example, a
2363
     static data member of a template, when the data member requires
2364
     construction.)  */
2365
  if (NEEDS_GUARD_P (decl))
2366
    {
2367
      tree guard_cond;
2368
 
2369
      guard = get_guard (decl);
2370
 
2371
      /* When using __cxa_atexit, we just check the GUARD as we would
2372
         for a local static.  */
2373
      if (flag_use_cxa_atexit)
2374
        {
2375
          /* When using __cxa_atexit, we never try to destroy
2376
             anything from a static destructor.  */
2377
          gcc_assert (initp);
2378
          guard_cond = get_guard_cond (guard);
2379
        }
2380
      /* If we don't have __cxa_atexit, then we will be running
2381
         destructors from .fini sections, or their equivalents.  So,
2382
         we need to know how many times we've tried to initialize this
2383
         object.  We do initializations only if the GUARD is zero,
2384
         i.e., if we are the first to initialize the variable.  We do
2385
         destructions only if the GUARD is one, i.e., if we are the
2386
         last to destroy the variable.  */
2387
      else if (initp)
2388
        guard_cond
2389
          = cp_build_binary_op (EQ_EXPR,
2390
                                build_unary_op (PREINCREMENT_EXPR,
2391
                                                guard,
2392
                                                /*noconvert=*/1),
2393
                                integer_one_node);
2394
      else
2395
        guard_cond
2396
          = cp_build_binary_op (EQ_EXPR,
2397
                                build_unary_op (PREDECREMENT_EXPR,
2398
                                                guard,
2399
                                                /*noconvert=*/1),
2400
                                integer_zero_node);
2401
 
2402
      guard_if_stmt = begin_if_stmt ();
2403
      finish_if_stmt_cond (guard_cond, guard_if_stmt);
2404
    }
2405
 
2406
 
2407
  /* If we're using __cxa_atexit, we have not already set the GUARD,
2408
     so we must do so now.  */
2409
  if (guard && initp && flag_use_cxa_atexit)
2410
    finish_expr_stmt (set_guard (guard));
2411
 
2412
  /* Perform the initialization or destruction.  */
2413
  if (initp)
2414
    {
2415
      if (init)
2416
        finish_expr_stmt (init);
2417
 
2418
      /* If we're using __cxa_atexit, register a function that calls the
2419
         destructor for the object.  */
2420
      if (flag_use_cxa_atexit)
2421
        finish_expr_stmt (register_dtor_fn (decl));
2422
    }
2423
  else
2424
    finish_expr_stmt (build_cleanup (decl));
2425
 
2426
  /* Finish the guard if-stmt, if necessary.  */
2427
  if (guard)
2428
    {
2429
      finish_then_clause (guard_if_stmt);
2430
      finish_if_stmt (guard_if_stmt);
2431
    }
2432
 
2433
  /* Now that we're done with DECL we don't need to pretend to be a
2434
     member of its class any longer.  */
2435
  DECL_CONTEXT (current_function_decl) = NULL_TREE;
2436
  DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
2437
}
2438
 
2439
/* Generate code to do the initialization or destruction of the decls in VARS,
2440
   a TREE_LIST of VAR_DECL with static storage duration.
2441
   Whether initialization or destruction is performed is specified by INITP.  */
2442
 
2443
static void
2444
do_static_initialization_or_destruction (tree vars, bool initp)
2445
{
2446
  tree node, init_if_stmt, cond;
2447
 
2448
  /* Build the outer if-stmt to check for initialization or destruction.  */
2449
  init_if_stmt = begin_if_stmt ();
2450
  cond = initp ? integer_one_node : integer_zero_node;
2451
  cond = cp_build_binary_op (EQ_EXPR,
2452
                                  initialize_p_decl,
2453
                                  cond);
2454
  finish_if_stmt_cond (cond, init_if_stmt);
2455
 
2456
  node = vars;
2457
  do {
2458
    tree decl = TREE_VALUE (node);
2459
    tree priority_if_stmt;
2460
    int priority;
2461
    priority_info pi;
2462
 
2463
    /* If we don't need a destructor, there's nothing to do.  Avoid
2464
       creating a possibly empty if-stmt.  */
2465
    if (!initp && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2466
      {
2467
        node = TREE_CHAIN (node);
2468
        continue;
2469
      }
2470
 
2471
    /* Remember that we had an initialization or finalization at this
2472
       priority.  */
2473
    priority = DECL_EFFECTIVE_INIT_PRIORITY (decl);
2474
    pi = get_priority_info (priority);
2475
    if (initp)
2476
      pi->initializations_p = 1;
2477
    else
2478
      pi->destructions_p = 1;
2479
 
2480
    /* Conditionalize this initialization on being in the right priority
2481
       and being initializing/finalizing appropriately.  */
2482
    priority_if_stmt = begin_if_stmt ();
2483
    cond = cp_build_binary_op (EQ_EXPR,
2484
                               priority_decl,
2485
                               build_int_cst (NULL_TREE, priority));
2486
    finish_if_stmt_cond (cond, priority_if_stmt);
2487
 
2488
    /* Process initializers with same priority.  */
2489
    for (; node
2490
           && DECL_EFFECTIVE_INIT_PRIORITY (TREE_VALUE (node)) == priority;
2491
         node = TREE_CHAIN (node))
2492
      /* Do one initialization or destruction.  */
2493
      one_static_initialization_or_destruction (TREE_VALUE (node),
2494
                                                TREE_PURPOSE (node), initp);
2495
 
2496
    /* Finish up the priority if-stmt body.  */
2497
    finish_then_clause (priority_if_stmt);
2498
    finish_if_stmt (priority_if_stmt);
2499
 
2500
  } while (node);
2501
 
2502
  /* Finish up the init/destruct if-stmt body.  */
2503
  finish_then_clause (init_if_stmt);
2504
  finish_if_stmt (init_if_stmt);
2505
}
2506
 
2507
/* VARS is a list of variables with static storage duration which may
2508
   need initialization and/or finalization.  Remove those variables
2509
   that don't really need to be initialized or finalized, and return
2510
   the resulting list.  The order in which the variables appear in
2511
   VARS is in reverse order of the order in which they should actually
2512
   be initialized.  The list we return is in the unreversed order;
2513
   i.e., the first variable should be initialized first.  */
2514
 
2515
static tree
2516
prune_vars_needing_no_initialization (tree *vars)
2517
{
2518
  tree *var = vars;
2519
  tree result = NULL_TREE;
2520
 
2521
  while (*var)
2522
    {
2523
      tree t = *var;
2524
      tree decl = TREE_VALUE (t);
2525
      tree init = TREE_PURPOSE (t);
2526
 
2527
      /* Deal gracefully with error.  */
2528
      if (decl == error_mark_node)
2529
        {
2530
          var = &TREE_CHAIN (t);
2531
          continue;
2532
        }
2533
 
2534
      /* The only things that can be initialized are variables.  */
2535
      gcc_assert (TREE_CODE (decl) == VAR_DECL);
2536
 
2537
      /* If this object is not defined, we don't need to do anything
2538
         here.  */
2539
      if (DECL_EXTERNAL (decl))
2540
        {
2541
          var = &TREE_CHAIN (t);
2542
          continue;
2543
        }
2544
 
2545
      /* Also, if the initializer already contains errors, we can bail
2546
         out now.  */
2547
      if (init && TREE_CODE (init) == TREE_LIST
2548
          && value_member (error_mark_node, init))
2549
        {
2550
          var = &TREE_CHAIN (t);
2551
          continue;
2552
        }
2553
 
2554
      /* This variable is going to need initialization and/or
2555
         finalization, so we add it to the list.  */
2556
      *var = TREE_CHAIN (t);
2557
      TREE_CHAIN (t) = result;
2558
      result = t;
2559
    }
2560
 
2561
  return result;
2562
}
2563
 
2564
/* Make sure we have told the back end about all the variables in
2565
   VARS.  */
2566
 
2567
static void
2568
write_out_vars (tree vars)
2569
{
2570
  tree v;
2571
 
2572
  for (v = vars; v; v = TREE_CHAIN (v))
2573
    {
2574
      tree var = TREE_VALUE (v);
2575
      if (!var_finalized_p (var))
2576
        {
2577
          import_export_decl (var);
2578
          rest_of_decl_compilation (var, 1, 1);
2579
        }
2580
    }
2581
}
2582
 
2583
/* Generate a static constructor (if CONSTRUCTOR_P) or destructor
2584
   (otherwise) that will initialize all gobal objects with static
2585
   storage duration having the indicated PRIORITY.  */
2586
 
2587
static void
2588
generate_ctor_or_dtor_function (bool constructor_p, int priority,
2589
                                location_t *locus)
2590
{
2591
  char function_key;
2592
  tree arguments;
2593
  tree fndecl;
2594
  tree body;
2595
  size_t i;
2596
 
2597
  input_location = *locus;
2598
#ifdef USE_MAPPED_LOCATION
2599
  /* ??? */
2600
#else
2601
  locus->line++;
2602
#endif
2603
 
2604
  /* We use `I' to indicate initialization and `D' to indicate
2605
     destruction.  */
2606
  function_key = constructor_p ? 'I' : 'D';
2607
 
2608
  /* We emit the function lazily, to avoid generating empty
2609
     global constructors and destructors.  */
2610
  body = NULL_TREE;
2611
 
2612
  /* For Objective-C++, we may need to initialize metadata found in this module.
2613
     This must be done _before_ any other static initializations.  */
2614
  if (c_dialect_objc () && (priority == DEFAULT_INIT_PRIORITY)
2615
      && constructor_p && objc_static_init_needed_p ())
2616
    {
2617
      body = start_objects (function_key, priority);
2618
      static_ctors = objc_generate_static_init_call (static_ctors);
2619
    }
2620
 
2621
  /* Call the static storage duration function with appropriate
2622
     arguments.  */
2623
  for (i = 0; VEC_iterate (tree, ssdf_decls, i, fndecl); ++i)
2624
    {
2625
      /* Calls to pure or const functions will expand to nothing.  */
2626
      if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
2627
        {
2628
          if (! body)
2629
            body = start_objects (function_key, priority);
2630
 
2631
          arguments = tree_cons (NULL_TREE,
2632
                                 build_int_cst (NULL_TREE, priority),
2633
                                 NULL_TREE);
2634
          arguments = tree_cons (NULL_TREE,
2635
                                 build_int_cst (NULL_TREE, constructor_p),
2636
                                 arguments);
2637
          finish_expr_stmt (build_function_call (fndecl, arguments));
2638
        }
2639
    }
2640
 
2641
  /* If we're generating code for the DEFAULT_INIT_PRIORITY, throw in
2642
     calls to any functions marked with attributes indicating that
2643
     they should be called at initialization- or destruction-time.  */
2644
  if (priority == DEFAULT_INIT_PRIORITY)
2645
    {
2646
      tree fns;
2647
 
2648
      for (fns = constructor_p ? static_ctors : static_dtors;
2649
           fns;
2650
           fns = TREE_CHAIN (fns))
2651
        {
2652
          fndecl = TREE_VALUE (fns);
2653
 
2654
          /* Calls to pure/const functions will expand to nothing.  */
2655
          if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
2656
            {
2657
              if (! body)
2658
                body = start_objects (function_key, priority);
2659
              finish_expr_stmt (build_function_call (fndecl, NULL_TREE));
2660
            }
2661
        }
2662
    }
2663
 
2664
  /* Close out the function.  */
2665
  if (body)
2666
    finish_objects (function_key, priority, body);
2667
}
2668
 
2669
/* Generate constructor and destructor functions for the priority
2670
   indicated by N.  */
2671
 
2672
static int
2673
generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
2674
{
2675
  location_t *locus = data;
2676
  int priority = (int) n->key;
2677
  priority_info pi = (priority_info) n->value;
2678
 
2679
  /* Generate the functions themselves, but only if they are really
2680
     needed.  */
2681
  if (pi->initializations_p
2682
      || (priority == DEFAULT_INIT_PRIORITY && static_ctors))
2683
    generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
2684
  if (pi->destructions_p
2685
      || (priority == DEFAULT_INIT_PRIORITY && static_dtors))
2686
    generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
2687
 
2688
  /* Keep iterating.  */
2689
  return 0;
2690
}
2691
 
2692
/* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
2693
   decls referenced from frontend specific constructs; it will be called
2694
   only for language-specific tree nodes.
2695
 
2696
   Here we must deal with member pointers.  */
2697
 
2698
tree
2699
cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
2700
                            tree from ATTRIBUTE_UNUSED)
2701
{
2702
  tree t = *tp;
2703
 
2704
  switch (TREE_CODE (t))
2705
    {
2706
    case PTRMEM_CST:
2707
      if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
2708
        cgraph_mark_needed_node (cgraph_node (PTRMEM_CST_MEMBER (t)));
2709
      break;
2710
    case BASELINK:
2711
      if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
2712
        cgraph_mark_needed_node (cgraph_node (BASELINK_FUNCTIONS (t)));
2713
      break;
2714
    case VAR_DECL:
2715
      if (DECL_VTABLE_OR_VTT_P (t))
2716
        {
2717
          /* The ABI requires that all virtual tables be emitted
2718
             whenever one of them is.  */
2719
          tree vtbl;
2720
          for (vtbl = CLASSTYPE_VTABLES (DECL_CONTEXT (t));
2721
               vtbl;
2722
               vtbl = TREE_CHAIN (vtbl))
2723
            mark_decl_referenced (vtbl);
2724
        }
2725
      else if (DECL_CONTEXT (t)
2726
               && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
2727
        /* If we need a static variable in a function, then we
2728
           need the containing function.  */
2729
        mark_decl_referenced (DECL_CONTEXT (t));
2730
      break;
2731
    default:
2732
      break;
2733
    }
2734
 
2735
  return NULL;
2736
}
2737
 
2738
/* Java requires that we be able to reference a local address for a
2739
   method, and not be confused by PLT entries.  If hidden aliases are
2740
   supported, emit one for each java function that we've emitted.  */
2741
 
2742
static void
2743
build_java_method_aliases (void)
2744
{
2745
  struct cgraph_node *node;
2746
 
2747
#ifndef HAVE_GAS_HIDDEN
2748
  return;
2749
#endif
2750
 
2751
  for (node = cgraph_nodes; node ; node = node->next)
2752
    {
2753
      tree fndecl = node->decl;
2754
 
2755
      if (TREE_ASM_WRITTEN (fndecl)
2756
          && DECL_CONTEXT (fndecl)
2757
          && TYPE_P (DECL_CONTEXT (fndecl))
2758
          && TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
2759
          && TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
2760
        {
2761
          /* Mangle the name in a predictable way; we need to reference
2762
             this from a java compiled object file.  */
2763
          tree oid, nid, alias;
2764
          const char *oname;
2765
          char *nname;
2766
 
2767
          oid = DECL_ASSEMBLER_NAME (fndecl);
2768
          oname = IDENTIFIER_POINTER (oid);
2769
          gcc_assert (oname[0] == '_' && oname[1] == 'Z');
2770
          nname = ACONCAT (("_ZGA", oname+2, NULL));
2771
          nid = get_identifier (nname);
2772
 
2773
          alias = make_alias_for (fndecl, nid);
2774
          TREE_PUBLIC (alias) = 1;
2775
          DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
2776
 
2777
          assemble_alias (alias, oid);
2778
        }
2779
    }
2780
}
2781
 
2782
/* This routine is called from the last rule in yyparse ().
2783
   Its job is to create all the code needed to initialize and
2784
   destroy the global aggregates.  We do the destruction
2785
   first, since that way we only need to reverse the decls once.  */
2786
 
2787
void
2788
cp_finish_file (void)
2789
{
2790
  tree vars;
2791
  bool reconsider;
2792
  size_t i;
2793
  location_t locus;
2794
  unsigned ssdf_count = 0;
2795
  int retries = 0;
2796
  tree decl;
2797
 
2798
  locus = input_location;
2799
  at_eof = 1;
2800
 
2801
  /* Bad parse errors.  Just forget about it.  */
2802
  if (! global_bindings_p () || current_class_type || decl_namespace_list)
2803
    return;
2804
 
2805
  if (pch_file)
2806
    c_common_write_pch ();
2807
 
2808
#ifdef USE_MAPPED_LOCATION
2809
  /* FIXME - huh? */
2810
#else
2811
  /* Otherwise, GDB can get confused, because in only knows
2812
     about source for LINENO-1 lines.  */
2813
  input_line -= 1;
2814
#endif
2815
 
2816
  /* We now have to write out all the stuff we put off writing out.
2817
     These include:
2818
 
2819
       o Template specializations that we have not yet instantiated,
2820
         but which are needed.
2821
       o Initialization and destruction for non-local objects with
2822
         static storage duration.  (Local objects with static storage
2823
         duration are initialized when their scope is first entered,
2824
         and are cleaned up via atexit.)
2825
       o Virtual function tables.
2826
 
2827
     All of these may cause others to be needed.  For example,
2828
     instantiating one function may cause another to be needed, and
2829
     generating the initializer for an object may cause templates to be
2830
     instantiated, etc., etc.  */
2831
 
2832
  timevar_push (TV_VARCONST);
2833
 
2834
  emit_support_tinfos ();
2835
 
2836
  do
2837
    {
2838
      tree t;
2839
      tree decl;
2840
 
2841
      reconsider = false;
2842
 
2843
      /* If there are templates that we've put off instantiating, do
2844
         them now.  */
2845
      instantiate_pending_templates (retries);
2846
      ggc_collect ();
2847
 
2848
      /* Write out virtual tables as required.  Note that writing out
2849
         the virtual table for a template class may cause the
2850
         instantiation of members of that class.  If we write out
2851
         vtables then we remove the class from our list so we don't
2852
         have to look at it again.  */
2853
 
2854
      while (keyed_classes != NULL_TREE
2855
             && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
2856
        {
2857
          reconsider = true;
2858
          keyed_classes = TREE_CHAIN (keyed_classes);
2859
        }
2860
 
2861
      t = keyed_classes;
2862
      if (t != NULL_TREE)
2863
        {
2864
          tree next = TREE_CHAIN (t);
2865
 
2866
          while (next)
2867
            {
2868
              if (maybe_emit_vtables (TREE_VALUE (next)))
2869
                {
2870
                  reconsider = true;
2871
                  TREE_CHAIN (t) = TREE_CHAIN (next);
2872
                }
2873
              else
2874
                t = next;
2875
 
2876
              next = TREE_CHAIN (t);
2877
            }
2878
        }
2879
 
2880
      /* Write out needed type info variables.  We have to be careful
2881
         looping through unemitted decls, because emit_tinfo_decl may
2882
         cause other variables to be needed. New elements will be
2883
         appended, and we remove from the vector those that actually
2884
         get emitted.  */
2885
      for (i = VEC_length (tree, unemitted_tinfo_decls);
2886
           VEC_iterate (tree, unemitted_tinfo_decls, --i, t);)
2887
        if (emit_tinfo_decl (t))
2888
          {
2889
            reconsider = true;
2890
            VEC_unordered_remove (tree, unemitted_tinfo_decls, i);
2891
          }
2892
 
2893
      /* The list of objects with static storage duration is built up
2894
         in reverse order.  We clear STATIC_AGGREGATES so that any new
2895
         aggregates added during the initialization of these will be
2896
         initialized in the correct order when we next come around the
2897
         loop.  */
2898
      vars = prune_vars_needing_no_initialization (&static_aggregates);
2899
 
2900
      if (vars)
2901
        {
2902
          /* We need to start a new initialization function each time
2903
             through the loop.  That's because we need to know which
2904
             vtables have been referenced, and TREE_SYMBOL_REFERENCED
2905
             isn't computed until a function is finished, and written
2906
             out.  That's a deficiency in the back-end.  When this is
2907
             fixed, these initialization functions could all become
2908
             inline, with resulting performance improvements.  */
2909
          tree ssdf_body;
2910
 
2911
          /* Set the line and file, so that it is obviously not from
2912
             the source file.  */
2913
          input_location = locus;
2914
          ssdf_body = start_static_storage_duration_function (ssdf_count);
2915
 
2916
          /* Make sure the back end knows about all the variables.  */
2917
          write_out_vars (vars);
2918
 
2919
          /* First generate code to do all the initializations.  */
2920
          if (vars)
2921
            do_static_initialization_or_destruction (vars, /*initp=*/true);
2922
 
2923
          /* Then, generate code to do all the destructions.  Do these
2924
             in reverse order so that the most recently constructed
2925
             variable is the first destroyed.  If we're using
2926
             __cxa_atexit, then we don't need to do this; functions
2927
             were registered at initialization time to destroy the
2928
             local statics.  */
2929
          if (!flag_use_cxa_atexit && vars)
2930
            {
2931
              vars = nreverse (vars);
2932
              do_static_initialization_or_destruction (vars, /*initp=*/false);
2933
            }
2934
          else
2935
            vars = NULL_TREE;
2936
 
2937
          /* Finish up the static storage duration function for this
2938
             round.  */
2939
          input_location = locus;
2940
          finish_static_storage_duration_function (ssdf_body);
2941
 
2942
          /* All those initializations and finalizations might cause
2943
             us to need more inline functions, more template
2944
             instantiations, etc.  */
2945
          reconsider = true;
2946
          ssdf_count++;
2947
#ifdef USE_MAPPED_LOCATION
2948
          /* ??? */
2949
#else
2950
          locus.line++;
2951
#endif
2952
        }
2953
 
2954
      /* Go through the set of inline functions whose bodies have not
2955
         been emitted yet.  If out-of-line copies of these functions
2956
         are required, emit them.  */
2957
      for (i = 0; VEC_iterate (tree, deferred_fns, i, decl); ++i)
2958
        {
2959
          /* Does it need synthesizing?  */
2960
          if (DECL_ARTIFICIAL (decl) && ! DECL_INITIAL (decl)
2961
              && (! DECL_REALLY_EXTERN (decl) || DECL_INLINE (decl)))
2962
            {
2963
              /* Even though we're already at the top-level, we push
2964
                 there again.  That way, when we pop back a few lines
2965
                 hence, all of our state is restored.  Otherwise,
2966
                 finish_function doesn't clean things up, and we end
2967
                 up with CURRENT_FUNCTION_DECL set.  */
2968
              push_to_top_level ();
2969
              /* The decl's location will mark where it was first
2970
                 needed.  Save that so synthesize method can indicate
2971
                 where it was needed from, in case of error  */
2972
              input_location = DECL_SOURCE_LOCATION (decl);
2973
              synthesize_method (decl);
2974
              pop_from_top_level ();
2975
              reconsider = true;
2976
            }
2977
 
2978
          if (!DECL_SAVED_TREE (decl))
2979
            continue;
2980
 
2981
          /* We lie to the back-end, pretending that some functions
2982
             are not defined when they really are.  This keeps these
2983
             functions from being put out unnecessarily.  But, we must
2984
             stop lying when the functions are referenced, or if they
2985
             are not comdat since they need to be put out now.  If
2986
             DECL_INTERFACE_KNOWN, then we have already set
2987
             DECL_EXTERNAL appropriately, so there's no need to check
2988
             again, and we do not want to clear DECL_EXTERNAL if a
2989
             previous call to import_export_decl set it.
2990
 
2991
             This is done in a separate for cycle, because if some
2992
             deferred function is contained in another deferred
2993
             function later in deferred_fns varray,
2994
             rest_of_compilation would skip this function and we
2995
             really cannot expand the same function twice.  */
2996
          import_export_decl (decl);
2997
          if (DECL_NOT_REALLY_EXTERN (decl)
2998
              && DECL_INITIAL (decl)
2999
              && decl_needed_p (decl))
3000
            DECL_EXTERNAL (decl) = 0;
3001
 
3002
          /* If we're going to need to write this function out, and
3003
             there's already a body for it, create RTL for it now.
3004
             (There might be no body if this is a method we haven't
3005
             gotten around to synthesizing yet.)  */
3006
          if (!DECL_EXTERNAL (decl)
3007
              && decl_needed_p (decl)
3008
              && !TREE_ASM_WRITTEN (decl)
3009
              && !cgraph_node (decl)->local.finalized)
3010
            {
3011
              /* We will output the function; no longer consider it in this
3012
                 loop.  */
3013
              DECL_DEFER_OUTPUT (decl) = 0;
3014
              /* Generate RTL for this function now that we know we
3015
                 need it.  */
3016
              expand_or_defer_fn (decl);
3017
              /* If we're compiling -fsyntax-only pretend that this
3018
                 function has been written out so that we don't try to
3019
                 expand it again.  */
3020
              if (flag_syntax_only)
3021
                TREE_ASM_WRITTEN (decl) = 1;
3022
              reconsider = true;
3023
            }
3024
        }
3025
 
3026
      if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
3027
        reconsider = true;
3028
 
3029
      /* Static data members are just like namespace-scope globals.  */
3030
      for (i = 0; VEC_iterate (tree, pending_statics, i, decl); ++i)
3031
        {
3032
          if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl))
3033
            continue;
3034
          import_export_decl (decl);
3035
          /* If this static data member is needed, provide it to the
3036
             back end.  */
3037
          if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
3038
            DECL_EXTERNAL (decl) = 0;
3039
        }
3040
      if (VEC_length (tree, pending_statics) != 0
3041
          && wrapup_global_declarations (VEC_address (tree, pending_statics),
3042
                                         VEC_length (tree, pending_statics)))
3043
        reconsider = true;
3044
 
3045
      retries++;
3046
    }
3047
  while (reconsider);
3048
 
3049
  /* All used inline functions must have a definition at this point.  */
3050
  for (i = 0; VEC_iterate (tree, deferred_fns, i, decl); ++i)
3051
    {
3052
      if (/* Check online inline functions that were actually used.  */
3053
          TREE_USED (decl) && DECL_DECLARED_INLINE_P (decl)
3054
          /* If the definition actually was available here, then the
3055
             fact that the function was not defined merely represents
3056
             that for some reason (use of a template repository,
3057
             #pragma interface, etc.) we decided not to emit the
3058
             definition here.  */
3059
          && !DECL_INITIAL (decl)
3060
          /* An explicit instantiation can be used to specify
3061
             that the body is in another unit. It will have
3062
             already verified there was a definition.  */
3063
          && !DECL_EXPLICIT_INSTANTIATION (decl))
3064
        {
3065
          warning (0, "inline function %q+D used but never defined", decl);
3066
          /* Avoid a duplicate warning from check_global_declaration_1.  */
3067
          TREE_NO_WARNING (decl) = 1;
3068
        }
3069
    }
3070
 
3071
  /* We give C linkage to static constructors and destructors.  */
3072
  push_lang_context (lang_name_c);
3073
 
3074
  /* Generate initialization and destruction functions for all
3075
     priorities for which they are required.  */
3076
  if (priority_info_map)
3077
    splay_tree_foreach (priority_info_map,
3078
                        generate_ctor_and_dtor_functions_for_priority,
3079
                        /*data=*/&locus);
3080
  else
3081
    {
3082
      /* If we have a ctor or this is obj-c++ and we need a static init,
3083
         call generate_ctor_or_dtor_function.  */
3084
      if (static_ctors || (c_dialect_objc () && objc_static_init_needed_p ()))
3085
        generate_ctor_or_dtor_function (/*constructor_p=*/true,
3086
                                        DEFAULT_INIT_PRIORITY, &locus);
3087
      if (static_dtors)
3088
        generate_ctor_or_dtor_function (/*constructor_p=*/false,
3089
                                        DEFAULT_INIT_PRIORITY, &locus);
3090
    }
3091
 
3092
  /* We're done with the splay-tree now.  */
3093
  if (priority_info_map)
3094
    splay_tree_delete (priority_info_map);
3095
 
3096
  /* Generate any missing aliases.  */
3097
  maybe_apply_pending_pragma_weaks ();
3098
 
3099
  /* We're done with static constructors, so we can go back to "C++"
3100
     linkage now.  */
3101
  pop_lang_context ();
3102
 
3103
  cgraph_finalize_compilation_unit ();
3104
  cgraph_optimize ();
3105
 
3106
  /* Now, issue warnings about static, but not defined, functions,
3107
     etc., and emit debugging information.  */
3108
  walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
3109
  if (VEC_length (tree, pending_statics) != 0)
3110
    {
3111
      check_global_declarations (VEC_address (tree, pending_statics),
3112
                                 VEC_length (tree, pending_statics));
3113
      emit_debug_global_declarations (VEC_address (tree, pending_statics),
3114
                                      VEC_length (tree, pending_statics));
3115
    }
3116
 
3117
  /* Generate hidden aliases for Java.  */
3118
  build_java_method_aliases ();
3119
 
3120
  finish_repo ();
3121
 
3122
  /* The entire file is now complete.  If requested, dump everything
3123
     to a file.  */
3124
  {
3125
    int flags;
3126
    FILE *stream = dump_begin (TDI_tu, &flags);
3127
 
3128
    if (stream)
3129
      {
3130
        dump_node (global_namespace, flags & ~TDF_SLIM, stream);
3131
        dump_end (TDI_tu, stream);
3132
      }
3133
  }
3134
 
3135
  timevar_pop (TV_VARCONST);
3136
 
3137
  if (flag_detailed_statistics)
3138
    {
3139
      dump_tree_statistics ();
3140
      dump_time_statistics ();
3141
    }
3142
  input_location = locus;
3143
 
3144
#ifdef ENABLE_CHECKING
3145
  validate_conversion_obstack ();
3146
#endif /* ENABLE_CHECKING */
3147
}
3148
 
3149
/* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
3150
   function to call in parse-tree form; it has not yet been
3151
   semantically analyzed.  ARGS are the arguments to the function.
3152
   They have already been semantically analyzed.  */
3153
 
3154
tree
3155
build_offset_ref_call_from_tree (tree fn, tree args)
3156
{
3157
  tree orig_fn;
3158
  tree orig_args;
3159
  tree expr;
3160
  tree object;
3161
 
3162
  orig_fn = fn;
3163
  orig_args = args;
3164
  object = TREE_OPERAND (fn, 0);
3165
 
3166
  if (processing_template_decl)
3167
    {
3168
      gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
3169
                  || TREE_CODE (fn) == MEMBER_REF);
3170
      if (type_dependent_expression_p (fn)
3171
          || any_type_dependent_arguments_p (args))
3172
        return build_min_nt (CALL_EXPR, fn, args, NULL_TREE);
3173
 
3174
      /* Transform the arguments and add the implicit "this"
3175
         parameter.  That must be done before the FN is transformed
3176
         because we depend on the form of FN.  */
3177
      args = build_non_dependent_args (args);
3178
      if (TREE_CODE (fn) == DOTSTAR_EXPR)
3179
        object = build_unary_op (ADDR_EXPR, object, 0);
3180
      object = build_non_dependent_expr (object);
3181
      args = tree_cons (NULL_TREE, object, args);
3182
      /* Now that the arguments are done, transform FN.  */
3183
      fn = build_non_dependent_expr (fn);
3184
    }
3185
 
3186
  /* A qualified name corresponding to a bound pointer-to-member is
3187
     represented as an OFFSET_REF:
3188
 
3189
        struct B { void g(); };
3190
        void (B::*p)();
3191
        void B::g() { (this->*p)(); }  */
3192
  if (TREE_CODE (fn) == OFFSET_REF)
3193
    {
3194
      tree object_addr = build_unary_op (ADDR_EXPR, object, 0);
3195
      fn = TREE_OPERAND (fn, 1);
3196
      fn = get_member_function_from_ptrfunc (&object_addr, fn);
3197
      args = tree_cons (NULL_TREE, object_addr, args);
3198
    }
3199
 
3200
  expr = build_function_call (fn, args);
3201
  if (processing_template_decl && expr != error_mark_node)
3202
    return build_min_non_dep (CALL_EXPR, expr, orig_fn, orig_args, NULL_TREE);
3203
  return expr;
3204
}
3205
 
3206
 
3207
void
3208
check_default_args (tree x)
3209
{
3210
  tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
3211
  bool saw_def = false;
3212
  int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
3213
  for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
3214
    {
3215
      if (TREE_PURPOSE (arg))
3216
        saw_def = true;
3217
      else if (saw_def)
3218
        {
3219
          error ("default argument missing for parameter %P of %q+#D", i, x);
3220
          TREE_PURPOSE (arg) = error_mark_node;
3221
        }
3222
    }
3223
}
3224
 
3225
/* Mark DECL (eithet a _DECL or a BASELINK) as "used" in the program.
3226
   If DECL is a specialization or implicitly declared class member,
3227
   generate the actual definition.  */
3228
 
3229
void
3230
mark_used (tree decl)
3231
{
3232
  HOST_WIDE_INT saved_processing_template_decl = 0;
3233
 
3234
  /* If DECL is a BASELINK for a single function, then treat it just
3235
     like the DECL for the function.  Otherwise, if the BASELINK is
3236
     for an overloaded function, we don't know which function was
3237
     actually used until after overload resolution.  */
3238
  if (TREE_CODE (decl) == BASELINK)
3239
    {
3240
      decl = BASELINK_FUNCTIONS (decl);
3241
      if (really_overloaded_fn (decl))
3242
        return;
3243
      decl = OVL_CURRENT (decl);
3244
    }
3245
 
3246
  TREE_USED (decl) = 1;
3247
  /* If we don't need a value, then we don't need to synthesize DECL.  */
3248
  if (skip_evaluation)
3249
    return;
3250
  /* Normally, we can wait until instantiation-time to synthesize
3251
     DECL.  However, if DECL is a static data member initialized with
3252
     a constant, we need the value right now because a reference to
3253
     such a data member is not value-dependent.  */
3254
  if (TREE_CODE (decl) == VAR_DECL
3255
      && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)
3256
      && DECL_CLASS_SCOPE_P (decl))
3257
    {
3258
      /* Don't try to instantiate members of dependent types.  We
3259
         cannot just use dependent_type_p here because this function
3260
         may be called from fold_non_dependent_expr, and then we may
3261
         see dependent types, even though processing_template_decl
3262
         will not be set.  */
3263
      if (CLASSTYPE_TEMPLATE_INFO ((DECL_CONTEXT (decl)))
3264
          && uses_template_parms (CLASSTYPE_TI_ARGS (DECL_CONTEXT (decl))))
3265
        return;
3266
      /* Pretend that we are not in a template, even if we are, so
3267
         that the static data member initializer will be processed.  */
3268
      saved_processing_template_decl = processing_template_decl;
3269
      processing_template_decl = 0;
3270
    }
3271
 
3272
  if (processing_template_decl)
3273
    return;
3274
 
3275
  if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
3276
      && !TREE_ASM_WRITTEN (decl))
3277
    /* Remember it, so we can check it was defined.  */
3278
    {
3279
      if (DECL_DEFERRED_FN (decl))
3280
        return;
3281
 
3282
      /* Remember the current location for a function we will end up
3283
         synthesizing.  Then we can inform the user where it was
3284
         required in the case of error.  */
3285
      if (DECL_ARTIFICIAL (decl) && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
3286
          && !DECL_THUNK_P (decl))
3287
        DECL_SOURCE_LOCATION (decl) = input_location;
3288
 
3289
      note_vague_linkage_fn (decl);
3290
    }
3291
 
3292
  assemble_external (decl);
3293
 
3294
  /* Is it a synthesized method that needs to be synthesized?  */
3295
  if (TREE_CODE (decl) == FUNCTION_DECL
3296
      && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
3297
      && DECL_ARTIFICIAL (decl)
3298
      && !DECL_THUNK_P (decl)
3299
      && ! DECL_INITIAL (decl)
3300
      /* Kludge: don't synthesize for default args.  Unfortunately this
3301
         rules out initializers of namespace-scoped objects too, but
3302
         it's sort-of ok if the implicit ctor or dtor decl keeps
3303
         pointing to the class location.  */
3304
      && current_function_decl)
3305
    {
3306
      synthesize_method (decl);
3307
      /* If we've already synthesized the method we don't need to
3308
         instantiate it, so we can return right away.  */
3309
      return;
3310
    }
3311
 
3312
  /* If this is a function or variable that is an instance of some
3313
     template, we now know that we will need to actually do the
3314
     instantiation. We check that DECL is not an explicit
3315
     instantiation because that is not checked in instantiate_decl.  */
3316
  if ((DECL_NON_THUNK_FUNCTION_P (decl) || TREE_CODE (decl) == VAR_DECL)
3317
      && DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
3318
      && (!DECL_EXPLICIT_INSTANTIATION (decl)
3319
          || (TREE_CODE (decl) == FUNCTION_DECL
3320
              && DECL_INLINE (DECL_TEMPLATE_RESULT
3321
                              (template_for_substitution (decl))))
3322
          /* We need to instantiate static data members so that there
3323
             initializers are available in integral constant
3324
             expressions.  */
3325
          || (TREE_CODE (decl) == VAR_DECL
3326
              && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))))
3327
    /* We put off instantiating functions in order to improve compile
3328
       times.  Maintaining a stack of active functions is expensive,
3329
       and the inliner knows to instantiate any functions it might
3330
       need.  */
3331
    instantiate_decl (decl, /*defer_ok=*/true,
3332
                      /*expl_inst_class_mem_p=*/false);
3333
 
3334
  processing_template_decl = saved_processing_template_decl;
3335
}
3336
 
3337
#include "gt-cp-decl2.h"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.