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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [cp/] [decl2.c] - Blame information for rev 820

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 710 jeremybenn
/* 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, 2007, 2008, 2009, 2010,
4
   2011 Free Software Foundation, Inc.
5
   Hacked by Michael Tiemann (tiemann@cygnus.com)
6
 
7
This file is part of GCC.
8
 
9
GCC is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 3, or (at your option)
12
any later version.
13
 
14
GCC is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
GNU General Public License for more details.
18
 
19
You should have received a copy of the GNU General Public License
20
along with GCC; see the file COPYING3.  If not see
21
<http://www.gnu.org/licenses/>.  */
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 "flags.h"
37
#include "cp-tree.h"
38
#include "decl.h"
39
#include "output.h"
40
#include "toplev.h"
41
#include "timevar.h"
42
#include "cpplib.h"
43
#include "target.h"
44
#include "c-family/c-common.h"
45
#include "c-family/c-objc.h"
46
#include "cgraph.h"
47
#include "tree-inline.h"
48
#include "c-family/c-pragma.h"
49
#include "tree-dump.h"
50
#include "intl.h"
51
#include "gimple.h"
52
#include "pointer-set.h"
53
#include "splay-tree.h"
54
#include "langhooks.h"
55
#include "c-family/c-ada-spec.h"
56
 
57
extern cpp_reader *parse_in;
58
 
59
/* This structure contains information about the initializations
60
   and/or destructions required for a particular priority level.  */
61
typedef struct priority_info_s {
62
  /* Nonzero if there have been any initializations at this priority
63
     throughout the translation unit.  */
64
  int initializations_p;
65
  /* Nonzero if there have been any destructions at this priority
66
     throughout the translation unit.  */
67
  int destructions_p;
68
} *priority_info;
69
 
70
static void mark_vtable_entries (tree);
71
static bool maybe_emit_vtables (tree);
72
static bool acceptable_java_type (tree);
73
static tree start_objects (int, int);
74
static void finish_objects (int, int, tree);
75
static tree start_static_storage_duration_function (unsigned);
76
static void finish_static_storage_duration_function (tree);
77
static priority_info get_priority_info (int);
78
static void do_static_initialization_or_destruction (tree, bool);
79
static void one_static_initialization_or_destruction (tree, tree, bool);
80
static void generate_ctor_or_dtor_function (bool, int, location_t *);
81
static int generate_ctor_and_dtor_functions_for_priority (splay_tree_node,
82
                                                          void *);
83
static tree prune_vars_needing_no_initialization (tree *);
84
static void write_out_vars (tree);
85
static void import_export_class (tree);
86
static tree get_guard_bits (tree);
87
static void determine_visibility_from_class (tree, tree);
88
static bool determine_hidden_inline (tree);
89
static bool decl_defined_p (tree);
90
 
91
/* A list of static class variables.  This is needed, because a
92
   static class variable can be declared inside the class without
93
   an initializer, and then initialized, statically, outside the class.  */
94
static GTY(()) VEC(tree,gc) *pending_statics;
95
 
96
/* A list of functions which were declared inline, but which we
97
   may need to emit outline anyway.  */
98
static GTY(()) VEC(tree,gc) *deferred_fns;
99
 
100
/* A list of decls that use types with no linkage, which we need to make
101
   sure are defined.  */
102
static GTY(()) VEC(tree,gc) *no_linkage_decls;
103
 
104
/* Nonzero if we're done parsing and into end-of-file activities.  */
105
 
106
int at_eof;
107
 
108
 
109
 
110
/* Return a member function type (a METHOD_TYPE), given FNTYPE (a
111
   FUNCTION_TYPE), CTYPE (class type), and QUALS (the cv-qualifiers
112
   that apply to the function).  */
113
 
114
tree
115
build_memfn_type (tree fntype, tree ctype, cp_cv_quals quals)
116
{
117
  tree raises;
118
  tree attrs;
119
  int type_quals;
120
 
121
  if (fntype == error_mark_node || ctype == error_mark_node)
122
    return error_mark_node;
123
 
124
  gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
125
              || TREE_CODE (fntype) == METHOD_TYPE);
126
 
127
  type_quals = quals & ~TYPE_QUAL_RESTRICT;
128
  ctype = cp_build_qualified_type (ctype, type_quals);
129
  raises = TYPE_RAISES_EXCEPTIONS (fntype);
130
  attrs = TYPE_ATTRIBUTES (fntype);
131
  fntype = build_method_type_directly (ctype, TREE_TYPE (fntype),
132
                                       (TREE_CODE (fntype) == METHOD_TYPE
133
                                        ? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
134
                                        : TYPE_ARG_TYPES (fntype)));
135
  if (raises)
136
    fntype = build_exception_variant (fntype, raises);
137
  if (attrs)
138
    fntype = cp_build_type_attribute_variant (fntype, attrs);
139
 
140
  return fntype;
141
}
142
 
143
/* Return a variant of FNTYPE, a FUNCTION_TYPE or METHOD_TYPE, with its
144
   return type changed to NEW_RET.  */
145
 
146
tree
147
change_return_type (tree new_ret, tree fntype)
148
{
149
  tree newtype;
150
  tree args = TYPE_ARG_TYPES (fntype);
151
  tree raises = TYPE_RAISES_EXCEPTIONS (fntype);
152
  tree attrs = TYPE_ATTRIBUTES (fntype);
153
 
154
  if (same_type_p (new_ret, TREE_TYPE (fntype)))
155
    return fntype;
156
 
157
  if (TREE_CODE (fntype) == FUNCTION_TYPE)
158
    {
159
      newtype = build_function_type (new_ret, args);
160
      newtype = apply_memfn_quals (newtype, type_memfn_quals (fntype));
161
    }
162
  else
163
    newtype = build_method_type_directly
164
      (class_of_this_parm (fntype), new_ret, TREE_CHAIN (args));
165
  if (raises)
166
    newtype = build_exception_variant (newtype, raises);
167
  if (attrs)
168
    newtype = cp_build_type_attribute_variant (newtype, attrs);
169
 
170
  return newtype;
171
}
172
 
173
/* Build a PARM_DECL with NAME and TYPE, and set DECL_ARG_TYPE
174
   appropriately.  */
175
 
176
tree
177
cp_build_parm_decl (tree name, tree type)
178
{
179
  tree parm = build_decl (input_location,
180
                          PARM_DECL, name, type);
181
  /* DECL_ARG_TYPE is only used by the back end and the back end never
182
     sees templates.  */
183
  if (!processing_template_decl)
184
    DECL_ARG_TYPE (parm) = type_passed_as (type);
185
 
186
  /* If the type is a pack expansion, then we have a function
187
     parameter pack. */
188
  if (type && TREE_CODE (type) == TYPE_PACK_EXPANSION)
189
    FUNCTION_PARAMETER_PACK_P (parm) = 1;
190
 
191
  return parm;
192
}
193
 
194
/* Returns a PARM_DECL for a parameter of the indicated TYPE, with the
195
   indicated NAME.  */
196
 
197
tree
198
build_artificial_parm (tree name, tree type)
199
{
200
  tree parm = cp_build_parm_decl (name, type);
201
  DECL_ARTIFICIAL (parm) = 1;
202
  /* All our artificial parms are implicitly `const'; they cannot be
203
     assigned to.  */
204
  TREE_READONLY (parm) = 1;
205
  return parm;
206
}
207
 
208
/* Constructors for types with virtual baseclasses need an "in-charge" flag
209
   saying whether this constructor is responsible for initialization of
210
   virtual baseclasses or not.  All destructors also need this "in-charge"
211
   flag, which additionally determines whether or not the destructor should
212
   free the memory for the object.
213
 
214
   This function adds the "in-charge" flag to member function FN if
215
   appropriate.  It is called from grokclassfn and tsubst.
216
   FN must be either a constructor or destructor.
217
 
218
   The in-charge flag follows the 'this' parameter, and is followed by the
219
   VTT parm (if any), then the user-written parms.  */
220
 
221
void
222
maybe_retrofit_in_chrg (tree fn)
223
{
224
  tree basetype, arg_types, parms, parm, fntype;
225
 
226
  /* If we've already add the in-charge parameter don't do it again.  */
227
  if (DECL_HAS_IN_CHARGE_PARM_P (fn))
228
    return;
229
 
230
  /* When processing templates we can't know, in general, whether or
231
     not we're going to have virtual baseclasses.  */
232
  if (processing_template_decl)
233
    return;
234
 
235
  /* We don't need an in-charge parameter for constructors that don't
236
     have virtual bases.  */
237
  if (DECL_CONSTRUCTOR_P (fn)
238
      && !CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
239
    return;
240
 
241
  arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
242
  basetype = TREE_TYPE (TREE_VALUE (arg_types));
243
  arg_types = TREE_CHAIN (arg_types);
244
 
245
  parms = DECL_CHAIN (DECL_ARGUMENTS (fn));
246
 
247
  /* If this is a subobject constructor or destructor, our caller will
248
     pass us a pointer to our VTT.  */
249
  if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
250
    {
251
      parm = build_artificial_parm (vtt_parm_identifier, vtt_parm_type);
252
 
253
      /* First add it to DECL_ARGUMENTS between 'this' and the real args...  */
254
      DECL_CHAIN (parm) = parms;
255
      parms = parm;
256
 
257
      /* ...and then to TYPE_ARG_TYPES.  */
258
      arg_types = hash_tree_chain (vtt_parm_type, arg_types);
259
 
260
      DECL_HAS_VTT_PARM_P (fn) = 1;
261
    }
262
 
263
  /* Then add the in-charge parm (before the VTT parm).  */
264
  parm = build_artificial_parm (in_charge_identifier, integer_type_node);
265
  DECL_CHAIN (parm) = parms;
266
  parms = parm;
267
  arg_types = hash_tree_chain (integer_type_node, arg_types);
268
 
269
  /* Insert our new parameter(s) into the list.  */
270
  DECL_CHAIN (DECL_ARGUMENTS (fn)) = parms;
271
 
272
  /* And rebuild the function type.  */
273
  fntype = build_method_type_directly (basetype, TREE_TYPE (TREE_TYPE (fn)),
274
                                       arg_types);
275
  if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)))
276
    fntype = build_exception_variant (fntype,
277
                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)));
278
  if (TYPE_ATTRIBUTES (TREE_TYPE (fn)))
279
    fntype = (cp_build_type_attribute_variant
280
              (fntype, TYPE_ATTRIBUTES (TREE_TYPE (fn))));
281
  TREE_TYPE (fn) = fntype;
282
 
283
  /* Now we've got the in-charge parameter.  */
284
  DECL_HAS_IN_CHARGE_PARM_P (fn) = 1;
285
}
286
 
287
/* Classes overload their constituent function names automatically.
288
   When a function name is declared in a record structure,
289
   its name is changed to it overloaded name.  Since names for
290
   constructors and destructors can conflict, we place a leading
291
   '$' for destructors.
292
 
293
   CNAME is the name of the class we are grokking for.
294
 
295
   FUNCTION is a FUNCTION_DECL.  It was created by `grokdeclarator'.
296
 
297
   FLAGS contains bits saying what's special about today's
298
   arguments.  DTOR_FLAG == DESTRUCTOR.
299
 
300
   If FUNCTION is a destructor, then we must add the `auto-delete' field
301
   as a second parameter.  There is some hair associated with the fact
302
   that we must "declare" this variable in the manner consistent with the
303
   way the rest of the arguments were declared.
304
 
305
   QUALS are the qualifiers for the this pointer.  */
306
 
307
void
308
grokclassfn (tree ctype, tree function, enum overload_flags flags)
309
{
310
  tree fn_name = DECL_NAME (function);
311
 
312
  /* Even within an `extern "C"' block, members get C++ linkage.  See
313
     [dcl.link] for details.  */
314
  SET_DECL_LANGUAGE (function, lang_cplusplus);
315
 
316
  if (fn_name == NULL_TREE)
317
    {
318
      error ("name missing for member function");
319
      fn_name = get_identifier ("<anonymous>");
320
      DECL_NAME (function) = fn_name;
321
    }
322
 
323
  DECL_CONTEXT (function) = ctype;
324
 
325
  if (flags == DTOR_FLAG)
326
    DECL_DESTRUCTOR_P (function) = 1;
327
 
328
  if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
329
    maybe_retrofit_in_chrg (function);
330
}
331
 
332
/* Create an ARRAY_REF, checking for the user doing things backwards
333
   along the way.  */
334
 
335
tree
336
grok_array_decl (tree array_expr, tree index_exp)
337
{
338
  tree type;
339
  tree expr;
340
  tree orig_array_expr = array_expr;
341
  tree orig_index_exp = index_exp;
342
 
343
  if (error_operand_p (array_expr) || error_operand_p (index_exp))
344
    return error_mark_node;
345
 
346
  if (processing_template_decl)
347
    {
348
      if (type_dependent_expression_p (array_expr)
349
          || type_dependent_expression_p (index_exp))
350
        return build_min_nt (ARRAY_REF, array_expr, index_exp,
351
                             NULL_TREE, NULL_TREE);
352
      array_expr = build_non_dependent_expr (array_expr);
353
      index_exp = build_non_dependent_expr (index_exp);
354
    }
355
 
356
  type = TREE_TYPE (array_expr);
357
  gcc_assert (type);
358
  type = non_reference (type);
359
 
360
  /* If they have an `operator[]', use that.  */
361
  if (MAYBE_CLASS_TYPE_P (type) || MAYBE_CLASS_TYPE_P (TREE_TYPE (index_exp)))
362
    expr = build_new_op (ARRAY_REF, LOOKUP_NORMAL,
363
                         array_expr, index_exp, NULL_TREE,
364
                         /*overload=*/NULL, tf_warning_or_error);
365
  else
366
    {
367
      tree p1, p2, i1, i2;
368
 
369
      /* Otherwise, create an ARRAY_REF for a pointer or array type.
370
         It is a little-known fact that, if `a' is an array and `i' is
371
         an int, you can write `i[a]', which means the same thing as
372
         `a[i]'.  */
373
      if (TREE_CODE (type) == ARRAY_TYPE)
374
        p1 = array_expr;
375
      else
376
        p1 = build_expr_type_conversion (WANT_POINTER, array_expr, false);
377
 
378
      if (TREE_CODE (TREE_TYPE (index_exp)) == ARRAY_TYPE)
379
        p2 = index_exp;
380
      else
381
        p2 = build_expr_type_conversion (WANT_POINTER, index_exp, false);
382
 
383
      i1 = build_expr_type_conversion (WANT_INT | WANT_ENUM, array_expr,
384
                                       false);
385
      i2 = build_expr_type_conversion (WANT_INT | WANT_ENUM, index_exp,
386
                                       false);
387
 
388
      if ((p1 && i2) && (i1 && p2))
389
        error ("ambiguous conversion for array subscript");
390
 
391
      if (p1 && i2)
392
        array_expr = p1, index_exp = i2;
393
      else if (i1 && p2)
394
        array_expr = p2, index_exp = i1;
395
      else
396
        {
397
          error ("invalid types %<%T[%T]%> for array subscript",
398
                 type, TREE_TYPE (index_exp));
399
          return error_mark_node;
400
        }
401
 
402
      if (array_expr == error_mark_node || index_exp == error_mark_node)
403
        error ("ambiguous conversion for array subscript");
404
 
405
      expr = build_array_ref (input_location, array_expr, index_exp);
406
    }
407
  if (processing_template_decl && expr != error_mark_node)
408
    return build_min_non_dep (ARRAY_REF, expr, orig_array_expr, orig_index_exp,
409
                              NULL_TREE, NULL_TREE);
410
  return expr;
411
}
412
 
413
/* Given the cast expression EXP, checking out its validity.   Either return
414
   an error_mark_node if there was an unavoidable error, return a cast to
415
   void for trying to delete a pointer w/ the value 0, or return the
416
   call to delete.  If DOING_VEC is true, we handle things differently
417
   for doing an array delete.
418
   Implements ARM $5.3.4.  This is called from the parser.  */
419
 
420
tree
421
delete_sanity (tree exp, tree size, bool doing_vec, int use_global_delete,
422
               tsubst_flags_t complain)
423
{
424
  tree t, type;
425
 
426
  if (exp == error_mark_node)
427
    return exp;
428
 
429
  if (processing_template_decl)
430
    {
431
      t = build_min (DELETE_EXPR, void_type_node, exp, size);
432
      DELETE_EXPR_USE_GLOBAL (t) = use_global_delete;
433
      DELETE_EXPR_USE_VEC (t) = doing_vec;
434
      TREE_SIDE_EFFECTS (t) = 1;
435
      return t;
436
    }
437
 
438
  /* An array can't have been allocated by new, so complain.  */
439
  if (TREE_CODE (exp) == VAR_DECL
440
      && TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
441
    warning (0, "deleting array %q#D", exp);
442
 
443
  t = build_expr_type_conversion (WANT_POINTER, exp, true);
444
 
445
  if (t == NULL_TREE || t == error_mark_node)
446
    {
447
      error ("type %q#T argument given to %<delete%>, expected pointer",
448
             TREE_TYPE (exp));
449
      return error_mark_node;
450
    }
451
 
452
  type = TREE_TYPE (t);
453
 
454
  /* As of Valley Forge, you can delete a pointer to const.  */
455
 
456
  /* You can't delete functions.  */
457
  if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
458
    {
459
      error ("cannot delete a function.  Only pointer-to-objects are "
460
             "valid arguments to %<delete%>");
461
      return error_mark_node;
462
    }
463
 
464
  /* Deleting ptr to void is undefined behavior [expr.delete/3].  */
465
  if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
466
    {
467
      warning (0, "deleting %qT is undefined", type);
468
      doing_vec = 0;
469
    }
470
 
471
  /* Deleting a pointer with the value zero is valid and has no effect.  */
472
  if (integer_zerop (t))
473
    return build1 (NOP_EXPR, void_type_node, t);
474
 
475
  if (doing_vec)
476
    return build_vec_delete (t, /*maxindex=*/NULL_TREE,
477
                             sfk_deleting_destructor,
478
                             use_global_delete, complain);
479
  else
480
    return build_delete (type, t, sfk_deleting_destructor,
481
                         LOOKUP_NORMAL, use_global_delete,
482
                         complain);
483
}
484
 
485
/* Report an error if the indicated template declaration is not the
486
   sort of thing that should be a member template.  */
487
 
488
void
489
check_member_template (tree tmpl)
490
{
491
  tree decl;
492
 
493
  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
494
  decl = DECL_TEMPLATE_RESULT (tmpl);
495
 
496
  if (TREE_CODE (decl) == FUNCTION_DECL
497
      || DECL_ALIAS_TEMPLATE_P (tmpl)
498
      || (TREE_CODE (decl) == TYPE_DECL
499
          && MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))))
500
    {
501
      /* The parser rejects template declarations in local classes.  */
502
      gcc_assert (!current_function_decl);
503
      /* The parser rejects any use of virtual in a function template.  */
504
      gcc_assert (!(TREE_CODE (decl) == FUNCTION_DECL
505
                    && DECL_VIRTUAL_P (decl)));
506
 
507
      /* The debug-information generating code doesn't know what to do
508
         with member templates.  */
509
      DECL_IGNORED_P (tmpl) = 1;
510
    }
511
  else
512
    error ("template declaration of %q#D", decl);
513
}
514
 
515
/* Return true iff TYPE is a valid Java parameter or return type.  */
516
 
517
static bool
518
acceptable_java_type (tree type)
519
{
520
  if (type == error_mark_node)
521
    return false;
522
 
523
  if (TREE_CODE (type) == VOID_TYPE || TYPE_FOR_JAVA (type))
524
    return true;
525
  if (TREE_CODE (type) == POINTER_TYPE || TREE_CODE (type) == REFERENCE_TYPE)
526
    {
527
      type = TREE_TYPE (type);
528
      if (TREE_CODE (type) == RECORD_TYPE)
529
        {
530
          tree args;  int i;
531
          if (! TYPE_FOR_JAVA (type))
532
            return false;
533
          if (! CLASSTYPE_TEMPLATE_INFO (type))
534
            return true;
535
          args = CLASSTYPE_TI_ARGS (type);
536
          i = TREE_VEC_LENGTH (args);
537
          while (--i >= 0)
538
            {
539
              type = TREE_VEC_ELT (args, i);
540
              if (TREE_CODE (type) == POINTER_TYPE)
541
                type = TREE_TYPE (type);
542
              if (! TYPE_FOR_JAVA (type))
543
                return false;
544
            }
545
          return true;
546
        }
547
    }
548
  return false;
549
}
550
 
551
/* For a METHOD in a Java class CTYPE, return true if
552
   the parameter and return types are valid Java types.
553
   Otherwise, print appropriate error messages, and return false.  */
554
 
555
bool
556
check_java_method (tree method)
557
{
558
  bool jerr = false;
559
  tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (method));
560
  tree ret_type = TREE_TYPE (TREE_TYPE (method));
561
 
562
  if (!acceptable_java_type (ret_type))
563
    {
564
      error ("Java method %qD has non-Java return type %qT",
565
             method, ret_type);
566
      jerr = true;
567
    }
568
 
569
  arg_types = TREE_CHAIN (arg_types);
570
  if (DECL_HAS_IN_CHARGE_PARM_P (method))
571
    arg_types = TREE_CHAIN (arg_types);
572
  if (DECL_HAS_VTT_PARM_P (method))
573
    arg_types = TREE_CHAIN (arg_types);
574
 
575
  for (; arg_types != NULL_TREE; arg_types = TREE_CHAIN (arg_types))
576
    {
577
      tree type = TREE_VALUE (arg_types);
578
      if (!acceptable_java_type (type))
579
        {
580
          if (type != error_mark_node)
581
            error ("Java method %qD has non-Java parameter type %qT",
582
                   method, type);
583
          jerr = true;
584
        }
585
    }
586
  return !jerr;
587
}
588
 
589
/* Sanity check: report error if this function FUNCTION is not
590
   really a member of the class (CTYPE) it is supposed to belong to.
591
   TEMPLATE_PARMS is used to specify the template parameters of a member
592
   template passed as FUNCTION_DECL. If the member template is passed as a
593
   TEMPLATE_DECL, it can be NULL since the parameters can be extracted
594
   from the declaration. If the function is not a function template, it
595
   must be NULL.
596
   It returns the original declaration for the function, NULL_TREE if
597
   no declaration was found, error_mark_node if an error was emitted.  */
598
 
599
tree
600
check_classfn (tree ctype, tree function, tree template_parms)
601
{
602
  int ix;
603
  bool is_template;
604
  tree pushed_scope;
605
 
606
  if (DECL_USE_TEMPLATE (function)
607
      && !(TREE_CODE (function) == TEMPLATE_DECL
608
           && DECL_TEMPLATE_SPECIALIZATION (function))
609
      && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (function)))
610
    /* Since this is a specialization of a member template,
611
       we're not going to find the declaration in the class.
612
       For example, in:
613
 
614
         struct S { template <typename T> void f(T); };
615
         template <> void S::f(int);
616
 
617
       we're not going to find `S::f(int)', but there's no
618
       reason we should, either.  We let our callers know we didn't
619
       find the method, but we don't complain.  */
620
    return NULL_TREE;
621
 
622
  /* Basic sanity check: for a template function, the template parameters
623
     either were not passed, or they are the same of DECL_TEMPLATE_PARMS.  */
624
  if (TREE_CODE (function) == TEMPLATE_DECL)
625
    {
626
      if (template_parms
627
          && !comp_template_parms (template_parms,
628
                                   DECL_TEMPLATE_PARMS (function)))
629
        {
630
          error ("template parameter lists provided don%'t match the "
631
                 "template parameters of %qD", function);
632
          return error_mark_node;
633
        }
634
      template_parms = DECL_TEMPLATE_PARMS (function);
635
    }
636
 
637
  /* OK, is this a definition of a member template?  */
638
  is_template = (template_parms != NULL_TREE);
639
 
640
  /* We must enter the scope here, because conversion operators are
641
     named by target type, and type equivalence relies on typenames
642
     resolving within the scope of CTYPE.  */
643
  pushed_scope = push_scope (ctype);
644
  ix = class_method_index_for_fn (complete_type (ctype), function);
645
  if (ix >= 0)
646
    {
647
      VEC(tree,gc) *methods = CLASSTYPE_METHOD_VEC (ctype);
648
      tree fndecls, fndecl = 0;
649
      bool is_conv_op;
650
      const char *format = NULL;
651
 
652
      for (fndecls = VEC_index (tree, methods, ix);
653
           fndecls; fndecls = OVL_NEXT (fndecls))
654
        {
655
          tree p1, p2;
656
 
657
          fndecl = OVL_CURRENT (fndecls);
658
          p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
659
          p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
660
 
661
          /* We cannot simply call decls_match because this doesn't
662
             work for static member functions that are pretending to
663
             be methods, and because the name may have been changed by
664
             asm("new_name").  */
665
 
666
           /* Get rid of the this parameter on functions that become
667
              static.  */
668
          if (DECL_STATIC_FUNCTION_P (fndecl)
669
              && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
670
            p1 = TREE_CHAIN (p1);
671
 
672
          /* A member template definition only matches a member template
673
             declaration.  */
674
          if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
675
            continue;
676
 
677
          if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
678
                           TREE_TYPE (TREE_TYPE (fndecl)))
679
              && compparms (p1, p2)
680
              && (!is_template
681
                  || comp_template_parms (template_parms,
682
                                          DECL_TEMPLATE_PARMS (fndecl)))
683
              && (DECL_TEMPLATE_SPECIALIZATION (function)
684
                  == DECL_TEMPLATE_SPECIALIZATION (fndecl))
685
              && (!DECL_TEMPLATE_SPECIALIZATION (function)
686
                  || (DECL_TI_TEMPLATE (function)
687
                      == DECL_TI_TEMPLATE (fndecl))))
688
            break;
689
        }
690
      if (fndecls)
691
        {
692
          if (pushed_scope)
693
            pop_scope (pushed_scope);
694
          return OVL_CURRENT (fndecls);
695
        }
696
 
697
      error_at (DECL_SOURCE_LOCATION (function),
698
                "prototype for %q#D does not match any in class %qT",
699
                function, ctype);
700
      is_conv_op = DECL_CONV_FN_P (fndecl);
701
 
702
      if (is_conv_op)
703
        ix = CLASSTYPE_FIRST_CONVERSION_SLOT;
704
      fndecls = VEC_index (tree, methods, ix);
705
      while (fndecls)
706
        {
707
          fndecl = OVL_CURRENT (fndecls);
708
          fndecls = OVL_NEXT (fndecls);
709
 
710
          if (!fndecls && is_conv_op)
711
            {
712
              if (VEC_length (tree, methods) > (size_t) ++ix)
713
                {
714
                  fndecls = VEC_index (tree, methods, ix);
715
                  if (!DECL_CONV_FN_P (OVL_CURRENT (fndecls)))
716
                    {
717
                      fndecls = NULL_TREE;
718
                      is_conv_op = false;
719
                    }
720
                }
721
              else
722
                is_conv_op = false;
723
            }
724
          if (format)
725
            format = "                %+#D";
726
          else if (fndecls)
727
            format = N_("candidates are: %+#D");
728
          else
729
            format = N_("candidate is: %+#D");
730
          error (format, fndecl);
731
        }
732
    }
733
  else if (!COMPLETE_TYPE_P (ctype))
734
    cxx_incomplete_type_error (function, ctype);
735
  else
736
    error ("no %q#D member function declared in class %qT",
737
           function, ctype);
738
 
739
  if (pushed_scope)
740
    pop_scope (pushed_scope);
741
  return error_mark_node;
742
}
743
 
744
/* DECL is a function with vague linkage.  Remember it so that at the
745
   end of the translation unit we can decide whether or not to emit
746
   it.  */
747
 
748
void
749
note_vague_linkage_fn (tree decl)
750
{
751
  DECL_DEFER_OUTPUT (decl) = 1;
752
  VEC_safe_push (tree, gc, deferred_fns, decl);
753
}
754
 
755
/* We have just processed the DECL, which is a static data member.
756
   The other parameters are as for cp_finish_decl.  */
757
 
758
void
759
finish_static_data_member_decl (tree decl,
760
                                tree init, bool init_const_expr_p,
761
                                tree asmspec_tree,
762
                                int flags)
763
{
764
  DECL_CONTEXT (decl) = current_class_type;
765
 
766
  /* We cannot call pushdecl here, because that would fill in the
767
     TREE_CHAIN of our decl.  Instead, we modify cp_finish_decl to do
768
     the right thing, namely, to put this decl out straight away.  */
769
 
770
  if (! processing_template_decl)
771
    VEC_safe_push (tree, gc, pending_statics, decl);
772
 
773
  if (LOCAL_CLASS_P (current_class_type))
774
    permerror (input_location, "local class %q#T shall not have static data member %q#D",
775
               current_class_type, decl);
776
 
777
  DECL_IN_AGGR_P (decl) = 1;
778
 
779
  if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
780
      && TYPE_DOMAIN (TREE_TYPE (decl)) == NULL_TREE)
781
    SET_VAR_HAD_UNKNOWN_BOUND (decl);
782
 
783
  cp_finish_decl (decl, init, init_const_expr_p, asmspec_tree, flags);
784
}
785
 
786
/* DECLARATOR and DECLSPECS correspond to a class member.  The other
787
   parameters are as for cp_finish_decl.  Return the DECL for the
788
   class member declared.  */
789
 
790
tree
791
grokfield (const cp_declarator *declarator,
792
           cp_decl_specifier_seq *declspecs,
793
           tree init, bool init_const_expr_p,
794
           tree asmspec_tree,
795
           tree attrlist)
796
{
797
  tree value;
798
  const char *asmspec = 0;
799
  int flags;
800
  tree name;
801
 
802
  if (init
803
      && TREE_CODE (init) == TREE_LIST
804
      && TREE_VALUE (init) == error_mark_node
805
      && TREE_CHAIN (init) == NULL_TREE)
806
    init = NULL_TREE;
807
 
808
  value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
809
  if (! value || error_operand_p (value))
810
    /* friend or constructor went bad.  */
811
    return error_mark_node;
812
 
813
  if (TREE_CODE (value) == TYPE_DECL && init)
814
    {
815
      error ("typedef %qD is initialized (use decltype instead)", value);
816
      init = NULL_TREE;
817
    }
818
 
819
  /* Pass friendly classes back.  */
820
  if (value == void_type_node)
821
    return value;
822
 
823
  /* Pass friend decls back.  */
824
  if ((TREE_CODE (value) == FUNCTION_DECL
825
       || TREE_CODE (value) == TEMPLATE_DECL)
826
      && DECL_CONTEXT (value) != current_class_type)
827
    return value;
828
 
829
  name = DECL_NAME (value);
830
 
831
  if (name != NULL_TREE)
832
    {
833
      if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
834
        {
835
          error ("explicit template argument list not allowed");
836
          return error_mark_node;
837
        }
838
 
839
      if (IDENTIFIER_POINTER (name)[0] == '_'
840
          && ! strcmp (IDENTIFIER_POINTER (name), "_vptr"))
841
        error ("member %qD conflicts with virtual function table field name",
842
               value);
843
    }
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 (attrlist)
852
        {
853
          int attrflags = 0;
854
 
855
          /* If this is a typedef that names the class for linkage purposes
856
             (7.1.3p8), apply any attributes directly to the type.  */
857
          if (TAGGED_TYPE_P (TREE_TYPE (value))
858
              && value == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))))
859
            attrflags = ATTR_FLAG_TYPE_IN_PLACE;
860
 
861
          cplus_decl_attributes (&value, attrlist, attrflags);
862
        }
863
 
864
      if (declspecs->specs[(int)ds_typedef]
865
          && TREE_TYPE (value) != error_mark_node
866
          && TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))) != value)
867
        set_underlying_type (value);
868
 
869
      /* It's important that push_template_decl below follows
870
         set_underlying_type above so that the created template
871
         carries the properly set type of VALUE.  */
872
      if (processing_template_decl)
873
        value = push_template_decl (value);
874
 
875
      record_locally_defined_typedef (value);
876
      return value;
877
    }
878
 
879
  if (DECL_IN_AGGR_P (value))
880
    {
881
      error ("%qD is already defined in %qT", value, DECL_CONTEXT (value));
882
      return void_type_node;
883
    }
884
 
885
  if (asmspec_tree && asmspec_tree != error_mark_node)
886
    asmspec = TREE_STRING_POINTER (asmspec_tree);
887
 
888
  if (init)
889
    {
890
      if (TREE_CODE (value) == FUNCTION_DECL)
891
        {
892
          /* Initializers for functions are rejected early in the parser.
893
             If we get here, it must be a pure specifier for a method.  */
894
          if (init == ridpointers[(int)RID_DELETE])
895
            {
896
              DECL_DELETED_FN (value) = 1;
897
              DECL_DECLARED_INLINE_P (value) = 1;
898
              DECL_INITIAL (value) = error_mark_node;
899
            }
900
          else if (init == ridpointers[(int)RID_DEFAULT])
901
            {
902
              if (defaultable_fn_check (value))
903
                {
904
                  DECL_DEFAULTED_FN (value) = 1;
905
                  DECL_INITIALIZED_IN_CLASS_P (value) = 1;
906
                  DECL_DECLARED_INLINE_P (value) = 1;
907
                }
908
            }
909
          else if (TREE_CODE (init) == DEFAULT_ARG)
910
            error ("invalid initializer for member function %qD", value);
911
          else if (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE)
912
            {
913
              if (integer_zerop (init))
914
                DECL_PURE_VIRTUAL_P (value) = 1;
915
              else if (error_operand_p (init))
916
                ; /* An error has already been reported.  */
917
              else
918
                error ("invalid initializer for member function %qD",
919
                       value);
920
            }
921
          else
922
            {
923
              gcc_assert (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE);
924
              error ("initializer specified for static member function %qD",
925
                     value);
926
            }
927
        }
928
      else if (TREE_CODE (value) == FIELD_DECL)
929
        /* C++11 NSDMI, keep going.  */;
930
      else if (TREE_CODE (value) != VAR_DECL)
931
        gcc_unreachable ();
932
      else if (!processing_template_decl)
933
        {
934
          if (TREE_CODE (init) == CONSTRUCTOR)
935
            init = digest_init (TREE_TYPE (value), init, tf_warning_or_error);
936
          init = maybe_constant_init (init);
937
 
938
          if (init != error_mark_node && !TREE_CONSTANT (init))
939
            {
940
              /* We can allow references to things that are effectively
941
                 static, since references are initialized with the
942
                 address.  */
943
              if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
944
                  || (TREE_STATIC (init) == 0
945
                      && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
946
                {
947
                  error ("field initializer is not constant");
948
                  init = error_mark_node;
949
                }
950
            }
951
        }
952
    }
953
 
954
  if (processing_template_decl
955
      && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
956
    {
957
      value = push_template_decl (value);
958
      if (error_operand_p (value))
959
        return error_mark_node;
960
    }
961
 
962
  if (attrlist)
963
    cplus_decl_attributes (&value, attrlist, 0);
964
 
965
  if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
966
      && CONSTRUCTOR_IS_DIRECT_INIT (init))
967
    flags = LOOKUP_NORMAL;
968
  else
969
    flags = LOOKUP_IMPLICIT;
970
 
971
  switch (TREE_CODE (value))
972
    {
973
    case VAR_DECL:
974
      finish_static_data_member_decl (value, init, init_const_expr_p,
975
                                      asmspec_tree, flags);
976
      return value;
977
 
978
    case FIELD_DECL:
979
      if (asmspec)
980
        error ("%<asm%> specifiers are not permitted on non-static data members");
981
      if (DECL_INITIAL (value) == error_mark_node)
982
        init = error_mark_node;
983
      cp_finish_decl (value, init, /*init_const_expr_p=*/false,
984
                      NULL_TREE, flags);
985
      DECL_IN_AGGR_P (value) = 1;
986
      return value;
987
 
988
    case  FUNCTION_DECL:
989
      if (asmspec)
990
        set_user_assembler_name (value, asmspec);
991
 
992
      cp_finish_decl (value,
993
                      /*init=*/NULL_TREE,
994
                      /*init_const_expr_p=*/false,
995
                      asmspec_tree, flags);
996
 
997
      /* Pass friends back this way.  */
998
      if (DECL_FRIEND_P (value))
999
        return void_type_node;
1000
 
1001
      DECL_IN_AGGR_P (value) = 1;
1002
      return value;
1003
 
1004
    default:
1005
      gcc_unreachable ();
1006
    }
1007
  return NULL_TREE;
1008
}
1009
 
1010
/* Like `grokfield', but for bitfields.
1011
   WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.  */
1012
 
1013
tree
1014
grokbitfield (const cp_declarator *declarator,
1015
              cp_decl_specifier_seq *declspecs, tree width,
1016
              tree attrlist)
1017
{
1018
  tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, &attrlist);
1019
 
1020
  if (value == error_mark_node)
1021
    return NULL_TREE; /* friends went bad.  */
1022
 
1023
  /* Pass friendly classes back.  */
1024
  if (TREE_CODE (value) == VOID_TYPE)
1025
    return void_type_node;
1026
 
1027
  if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))
1028
      && (POINTER_TYPE_P (value)
1029
          || !dependent_type_p (TREE_TYPE (value))))
1030
    {
1031
      error ("bit-field %qD with non-integral type", value);
1032
      return error_mark_node;
1033
    }
1034
 
1035
  if (TREE_CODE (value) == TYPE_DECL)
1036
    {
1037
      error ("cannot declare %qD to be a bit-field type", value);
1038
      return NULL_TREE;
1039
    }
1040
 
1041
  /* Usually, finish_struct_1 catches bitfields with invalid types.
1042
     But, in the case of bitfields with function type, we confuse
1043
     ourselves into thinking they are member functions, so we must
1044
     check here.  */
1045
  if (TREE_CODE (value) == FUNCTION_DECL)
1046
    {
1047
      error ("cannot declare bit-field %qD with function type",
1048
             DECL_NAME (value));
1049
      return NULL_TREE;
1050
    }
1051
 
1052
  if (DECL_IN_AGGR_P (value))
1053
    {
1054
      error ("%qD is already defined in the class %qT", value,
1055
             DECL_CONTEXT (value));
1056
      return void_type_node;
1057
    }
1058
 
1059
  if (TREE_STATIC (value))
1060
    {
1061
      error ("static member %qD cannot be a bit-field", value);
1062
      return NULL_TREE;
1063
    }
1064
  cp_finish_decl (value, NULL_TREE, false, NULL_TREE, 0);
1065
 
1066
  if (width != error_mark_node)
1067
    {
1068
      /* The width must be an integer type.  */
1069
      if (!type_dependent_expression_p (width)
1070
          && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (width)))
1071
        error ("width of bit-field %qD has non-integral type %qT", value,
1072
               TREE_TYPE (width));
1073
      DECL_INITIAL (value) = width;
1074
      SET_DECL_C_BIT_FIELD (value);
1075
    }
1076
 
1077
  DECL_IN_AGGR_P (value) = 1;
1078
 
1079
  if (attrlist)
1080
    cplus_decl_attributes (&value, attrlist, /*flags=*/0);
1081
 
1082
  return value;
1083
}
1084
 
1085
 
1086
/* Returns true iff ATTR is an attribute which needs to be applied at
1087
   instantiation time rather than template definition time.  */
1088
 
1089
static bool
1090
is_late_template_attribute (tree attr, tree decl)
1091
{
1092
  tree name = TREE_PURPOSE (attr);
1093
  tree args = TREE_VALUE (attr);
1094
  const struct attribute_spec *spec = lookup_attribute_spec (name);
1095
  tree arg;
1096
 
1097
  if (!spec)
1098
    /* Unknown attribute.  */
1099
    return false;
1100
 
1101
  /* Attribute weak handling wants to write out assembly right away.  */
1102
  if (is_attribute_p ("weak", name))
1103
    return true;
1104
 
1105
  /* If any of the arguments are dependent expressions, we can't evaluate
1106
     the attribute until instantiation time.  */
1107
  for (arg = args; arg; arg = TREE_CHAIN (arg))
1108
    {
1109
      tree t = TREE_VALUE (arg);
1110
 
1111
      /* If the first attribute argument is an identifier, only consider
1112
         second and following arguments.  Attributes like mode, format,
1113
         cleanup and several target specific attributes aren't late
1114
         just because they have an IDENTIFIER_NODE as first argument.  */
1115
      if (arg == args && TREE_CODE (t) == IDENTIFIER_NODE)
1116
        continue;
1117
 
1118
      if (value_dependent_expression_p (t)
1119
          || type_dependent_expression_p (t))
1120
        return true;
1121
    }
1122
 
1123
  if (TREE_CODE (decl) == TYPE_DECL
1124
      || TYPE_P (decl)
1125
      || spec->type_required)
1126
    {
1127
      tree type = TYPE_P (decl) ? decl : TREE_TYPE (decl);
1128
 
1129
      /* We can't apply any attributes to a completely unknown type until
1130
         instantiation time.  */
1131
      enum tree_code code = TREE_CODE (type);
1132
      if (code == TEMPLATE_TYPE_PARM
1133
          || code == BOUND_TEMPLATE_TEMPLATE_PARM
1134
          || code == TYPENAME_TYPE)
1135
        return true;
1136
      /* Also defer most attributes on dependent types.  This is not
1137
         necessary in all cases, but is the better default.  */
1138
      else if (dependent_type_p (type)
1139
               /* But attribute visibility specifically works on
1140
                  templates.  */
1141
               && !is_attribute_p ("visibility", name))
1142
        return true;
1143
      else
1144
        return false;
1145
    }
1146
  else
1147
    return false;
1148
}
1149
 
1150
/* ATTR_P is a list of attributes.  Remove any attributes which need to be
1151
   applied at instantiation time and return them.  If IS_DEPENDENT is true,
1152
   the declaration itself is dependent, so all attributes should be applied
1153
   at instantiation time.  */
1154
 
1155
static tree
1156
splice_template_attributes (tree *attr_p, tree decl)
1157
{
1158
  tree *p = attr_p;
1159
  tree late_attrs = NULL_TREE;
1160
  tree *q = &late_attrs;
1161
 
1162
  if (!p)
1163
    return NULL_TREE;
1164
 
1165
  for (; *p; )
1166
    {
1167
      if (is_late_template_attribute (*p, decl))
1168
        {
1169
          ATTR_IS_DEPENDENT (*p) = 1;
1170
          *q = *p;
1171
          *p = TREE_CHAIN (*p);
1172
          q = &TREE_CHAIN (*q);
1173
          *q = NULL_TREE;
1174
        }
1175
      else
1176
        p = &TREE_CHAIN (*p);
1177
    }
1178
 
1179
  return late_attrs;
1180
}
1181
 
1182
/* Remove any late attributes from the list in ATTR_P and attach them to
1183
   DECL_P.  */
1184
 
1185
static void
1186
save_template_attributes (tree *attr_p, tree *decl_p)
1187
{
1188
  tree late_attrs = splice_template_attributes (attr_p, *decl_p);
1189
  tree *q;
1190
  tree old_attrs = NULL_TREE;
1191
 
1192
  if (!late_attrs)
1193
    return;
1194
 
1195
  if (DECL_P (*decl_p))
1196
    q = &DECL_ATTRIBUTES (*decl_p);
1197
  else
1198
    q = &TYPE_ATTRIBUTES (*decl_p);
1199
 
1200
  old_attrs = *q;
1201
 
1202
  /* Merge the late attributes at the beginning with the attribute
1203
     list.  */
1204
  late_attrs = merge_attributes (late_attrs, *q);
1205
  *q = late_attrs;
1206
 
1207
  if (!DECL_P (*decl_p) && *decl_p == TYPE_MAIN_VARIANT (*decl_p))
1208
    {
1209
      /* We've added new attributes directly to the main variant, so
1210
         now we need to update all of the other variants to include
1211
         these new attributes.  */
1212
      tree variant;
1213
      for (variant = TYPE_NEXT_VARIANT (*decl_p); variant;
1214
           variant = TYPE_NEXT_VARIANT (variant))
1215
        {
1216
          gcc_assert (TYPE_ATTRIBUTES (variant) == old_attrs);
1217
          TYPE_ATTRIBUTES (variant) = TYPE_ATTRIBUTES (*decl_p);
1218
        }
1219
    }
1220
}
1221
 
1222
/* Like reconstruct_complex_type, but handle also template trees.  */
1223
 
1224
tree
1225
cp_reconstruct_complex_type (tree type, tree bottom)
1226
{
1227
  tree inner, outer;
1228
 
1229
  if (TREE_CODE (type) == POINTER_TYPE)
1230
    {
1231
      inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1232
      outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
1233
                                           TYPE_REF_CAN_ALIAS_ALL (type));
1234
    }
1235
  else if (TREE_CODE (type) == REFERENCE_TYPE)
1236
    {
1237
      inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1238
      outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
1239
                                             TYPE_REF_CAN_ALIAS_ALL (type));
1240
    }
1241
  else if (TREE_CODE (type) == ARRAY_TYPE)
1242
    {
1243
      inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1244
      outer = build_cplus_array_type (inner, TYPE_DOMAIN (type));
1245
      /* Don't call cp_build_qualified_type on ARRAY_TYPEs, the
1246
         element type qualification will be handled by the recursive
1247
         cp_reconstruct_complex_type call and cp_build_qualified_type
1248
         for ARRAY_TYPEs changes the element type.  */
1249
      return outer;
1250
    }
1251
  else if (TREE_CODE (type) == FUNCTION_TYPE)
1252
    {
1253
      inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1254
      outer = build_function_type (inner, TYPE_ARG_TYPES (type));
1255
      outer = apply_memfn_quals (outer, type_memfn_quals (type));
1256
    }
1257
  else if (TREE_CODE (type) == METHOD_TYPE)
1258
    {
1259
      inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1260
      /* The build_method_type_directly() routine prepends 'this' to argument list,
1261
         so we must compensate by getting rid of it.  */
1262
      outer
1263
        = build_method_type_directly
1264
            (class_of_this_parm (type), inner,
1265
             TREE_CHAIN (TYPE_ARG_TYPES (type)));
1266
    }
1267
  else if (TREE_CODE (type) == OFFSET_TYPE)
1268
    {
1269
      inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1270
      outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
1271
    }
1272
  else
1273
    return bottom;
1274
 
1275
  if (TYPE_ATTRIBUTES (type))
1276
    outer = cp_build_type_attribute_variant (outer, TYPE_ATTRIBUTES (type));
1277
  return cp_build_qualified_type (outer, cp_type_quals (type));
1278
}
1279
 
1280
/* Replaces any constexpr expression that may be into the attributes
1281
   arguments with their reduced value.  */
1282
 
1283
static void
1284
cp_check_const_attributes (tree attributes)
1285
{
1286
  tree attr;
1287
  for (attr = attributes; attr; attr = TREE_CHAIN (attr))
1288
    {
1289
      tree arg;
1290
      for (arg = TREE_VALUE (attr); arg; arg = TREE_CHAIN (arg))
1291
        {
1292
          tree expr = TREE_VALUE (arg);
1293
          if (EXPR_P (expr))
1294
            TREE_VALUE (arg) = maybe_constant_value (expr);
1295
        }
1296
    }
1297
}
1298
 
1299
/* Like decl_attributes, but handle C++ complexity.  */
1300
 
1301
void
1302
cplus_decl_attributes (tree *decl, tree attributes, int flags)
1303
{
1304
  if (*decl == NULL_TREE || *decl == void_type_node
1305
      || *decl == error_mark_node
1306
      || attributes == NULL_TREE)
1307
    return;
1308
 
1309
  if (processing_template_decl)
1310
    {
1311
      if (check_for_bare_parameter_packs (attributes))
1312
        return;
1313
 
1314
      save_template_attributes (&attributes, decl);
1315
      if (attributes == NULL_TREE)
1316
        return;
1317
    }
1318
 
1319
  cp_check_const_attributes (attributes);
1320
 
1321
  if (TREE_CODE (*decl) == TEMPLATE_DECL)
1322
    decl = &DECL_TEMPLATE_RESULT (*decl);
1323
 
1324
  decl_attributes (decl, attributes, flags);
1325
 
1326
  if (TREE_CODE (*decl) == TYPE_DECL)
1327
    SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1328
}
1329
 
1330
/* Walks through the namespace- or function-scope anonymous union
1331
   OBJECT, with the indicated TYPE, building appropriate VAR_DECLs.
1332
   Returns one of the fields for use in the mangled name.  */
1333
 
1334
static tree
1335
build_anon_union_vars (tree type, tree object)
1336
{
1337
  tree main_decl = NULL_TREE;
1338
  tree field;
1339
 
1340
  /* Rather than write the code to handle the non-union case,
1341
     just give an error.  */
1342
  if (TREE_CODE (type) != UNION_TYPE)
1343
    {
1344
      error ("anonymous struct not inside named type");
1345
      return error_mark_node;
1346
    }
1347
 
1348
  for (field = TYPE_FIELDS (type);
1349
       field != NULL_TREE;
1350
       field = DECL_CHAIN (field))
1351
    {
1352
      tree decl;
1353
      tree ref;
1354
 
1355
      if (DECL_ARTIFICIAL (field))
1356
        continue;
1357
      if (TREE_CODE (field) != FIELD_DECL)
1358
        {
1359
          permerror (input_location, "%q+#D invalid; an anonymous union can only "
1360
                     "have non-static data members", field);
1361
          continue;
1362
        }
1363
 
1364
      if (TREE_PRIVATE (field))
1365
        permerror (input_location, "private member %q+#D in anonymous union", field);
1366
      else if (TREE_PROTECTED (field))
1367
        permerror (input_location, "protected member %q+#D in anonymous union", field);
1368
 
1369
      if (processing_template_decl)
1370
        ref = build_min_nt (COMPONENT_REF, object,
1371
                            DECL_NAME (field), NULL_TREE);
1372
      else
1373
        ref = build_class_member_access_expr (object, field, NULL_TREE,
1374
                                              false, tf_warning_or_error);
1375
 
1376
      if (DECL_NAME (field))
1377
        {
1378
          tree base;
1379
 
1380
          decl = build_decl (input_location,
1381
                             VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
1382
          DECL_ANON_UNION_VAR_P (decl) = 1;
1383
          DECL_ARTIFICIAL (decl) = 1;
1384
 
1385
          base = get_base_address (object);
1386
          TREE_PUBLIC (decl) = TREE_PUBLIC (base);
1387
          TREE_STATIC (decl) = TREE_STATIC (base);
1388
          DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
1389
 
1390
          SET_DECL_VALUE_EXPR (decl, ref);
1391
          DECL_HAS_VALUE_EXPR_P (decl) = 1;
1392
 
1393
          decl = pushdecl (decl);
1394
        }
1395
      else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1396
        decl = build_anon_union_vars (TREE_TYPE (field), ref);
1397
      else
1398
        decl = 0;
1399
 
1400
      if (main_decl == NULL_TREE)
1401
        main_decl = decl;
1402
    }
1403
 
1404
  return main_decl;
1405
}
1406
 
1407
/* Finish off the processing of a UNION_TYPE structure.  If the union is an
1408
   anonymous union, then all members must be laid out together.  PUBLIC_P
1409
   is nonzero if this union is not declared static.  */
1410
 
1411
void
1412
finish_anon_union (tree anon_union_decl)
1413
{
1414
  tree type;
1415
  tree main_decl;
1416
  bool public_p;
1417
 
1418
  if (anon_union_decl == error_mark_node)
1419
    return;
1420
 
1421
  type = TREE_TYPE (anon_union_decl);
1422
  public_p = TREE_PUBLIC (anon_union_decl);
1423
 
1424
  /* The VAR_DECL's context is the same as the TYPE's context.  */
1425
  DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1426
 
1427
  if (TYPE_FIELDS (type) == NULL_TREE)
1428
    return;
1429
 
1430
  if (public_p)
1431
    {
1432
      error ("namespace-scope anonymous aggregates must be static");
1433
      return;
1434
    }
1435
 
1436
  main_decl = build_anon_union_vars (type, anon_union_decl);
1437
  if (main_decl == error_mark_node)
1438
    return;
1439
  if (main_decl == NULL_TREE)
1440
    {
1441
      warning (0, "anonymous union with no members");
1442
      return;
1443
    }
1444
 
1445
  if (!processing_template_decl)
1446
    {
1447
      /* Use main_decl to set the mangled name.  */
1448
      DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1449
      maybe_commonize_var (anon_union_decl);
1450
      if (TREE_STATIC (anon_union_decl) || DECL_EXTERNAL (anon_union_decl))
1451
        mangle_decl (anon_union_decl);
1452
      DECL_NAME (anon_union_decl) = NULL_TREE;
1453
    }
1454
 
1455
  pushdecl (anon_union_decl);
1456
  if (building_stmt_list_p ()
1457
      && at_function_scope_p ())
1458
    add_decl_expr (anon_union_decl);
1459
  else if (!processing_template_decl)
1460
    rest_of_decl_compilation (anon_union_decl,
1461
                              toplevel_bindings_p (), at_eof);
1462
}
1463
 
1464
/* Auxiliary functions to make type signatures for
1465
   `operator new' and `operator delete' correspond to
1466
   what compiler will be expecting.  */
1467
 
1468
tree
1469
coerce_new_type (tree type)
1470
{
1471
  int e = 0;
1472
  tree args = TYPE_ARG_TYPES (type);
1473
 
1474
  gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1475
 
1476
  if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1477
    {
1478
      e = 1;
1479
      error ("%<operator new%> must return type %qT", ptr_type_node);
1480
    }
1481
 
1482
  if (args && args != void_list_node)
1483
    {
1484
      if (TREE_PURPOSE (args))
1485
        {
1486
          /* [basic.stc.dynamic.allocation]
1487
 
1488
             The first parameter shall not have an associated default
1489
             argument.  */
1490
          error ("the first parameter of %<operator new%> cannot "
1491
                 "have a default argument");
1492
          /* Throw away the default argument.  */
1493
          TREE_PURPOSE (args) = NULL_TREE;
1494
        }
1495
 
1496
      if (!same_type_p (TREE_VALUE (args), size_type_node))
1497
        {
1498
          e = 2;
1499
          args = TREE_CHAIN (args);
1500
        }
1501
    }
1502
  else
1503
    e = 2;
1504
 
1505
  if (e == 2)
1506
    permerror (input_location, "%<operator new%> takes type %<size_t%> (%qT) "
1507
               "as first parameter", size_type_node);
1508
 
1509
  switch (e)
1510
  {
1511
    case 2:
1512
      args = tree_cons (NULL_TREE, size_type_node, args);
1513
      /* Fall through.  */
1514
    case 1:
1515
      type = build_exception_variant
1516
              (build_function_type (ptr_type_node, args),
1517
               TYPE_RAISES_EXCEPTIONS (type));
1518
      /* Fall through.  */
1519
    default:;
1520
  }
1521
  return type;
1522
}
1523
 
1524
tree
1525
coerce_delete_type (tree type)
1526
{
1527
  int e = 0;
1528
  tree args = TYPE_ARG_TYPES (type);
1529
 
1530
  gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1531
 
1532
  if (!same_type_p (TREE_TYPE (type), void_type_node))
1533
    {
1534
      e = 1;
1535
      error ("%<operator delete%> must return type %qT", void_type_node);
1536
    }
1537
 
1538
  if (!args || args == void_list_node
1539
      || !same_type_p (TREE_VALUE (args), ptr_type_node))
1540
    {
1541
      e = 2;
1542
      if (args && args != void_list_node)
1543
        args = TREE_CHAIN (args);
1544
      error ("%<operator delete%> takes type %qT as first parameter",
1545
             ptr_type_node);
1546
    }
1547
  switch (e)
1548
  {
1549
    case 2:
1550
      args = tree_cons (NULL_TREE, ptr_type_node, args);
1551
      /* Fall through.  */
1552
    case 1:
1553
      type = build_exception_variant
1554
              (build_function_type (void_type_node, args),
1555
               TYPE_RAISES_EXCEPTIONS (type));
1556
      /* Fall through.  */
1557
    default:;
1558
  }
1559
 
1560
  return type;
1561
}
1562
 
1563
/* DECL is a VAR_DECL for a vtable: walk through the entries in the vtable
1564
   and mark them as needed.  */
1565
 
1566
static void
1567
mark_vtable_entries (tree decl)
1568
{
1569
  tree fnaddr;
1570
  unsigned HOST_WIDE_INT idx;
1571
 
1572
  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
1573
                              idx, fnaddr)
1574
    {
1575
      tree fn;
1576
 
1577
      STRIP_NOPS (fnaddr);
1578
 
1579
      if (TREE_CODE (fnaddr) != ADDR_EXPR
1580
          && TREE_CODE (fnaddr) != FDESC_EXPR)
1581
        /* This entry is an offset: a virtual base class offset, a
1582
           virtual call offset, an RTTI offset, etc.  */
1583
        continue;
1584
 
1585
      fn = TREE_OPERAND (fnaddr, 0);
1586
      TREE_ADDRESSABLE (fn) = 1;
1587
      /* When we don't have vcall offsets, we output thunks whenever
1588
         we output the vtables that contain them.  With vcall offsets,
1589
         we know all the thunks we'll need when we emit a virtual
1590
         function, so we emit the thunks there instead.  */
1591
      if (DECL_THUNK_P (fn))
1592
        use_thunk (fn, /*emit_p=*/0);
1593
      mark_used (fn);
1594
    }
1595
}
1596
 
1597
/* Set DECL up to have the closest approximation of "initialized common"
1598
   linkage available.  */
1599
 
1600
void
1601
comdat_linkage (tree decl)
1602
{
1603
  if (flag_weak)
1604
    make_decl_one_only (decl, cxx_comdat_group (decl));
1605
  else if (TREE_CODE (decl) == FUNCTION_DECL
1606
           || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1607
    /* We can just emit function and compiler-generated variables
1608
       statically; having multiple copies is (for the most part) only
1609
       a waste of space.
1610
 
1611
       There are two correctness issues, however: the address of a
1612
       template instantiation with external linkage should be the
1613
       same, independent of what translation unit asks for the
1614
       address, and this will not hold when we emit multiple copies of
1615
       the function.  However, there's little else we can do.
1616
 
1617
       Also, by default, the typeinfo implementation assumes that
1618
       there will be only one copy of the string used as the name for
1619
       each type.  Therefore, if weak symbols are unavailable, the
1620
       run-time library should perform a more conservative check; it
1621
       should perform a string comparison, rather than an address
1622
       comparison.  */
1623
    TREE_PUBLIC (decl) = 0;
1624
  else
1625
    {
1626
      /* Static data member template instantiations, however, cannot
1627
         have multiple copies.  */
1628
      if (DECL_INITIAL (decl) == 0
1629
          || DECL_INITIAL (decl) == error_mark_node)
1630
        DECL_COMMON (decl) = 1;
1631
      else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1632
        {
1633
          DECL_COMMON (decl) = 1;
1634
          DECL_INITIAL (decl) = error_mark_node;
1635
        }
1636
      else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1637
        {
1638
          /* We can't do anything useful; leave vars for explicit
1639
             instantiation.  */
1640
          DECL_EXTERNAL (decl) = 1;
1641
          DECL_NOT_REALLY_EXTERN (decl) = 0;
1642
        }
1643
    }
1644
 
1645
  DECL_COMDAT (decl) = 1;
1646
}
1647
 
1648
/* For win32 we also want to put explicit instantiations in
1649
   linkonce sections, so that they will be merged with implicit
1650
   instantiations; otherwise we get duplicate symbol errors.
1651
   For Darwin we do not want explicit instantiations to be
1652
   linkonce.  */
1653
 
1654
void
1655
maybe_make_one_only (tree decl)
1656
{
1657
  /* We used to say that this was not necessary on targets that support weak
1658
     symbols, because the implicit instantiations will defer to the explicit
1659
     one.  However, that's not actually the case in SVR4; a strong definition
1660
     after a weak one is an error.  Also, not making explicit
1661
     instantiations one_only means that we can end up with two copies of
1662
     some template instantiations.  */
1663
  if (! flag_weak)
1664
    return;
1665
 
1666
  /* We can't set DECL_COMDAT on functions, or cp_finish_file will think
1667
     we can get away with not emitting them if they aren't used.  We need
1668
     to for variables so that cp_finish_decl will update their linkage,
1669
     because their DECL_INITIAL may not have been set properly yet.  */
1670
 
1671
  if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1672
      || (! DECL_EXPLICIT_INSTANTIATION (decl)
1673
          && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1674
    {
1675
      make_decl_one_only (decl, cxx_comdat_group (decl));
1676
 
1677
      if (TREE_CODE (decl) == VAR_DECL)
1678
        {
1679
          DECL_COMDAT (decl) = 1;
1680
          /* Mark it needed so we don't forget to emit it.  */
1681
          mark_decl_referenced (decl);
1682
        }
1683
    }
1684
}
1685
 
1686
/* Returns true iff DECL, a FUNCTION_DECL or VAR_DECL, has vague linkage.
1687
   This predicate will give the right answer during parsing of the
1688
   function, which other tests may not.  */
1689
 
1690
bool
1691
vague_linkage_p (tree decl)
1692
{
1693
  /* Unfortunately, import_export_decl has not always been called
1694
     before the function is processed, so we cannot simply check
1695
     DECL_COMDAT.  */
1696
  return (DECL_COMDAT (decl)
1697
          || (((TREE_CODE (decl) == FUNCTION_DECL
1698
                && DECL_DECLARED_INLINE_P (decl))
1699
               || (DECL_LANG_SPECIFIC (decl)
1700
                   && DECL_TEMPLATE_INSTANTIATION (decl)))
1701
              && TREE_PUBLIC (decl)));
1702
}
1703
 
1704
/* Determine whether or not we want to specifically import or export CTYPE,
1705
   using various heuristics.  */
1706
 
1707
static void
1708
import_export_class (tree ctype)
1709
{
1710
  /* -1 for imported, 1 for exported.  */
1711
  int import_export = 0;
1712
 
1713
  /* It only makes sense to call this function at EOF.  The reason is
1714
     that this function looks at whether or not the first non-inline
1715
     non-abstract virtual member function has been defined in this
1716
     translation unit.  But, we can't possibly know that until we've
1717
     seen the entire translation unit.  */
1718
  gcc_assert (at_eof);
1719
 
1720
  if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1721
    return;
1722
 
1723
  /* If MULTIPLE_SYMBOL_SPACES is set and we saw a #pragma interface,
1724
     we will have CLASSTYPE_INTERFACE_ONLY set but not
1725
     CLASSTYPE_INTERFACE_KNOWN.  In that case, we don't want to use this
1726
     heuristic because someone will supply a #pragma implementation
1727
     elsewhere, and deducing it here would produce a conflict.  */
1728
  if (CLASSTYPE_INTERFACE_ONLY (ctype))
1729
    return;
1730
 
1731
  if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1732
    import_export = -1;
1733
  else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1734
    import_export = 1;
1735
  else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1736
           && !flag_implicit_templates)
1737
    /* For a template class, without -fimplicit-templates, check the
1738
       repository.  If the virtual table is assigned to this
1739
       translation unit, then export the class; otherwise, import
1740
       it.  */
1741
      import_export = repo_export_class_p (ctype) ? 1 : -1;
1742
  else if (TYPE_POLYMORPHIC_P (ctype))
1743
    {
1744
      /* The ABI specifies that the virtual table and associated
1745
         information are emitted with the key method, if any.  */
1746
      tree method = CLASSTYPE_KEY_METHOD (ctype);
1747
      /* If weak symbol support is not available, then we must be
1748
         careful not to emit the vtable when the key function is
1749
         inline.  An inline function can be defined in multiple
1750
         translation units.  If we were to emit the vtable in each
1751
         translation unit containing a definition, we would get
1752
         multiple definition errors at link-time.  */
1753
      if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1754
        import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1755
    }
1756
 
1757
  /* When MULTIPLE_SYMBOL_SPACES is set, we cannot count on seeing
1758
     a definition anywhere else.  */
1759
  if (MULTIPLE_SYMBOL_SPACES && import_export == -1)
1760
    import_export = 0;
1761
 
1762
  /* Allow back ends the chance to overrule the decision.  */
1763
  if (targetm.cxx.import_export_class)
1764
    import_export = targetm.cxx.import_export_class (ctype, import_export);
1765
 
1766
  if (import_export)
1767
    {
1768
      SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1769
      CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1770
    }
1771
}
1772
 
1773
/* Return true if VAR has already been provided to the back end; in that
1774
   case VAR should not be modified further by the front end.  */
1775
static bool
1776
var_finalized_p (tree var)
1777
{
1778
  return varpool_node (var)->finalized;
1779
}
1780
 
1781
/* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1782
   must be emitted in this translation unit.  Mark it as such.  */
1783
 
1784
void
1785
mark_needed (tree decl)
1786
{
1787
  /* It's possible that we no longer need to set
1788
     TREE_SYMBOL_REFERENCED here directly, but doing so is
1789
     harmless.  */
1790
  TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = 1;
1791
  mark_decl_referenced (decl);
1792
}
1793
 
1794
/* DECL is either a FUNCTION_DECL or a VAR_DECL.  This function
1795
   returns true if a definition of this entity should be provided in
1796
   this object file.  Callers use this function to determine whether
1797
   or not to let the back end know that a definition of DECL is
1798
   available in this translation unit.  */
1799
 
1800
bool
1801
decl_needed_p (tree decl)
1802
{
1803
  gcc_assert (TREE_CODE (decl) == VAR_DECL
1804
              || TREE_CODE (decl) == FUNCTION_DECL);
1805
  /* This function should only be called at the end of the translation
1806
     unit.  We cannot be sure of whether or not something will be
1807
     COMDAT until that point.  */
1808
  gcc_assert (at_eof);
1809
 
1810
  /* All entities with external linkage that are not COMDAT should be
1811
     emitted; they may be referred to from other object files.  */
1812
  if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1813
    return true;
1814
  /* If this entity was used, let the back end see it; it will decide
1815
     whether or not to emit it into the object file.  */
1816
  if (TREE_USED (decl)
1817
      || (DECL_ASSEMBLER_NAME_SET_P (decl)
1818
          && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
1819
      return true;
1820
  /* Functions marked "dllexport" must be emitted so that they are
1821
     visible to other DLLs.  */
1822
  if (flag_keep_inline_dllexport
1823
      && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
1824
    return true;
1825
  /* Otherwise, DECL does not need to be emitted -- yet.  A subsequent
1826
     reference to DECL might cause it to be emitted later.  */
1827
  return false;
1828
}
1829
 
1830
/* If necessary, write out the vtables for the dynamic class CTYPE.
1831
   Returns true if any vtables were emitted.  */
1832
 
1833
static bool
1834
maybe_emit_vtables (tree ctype)
1835
{
1836
  tree vtbl;
1837
  tree primary_vtbl;
1838
  int needed = 0;
1839
  struct varpool_node *current = NULL, *last = NULL, *first = NULL;
1840
 
1841
  /* If the vtables for this class have already been emitted there is
1842
     nothing more to do.  */
1843
  primary_vtbl = CLASSTYPE_VTABLES (ctype);
1844
  if (var_finalized_p (primary_vtbl))
1845
    return false;
1846
  /* Ignore dummy vtables made by get_vtable_decl.  */
1847
  if (TREE_TYPE (primary_vtbl) == void_type_node)
1848
    return false;
1849
 
1850
  /* On some targets, we cannot determine the key method until the end
1851
     of the translation unit -- which is when this function is
1852
     called.  */
1853
  if (!targetm.cxx.key_method_may_be_inline ())
1854
    determine_key_method (ctype);
1855
 
1856
  /* See if any of the vtables are needed.  */
1857
  for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1858
    {
1859
      import_export_decl (vtbl);
1860
      if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1861
        needed = 1;
1862
    }
1863
  if (!needed)
1864
    {
1865
      /* If the references to this class' vtables are optimized away,
1866
         still emit the appropriate debugging information.  See
1867
         dfs_debug_mark.  */
1868
      if (DECL_COMDAT (primary_vtbl)
1869
          && CLASSTYPE_DEBUG_REQUESTED (ctype))
1870
        note_debug_info_needed (ctype);
1871
      return false;
1872
    }
1873
 
1874
  /* The ABI requires that we emit all of the vtables if we emit any
1875
     of them.  */
1876
  for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1877
    {
1878
      /* Mark entities references from the virtual table as used.  */
1879
      mark_vtable_entries (vtbl);
1880
 
1881
      if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1882
        {
1883
          VEC(tree,gc)* cleanups = NULL;
1884
          tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl), &cleanups,
1885
                                        LOOKUP_NORMAL);
1886
 
1887
          /* It had better be all done at compile-time.  */
1888
          gcc_assert (!expr && !cleanups);
1889
        }
1890
 
1891
      /* Write it out.  */
1892
      DECL_EXTERNAL (vtbl) = 0;
1893
      rest_of_decl_compilation (vtbl, 1, 1);
1894
 
1895
      /* Because we're only doing syntax-checking, we'll never end up
1896
         actually marking the variable as written.  */
1897
      if (flag_syntax_only)
1898
        TREE_ASM_WRITTEN (vtbl) = 1;
1899
      else if (DECL_COMDAT (vtbl))
1900
        {
1901
          current = varpool_node (vtbl);
1902
          if (last)
1903
            last->same_comdat_group = current;
1904
          last = current;
1905
          if (!first)
1906
            first = current;
1907
        }
1908
    }
1909
 
1910
  if (first != last)
1911
    last->same_comdat_group = first;
1912
 
1913
  /* Since we're writing out the vtable here, also write the debug
1914
     info.  */
1915
  note_debug_info_needed (ctype);
1916
 
1917
  return true;
1918
}
1919
 
1920
/* A special return value from type_visibility meaning internal
1921
   linkage.  */
1922
 
1923
enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 };
1924
 
1925
/* walk_tree helper function for type_visibility.  */
1926
 
1927
static tree
1928
min_vis_r (tree *tp, int *walk_subtrees, void *data)
1929
{
1930
  int *vis_p = (int *)data;
1931
  if (! TYPE_P (*tp))
1932
    {
1933
      *walk_subtrees = 0;
1934
    }
1935
  else if (CLASS_TYPE_P (*tp))
1936
    {
1937
      if (!TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
1938
        {
1939
          *vis_p = VISIBILITY_ANON;
1940
          return *tp;
1941
        }
1942
      else if (CLASSTYPE_VISIBILITY (*tp) > *vis_p)
1943
        *vis_p = CLASSTYPE_VISIBILITY (*tp);
1944
    }
1945
  return NULL;
1946
}
1947
 
1948
/* Returns the visibility of TYPE, which is the minimum visibility of its
1949
   component types.  */
1950
 
1951
static int
1952
type_visibility (tree type)
1953
{
1954
  int vis = VISIBILITY_DEFAULT;
1955
  cp_walk_tree_without_duplicates (&type, min_vis_r, &vis);
1956
  return vis;
1957
}
1958
 
1959
/* Limit the visibility of DECL to VISIBILITY, if not explicitly
1960
   specified (or if VISIBILITY is static).  If TMPL is true, this
1961
   constraint is for a template argument, and takes precedence
1962
   over explicitly-specified visibility on the template.  */
1963
 
1964
static void
1965
constrain_visibility (tree decl, int visibility, bool tmpl)
1966
{
1967
  if (visibility == VISIBILITY_ANON)
1968
    {
1969
      /* extern "C" declarations aren't affected by the anonymous
1970
         namespace.  */
1971
      if (!DECL_EXTERN_C_P (decl))
1972
        {
1973
          TREE_PUBLIC (decl) = 0;
1974
          DECL_WEAK (decl) = 0;
1975
          DECL_COMMON (decl) = 0;
1976
          DECL_COMDAT_GROUP (decl) = NULL_TREE;
1977
          DECL_INTERFACE_KNOWN (decl) = 1;
1978
          if (DECL_LANG_SPECIFIC (decl))
1979
            DECL_NOT_REALLY_EXTERN (decl) = 1;
1980
        }
1981
    }
1982
  else if (visibility > DECL_VISIBILITY (decl)
1983
           && (tmpl || !DECL_VISIBILITY_SPECIFIED (decl)))
1984
    {
1985
      DECL_VISIBILITY (decl) = (enum symbol_visibility) visibility;
1986
      /* This visibility was not specified.  */
1987
      DECL_VISIBILITY_SPECIFIED (decl) = false;
1988
    }
1989
}
1990
 
1991
/* Constrain the visibility of DECL based on the visibility of its template
1992
   arguments.  */
1993
 
1994
static void
1995
constrain_visibility_for_template (tree decl, tree targs)
1996
{
1997
  /* If this is a template instantiation, check the innermost
1998
     template args for visibility constraints.  The outer template
1999
     args are covered by the class check.  */
2000
  tree args = INNERMOST_TEMPLATE_ARGS (targs);
2001
  int i;
2002
  for (i = TREE_VEC_LENGTH (args); i > 0; --i)
2003
    {
2004
      int vis = 0;
2005
 
2006
      tree arg = TREE_VEC_ELT (args, i-1);
2007
      if (TYPE_P (arg))
2008
        vis = type_visibility (arg);
2009
      else if (TREE_TYPE (arg) && POINTER_TYPE_P (TREE_TYPE (arg)))
2010
        {
2011
          STRIP_NOPS (arg);
2012
          if (TREE_CODE (arg) == ADDR_EXPR)
2013
            arg = TREE_OPERAND (arg, 0);
2014
          if (TREE_CODE (arg) == VAR_DECL
2015
              || TREE_CODE (arg) == FUNCTION_DECL)
2016
            {
2017
              if (! TREE_PUBLIC (arg))
2018
                vis = VISIBILITY_ANON;
2019
              else
2020
                vis = DECL_VISIBILITY (arg);
2021
            }
2022
        }
2023
      if (vis)
2024
        constrain_visibility (decl, vis, true);
2025
    }
2026
}
2027
 
2028
/* Like c_determine_visibility, but with additional C++-specific
2029
   behavior.
2030
 
2031
   Function-scope entities can rely on the function's visibility because
2032
   it is set in start_preparsed_function.
2033
 
2034
   Class-scope entities cannot rely on the class's visibility until the end
2035
   of the enclosing class definition.
2036
 
2037
   Note that because namespaces have multiple independent definitions,
2038
   namespace visibility is handled elsewhere using the #pragma visibility
2039
   machinery rather than by decorating the namespace declaration.
2040
 
2041
   The goal is for constraints from the type to give a diagnostic, and
2042
   other constraints to be applied silently.  */
2043
 
2044
void
2045
determine_visibility (tree decl)
2046
{
2047
  tree class_type = NULL_TREE;
2048
  bool use_template;
2049
  bool orig_visibility_specified;
2050
  enum symbol_visibility orig_visibility;
2051
 
2052
  /* Remember that all decls get VISIBILITY_DEFAULT when built.  */
2053
 
2054
  /* Only relevant for names with external linkage.  */
2055
  if (!TREE_PUBLIC (decl))
2056
    return;
2057
 
2058
  /* Cloned constructors and destructors get the same visibility as
2059
     the underlying function.  That should be set up in
2060
     maybe_clone_body.  */
2061
  gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
2062
 
2063
  orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl);
2064
  orig_visibility = DECL_VISIBILITY (decl);
2065
 
2066
  if (TREE_CODE (decl) == TYPE_DECL)
2067
    {
2068
      if (CLASS_TYPE_P (TREE_TYPE (decl)))
2069
        use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl));
2070
      else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
2071
        use_template = 1;
2072
      else
2073
        use_template = 0;
2074
    }
2075
  else if (DECL_LANG_SPECIFIC (decl))
2076
    use_template = DECL_USE_TEMPLATE (decl);
2077
  else
2078
    use_template = 0;
2079
 
2080
  /* If DECL is a member of a class, visibility specifiers on the
2081
     class can influence the visibility of the DECL.  */
2082
  if (DECL_CLASS_SCOPE_P (decl))
2083
    class_type = DECL_CONTEXT (decl);
2084
  else
2085
    {
2086
      /* Not a class member.  */
2087
 
2088
      /* Virtual tables have DECL_CONTEXT set to their associated class,
2089
         so they are automatically handled above.  */
2090
      gcc_assert (TREE_CODE (decl) != VAR_DECL
2091
                  || !DECL_VTABLE_OR_VTT_P (decl));
2092
 
2093
      if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl))
2094
        {
2095
          /* Local statics and classes get the visibility of their
2096
             containing function by default, except that
2097
             -fvisibility-inlines-hidden doesn't affect them.  */
2098
          tree fn = DECL_CONTEXT (decl);
2099
          if (DECL_VISIBILITY_SPECIFIED (fn))
2100
            {
2101
              DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2102
              DECL_VISIBILITY_SPECIFIED (decl) =
2103
                DECL_VISIBILITY_SPECIFIED (fn);
2104
            }
2105
          else
2106
            {
2107
              if (DECL_CLASS_SCOPE_P (fn))
2108
                determine_visibility_from_class (decl, DECL_CONTEXT (fn));
2109
              else if (determine_hidden_inline (fn))
2110
                {
2111
                  DECL_VISIBILITY (decl) = default_visibility;
2112
                  DECL_VISIBILITY_SPECIFIED (decl) =
2113
                    visibility_options.inpragma;
2114
                }
2115
              else
2116
                {
2117
                  DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2118
                  DECL_VISIBILITY_SPECIFIED (decl) =
2119
                    DECL_VISIBILITY_SPECIFIED (fn);
2120
                }
2121
            }
2122
 
2123
          /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set,
2124
             but have no TEMPLATE_INFO, so don't try to check it.  */
2125
          use_template = 0;
2126
        }
2127
      else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl)
2128
               && flag_visibility_ms_compat)
2129
        {
2130
          /* Under -fvisibility-ms-compat, types are visible by default,
2131
             even though their contents aren't.  */
2132
          tree underlying_type = TREE_TYPE (DECL_NAME (decl));
2133
          int underlying_vis = type_visibility (underlying_type);
2134
          if (underlying_vis == VISIBILITY_ANON
2135
              || (CLASS_TYPE_P (underlying_type)
2136
                  && CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type)))
2137
            constrain_visibility (decl, underlying_vis, false);
2138
          else
2139
            DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
2140
        }
2141
      else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2142
        {
2143
          /* tinfo visibility is based on the type it's for.  */
2144
          constrain_visibility
2145
            (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))), false);
2146
 
2147
          /* Give the target a chance to override the visibility associated
2148
             with DECL.  */
2149
          if (TREE_PUBLIC (decl)
2150
              && !DECL_REALLY_EXTERN (decl)
2151
              && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl)))
2152
              && !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl))))
2153
            targetm.cxx.determine_class_data_visibility (decl);
2154
        }
2155
      else if (use_template)
2156
        /* Template instantiations and specializations get visibility based
2157
           on their template unless they override it with an attribute.  */;
2158
      else if (! DECL_VISIBILITY_SPECIFIED (decl))
2159
        {
2160
          if (determine_hidden_inline (decl))
2161
            DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2162
          else
2163
            {
2164
              /* Set default visibility to whatever the user supplied with
2165
                 #pragma GCC visibility or a namespace visibility attribute.  */
2166
              DECL_VISIBILITY (decl) = default_visibility;
2167
              DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
2168
            }
2169
        }
2170
    }
2171
 
2172
  if (use_template)
2173
    {
2174
      /* If the specialization doesn't specify visibility, use the
2175
         visibility from the template.  */
2176
      tree tinfo = (TREE_CODE (decl) == TYPE_DECL
2177
                    ? TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2178
                    : DECL_TEMPLATE_INFO (decl));
2179
      tree args = TI_ARGS (tinfo);
2180
      tree attribs = (TREE_CODE (decl) == TYPE_DECL
2181
                      ? TYPE_ATTRIBUTES (TREE_TYPE (decl))
2182
                      : DECL_ATTRIBUTES (decl));
2183
 
2184
      if (args != error_mark_node
2185
          /* Template argument visibility outweighs #pragma or namespace
2186
             visibility, but not an explicit attribute.  */
2187
          && !lookup_attribute ("visibility", attribs))
2188
        {
2189
          int depth = TMPL_ARGS_DEPTH (args);
2190
          tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
2191
 
2192
          if (!DECL_VISIBILITY_SPECIFIED (decl))
2193
            {
2194
              if (!DECL_VISIBILITY_SPECIFIED (pattern)
2195
                  && determine_hidden_inline (decl))
2196
                DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2197
              else
2198
                {
2199
                  DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern);
2200
                  DECL_VISIBILITY_SPECIFIED (decl)
2201
                    = DECL_VISIBILITY_SPECIFIED (pattern);
2202
                }
2203
            }
2204
 
2205
          /* FIXME should TMPL_ARGS_DEPTH really return 1 for null input? */
2206
          if (args && depth > template_class_depth (class_type))
2207
            /* Limit visibility based on its template arguments.  */
2208
            constrain_visibility_for_template (decl, args);
2209
        }
2210
    }
2211
 
2212
  if (class_type)
2213
    determine_visibility_from_class (decl, class_type);
2214
 
2215
  if (decl_anon_ns_mem_p (decl))
2216
    /* Names in an anonymous namespace get internal linkage.
2217
       This might change once we implement export.  */
2218
    constrain_visibility (decl, VISIBILITY_ANON, false);
2219
  else if (TREE_CODE (decl) != TYPE_DECL)
2220
    {
2221
      /* Propagate anonymity from type to decl.  */
2222
      int tvis = type_visibility (TREE_TYPE (decl));
2223
      if (tvis == VISIBILITY_ANON
2224
          || ! DECL_VISIBILITY_SPECIFIED (decl))
2225
        constrain_visibility (decl, tvis, false);
2226
    }
2227
  else if (no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/true))
2228
    /* DR 757: A type without linkage shall not be used as the type of a
2229
       variable or function with linkage, unless
2230
       o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
2231
       o the variable or function is not used (3.2 [basic.def.odr]) or is
2232
       defined in the same translation unit.
2233
 
2234
       Since non-extern "C" decls need to be defined in the same
2235
       translation unit, we can make the type internal.  */
2236
    constrain_visibility (decl, VISIBILITY_ANON, false);
2237
 
2238
  /* If visibility changed and DECL already has DECL_RTL, ensure
2239
     symbol flags are updated.  */
2240
  if ((DECL_VISIBILITY (decl) != orig_visibility
2241
       || DECL_VISIBILITY_SPECIFIED (decl) != orig_visibility_specified)
2242
      && ((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
2243
          || TREE_CODE (decl) == FUNCTION_DECL)
2244
      && DECL_RTL_SET_P (decl))
2245
    make_decl_rtl (decl);
2246
}
2247
 
2248
/* By default, static data members and function members receive
2249
   the visibility of their containing class.  */
2250
 
2251
static void
2252
determine_visibility_from_class (tree decl, tree class_type)
2253
{
2254
  if (DECL_VISIBILITY_SPECIFIED (decl))
2255
    return;
2256
 
2257
  if (determine_hidden_inline (decl))
2258
    DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2259
  else
2260
    {
2261
      /* Default to the class visibility.  */
2262
      DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
2263
      DECL_VISIBILITY_SPECIFIED (decl)
2264
        = CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
2265
    }
2266
 
2267
  /* Give the target a chance to override the visibility associated
2268
     with DECL.  */
2269
  if (TREE_CODE (decl) == VAR_DECL
2270
      && (DECL_TINFO_P (decl)
2271
          || (DECL_VTABLE_OR_VTT_P (decl)
2272
              /* Construction virtual tables are not exported because
2273
                 they cannot be referred to from other object files;
2274
                 their name is not standardized by the ABI.  */
2275
              && !DECL_CONSTRUCTION_VTABLE_P (decl)))
2276
      && TREE_PUBLIC (decl)
2277
      && !DECL_REALLY_EXTERN (decl)
2278
      && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
2279
    targetm.cxx.determine_class_data_visibility (decl);
2280
}
2281
 
2282
/* Returns true iff DECL is an inline that should get hidden visibility
2283
   because of -fvisibility-inlines-hidden.  */
2284
 
2285
static bool
2286
determine_hidden_inline (tree decl)
2287
{
2288
  return (visibility_options.inlines_hidden
2289
          /* Don't do this for inline templates; specializations might not be
2290
             inline, and we don't want them to inherit the hidden
2291
             visibility.  We'll set it here for all inline instantiations.  */
2292
          && !processing_template_decl
2293
          && TREE_CODE (decl) == FUNCTION_DECL
2294
          && DECL_DECLARED_INLINE_P (decl)
2295
          && (! DECL_LANG_SPECIFIC (decl)
2296
              || ! DECL_EXPLICIT_INSTANTIATION (decl)));
2297
}
2298
 
2299
/* Constrain the visibility of a class TYPE based on the visibility of its
2300
   field types.  Warn if any fields require lesser visibility.  */
2301
 
2302
void
2303
constrain_class_visibility (tree type)
2304
{
2305
  tree binfo;
2306
  tree t;
2307
  int i;
2308
 
2309
  int vis = type_visibility (type);
2310
 
2311
  if (vis == VISIBILITY_ANON
2312
      || DECL_IN_SYSTEM_HEADER (TYPE_MAIN_DECL (type)))
2313
    return;
2314
 
2315
  /* Don't warn about visibility if the class has explicit visibility.  */
2316
  if (CLASSTYPE_VISIBILITY_SPECIFIED (type))
2317
    vis = VISIBILITY_INTERNAL;
2318
 
2319
  for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
2320
    if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
2321
      {
2322
        tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
2323
        int subvis = type_visibility (ftype);
2324
 
2325
        if (subvis == VISIBILITY_ANON)
2326
          {
2327
            if (!in_main_input_context ())
2328
              warning (0, "\
2329
%qT has a field %qD whose type uses the anonymous namespace",
2330
                       type, t);
2331
          }
2332
        else if (MAYBE_CLASS_TYPE_P (ftype)
2333
                 && vis < VISIBILITY_HIDDEN
2334
                 && subvis >= VISIBILITY_HIDDEN)
2335
          warning (OPT_Wattributes, "\
2336
%qT declared with greater visibility than the type of its field %qD",
2337
                   type, t);
2338
      }
2339
 
2340
  binfo = TYPE_BINFO (type);
2341
  for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i)
2342
    {
2343
      int subvis = type_visibility (TREE_TYPE (t));
2344
 
2345
      if (subvis == VISIBILITY_ANON)
2346
        {
2347
          if (!in_main_input_context())
2348
            warning (0, "\
2349
%qT has a base %qT whose type uses the anonymous namespace",
2350
                     type, TREE_TYPE (t));
2351
        }
2352
      else if (vis < VISIBILITY_HIDDEN
2353
               && subvis >= VISIBILITY_HIDDEN)
2354
        warning (OPT_Wattributes, "\
2355
%qT declared with greater visibility than its base %qT",
2356
                 type, TREE_TYPE (t));
2357
    }
2358
}
2359
 
2360
/* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
2361
   for DECL has not already been determined, do so now by setting
2362
   DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
2363
   function is called entities with vague linkage whose definitions
2364
   are available must have TREE_PUBLIC set.
2365
 
2366
   If this function decides to place DECL in COMDAT, it will set
2367
   appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
2368
   the caller to decide whether or not to clear DECL_EXTERNAL.  Some
2369
   callers defer that decision until it is clear that DECL is actually
2370
   required.  */
2371
 
2372
void
2373
import_export_decl (tree decl)
2374
{
2375
  int emit_p;
2376
  bool comdat_p;
2377
  bool import_p;
2378
  tree class_type = NULL_TREE;
2379
 
2380
  if (DECL_INTERFACE_KNOWN (decl))
2381
    return;
2382
 
2383
  /* We cannot determine what linkage to give to an entity with vague
2384
     linkage until the end of the file.  For example, a virtual table
2385
     for a class will be defined if and only if the key method is
2386
     defined in this translation unit.  As a further example, consider
2387
     that when compiling a translation unit that uses PCH file with
2388
     "-frepo" it would be incorrect to make decisions about what
2389
     entities to emit when building the PCH; those decisions must be
2390
     delayed until the repository information has been processed.  */
2391
  gcc_assert (at_eof);
2392
  /* Object file linkage for explicit instantiations is handled in
2393
     mark_decl_instantiated.  For static variables in functions with
2394
     vague linkage, maybe_commonize_var is used.
2395
 
2396
     Therefore, the only declarations that should be provided to this
2397
     function are those with external linkage that are:
2398
 
2399
     * implicit instantiations of function templates
2400
 
2401
     * inline function
2402
 
2403
     * implicit instantiations of static data members of class
2404
       templates
2405
 
2406
     * virtual tables
2407
 
2408
     * typeinfo objects
2409
 
2410
     Furthermore, all entities that reach this point must have a
2411
     definition available in this translation unit.
2412
 
2413
     The following assertions check these conditions.  */
2414
  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
2415
              || TREE_CODE (decl) == VAR_DECL);
2416
  /* Any code that creates entities with TREE_PUBLIC cleared should
2417
     also set DECL_INTERFACE_KNOWN.  */
2418
  gcc_assert (TREE_PUBLIC (decl));
2419
  if (TREE_CODE (decl) == FUNCTION_DECL)
2420
    gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2421
                || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
2422
                || DECL_DECLARED_INLINE_P (decl));
2423
  else
2424
    gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2425
                || DECL_VTABLE_OR_VTT_P (decl)
2426
                || DECL_TINFO_P (decl));
2427
  /* Check that a definition of DECL is available in this translation
2428
     unit.  */
2429
  gcc_assert (!DECL_REALLY_EXTERN (decl));
2430
 
2431
  /* Assume that DECL will not have COMDAT linkage.  */
2432
  comdat_p = false;
2433
  /* Assume that DECL will not be imported into this translation
2434
     unit.  */
2435
  import_p = false;
2436
 
2437
  /* See if the repository tells us whether or not to emit DECL in
2438
     this translation unit.  */
2439
  emit_p = repo_emit_p (decl);
2440
  if (emit_p == 0)
2441
    import_p = true;
2442
  else if (emit_p == 1)
2443
    {
2444
      /* The repository indicates that this entity should be defined
2445
         here.  Make sure the back end honors that request.  */
2446
      if (TREE_CODE (decl) == VAR_DECL)
2447
        mark_needed (decl);
2448
      else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
2449
               || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2450
        {
2451
          tree clone;
2452
          FOR_EACH_CLONE (clone, decl)
2453
            mark_needed (clone);
2454
        }
2455
      else
2456
        mark_needed (decl);
2457
      /* Output the definition as an ordinary strong definition.  */
2458
      DECL_EXTERNAL (decl) = 0;
2459
      DECL_INTERFACE_KNOWN (decl) = 1;
2460
      return;
2461
    }
2462
 
2463
  if (import_p)
2464
    /* We have already decided what to do with this DECL; there is no
2465
       need to check anything further.  */
2466
    ;
2467
  else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
2468
    {
2469
      class_type = DECL_CONTEXT (decl);
2470
      import_export_class (class_type);
2471
      if (TYPE_FOR_JAVA (class_type))
2472
        import_p = true;
2473
      else if (CLASSTYPE_INTERFACE_KNOWN (class_type)
2474
               && CLASSTYPE_INTERFACE_ONLY (class_type))
2475
        import_p = true;
2476
      else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
2477
               && !CLASSTYPE_USE_TEMPLATE (class_type)
2478
               && CLASSTYPE_KEY_METHOD (class_type)
2479
               && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type)))
2480
        /* The ABI requires that all virtual tables be emitted with
2481
           COMDAT linkage.  However, on systems where COMDAT symbols
2482
           don't show up in the table of contents for a static
2483
           archive, or on systems without weak symbols (where we
2484
           approximate COMDAT linkage by using internal linkage), the
2485
           linker will report errors about undefined symbols because
2486
           it will not see the virtual table definition.  Therefore,
2487
           in the case that we know that the virtual table will be
2488
           emitted in only one translation unit, we make the virtual
2489
           table an ordinary definition with external linkage.  */
2490
        DECL_EXTERNAL (decl) = 0;
2491
      else if (CLASSTYPE_INTERFACE_KNOWN (class_type))
2492
        {
2493
          /* CLASS_TYPE is being exported from this translation unit,
2494
             so DECL should be defined here.  */
2495
          if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (class_type))
2496
            /* If a class is declared in a header with the "extern
2497
               template" extension, then it will not be instantiated,
2498
               even in translation units that would normally require
2499
               it.  Often such classes are explicitly instantiated in
2500
               one translation unit.  Therefore, the explicit
2501
               instantiation must be made visible to other translation
2502
               units.  */
2503
            DECL_EXTERNAL (decl) = 0;
2504
          else
2505
            {
2506
              /* The generic C++ ABI says that class data is always
2507
                 COMDAT, even if there is a key function.  Some
2508
                 variants (e.g., the ARM EABI) says that class data
2509
                 only has COMDAT linkage if the class data might be
2510
                 emitted in more than one translation unit.  When the
2511
                 key method can be inline and is inline, we still have
2512
                 to arrange for comdat even though
2513
                 class_data_always_comdat is false.  */
2514
              if (!CLASSTYPE_KEY_METHOD (class_type)
2515
                  || DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type))
2516
                  || targetm.cxx.class_data_always_comdat ())
2517
                {
2518
                  /* The ABI requires COMDAT linkage.  Normally, we
2519
                     only emit COMDAT things when they are needed;
2520
                     make sure that we realize that this entity is
2521
                     indeed needed.  */
2522
                  comdat_p = true;
2523
                  mark_needed (decl);
2524
                }
2525
            }
2526
        }
2527
      else if (!flag_implicit_templates
2528
               && CLASSTYPE_IMPLICIT_INSTANTIATION (class_type))
2529
        import_p = true;
2530
      else
2531
        comdat_p = true;
2532
    }
2533
  else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2534
    {
2535
      tree type = TREE_TYPE (DECL_NAME (decl));
2536
      if (CLASS_TYPE_P (type))
2537
        {
2538
          class_type = type;
2539
          import_export_class (type);
2540
          if (CLASSTYPE_INTERFACE_KNOWN (type)
2541
              && TYPE_POLYMORPHIC_P (type)
2542
              && CLASSTYPE_INTERFACE_ONLY (type)
2543
              /* If -fno-rtti was specified, then we cannot be sure
2544
                 that RTTI information will be emitted with the
2545
                 virtual table of the class, so we must emit it
2546
                 wherever it is used.  */
2547
              && flag_rtti)
2548
            import_p = true;
2549
          else
2550
            {
2551
              if (CLASSTYPE_INTERFACE_KNOWN (type)
2552
                  && !CLASSTYPE_INTERFACE_ONLY (type))
2553
                {
2554
                  comdat_p = (targetm.cxx.class_data_always_comdat ()
2555
                              || (CLASSTYPE_KEY_METHOD (type)
2556
                                  && DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))));
2557
                  mark_needed (decl);
2558
                  if (!flag_weak)
2559
                    {
2560
                      comdat_p = false;
2561
                      DECL_EXTERNAL (decl) = 0;
2562
                    }
2563
                }
2564
              else
2565
                comdat_p = true;
2566
            }
2567
        }
2568
      else
2569
        comdat_p = true;
2570
    }
2571
  else if (DECL_TEMPLATE_INSTANTIATION (decl)
2572
           || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
2573
    {
2574
      /* DECL is an implicit instantiation of a function or static
2575
         data member.  */
2576
      if ((flag_implicit_templates
2577
           && !flag_use_repository)
2578
          || (flag_implicit_inline_templates
2579
              && TREE_CODE (decl) == FUNCTION_DECL
2580
              && DECL_DECLARED_INLINE_P (decl)))
2581
        comdat_p = true;
2582
      else
2583
        /* If we are not implicitly generating templates, then mark
2584
           this entity as undefined in this translation unit.  */
2585
        import_p = true;
2586
    }
2587
  else if (DECL_FUNCTION_MEMBER_P (decl))
2588
    {
2589
      if (!DECL_DECLARED_INLINE_P (decl))
2590
        {
2591
          tree ctype = DECL_CONTEXT (decl);
2592
          import_export_class (ctype);
2593
          if (CLASSTYPE_INTERFACE_KNOWN (ctype))
2594
            {
2595
              DECL_NOT_REALLY_EXTERN (decl)
2596
                = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
2597
                     || (DECL_DECLARED_INLINE_P (decl)
2598
                         && ! flag_implement_inlines
2599
                         && !DECL_VINDEX (decl)));
2600
 
2601
              if (!DECL_NOT_REALLY_EXTERN (decl))
2602
                DECL_EXTERNAL (decl) = 1;
2603
 
2604
              /* Always make artificials weak.  */
2605
              if (DECL_ARTIFICIAL (decl) && flag_weak)
2606
                comdat_p = true;
2607
              else
2608
                maybe_make_one_only (decl);
2609
            }
2610
        }
2611
      else
2612
        comdat_p = true;
2613
    }
2614
  else
2615
    comdat_p = true;
2616
 
2617
  if (import_p)
2618
    {
2619
      /* If we are importing DECL into this translation unit, mark is
2620
         an undefined here.  */
2621
      DECL_EXTERNAL (decl) = 1;
2622
      DECL_NOT_REALLY_EXTERN (decl) = 0;
2623
    }
2624
  else if (comdat_p)
2625
    {
2626
      /* If we decided to put DECL in COMDAT, mark it accordingly at
2627
         this point.  */
2628
      comdat_linkage (decl);
2629
    }
2630
 
2631
  DECL_INTERFACE_KNOWN (decl) = 1;
2632
}
2633
 
2634
/* Return an expression that performs the destruction of DECL, which
2635
   must be a VAR_DECL whose type has a non-trivial destructor, or is
2636
   an array whose (innermost) elements have a non-trivial destructor.  */
2637
 
2638
tree
2639
build_cleanup (tree decl)
2640
{
2641
  tree temp;
2642
  tree type = TREE_TYPE (decl);
2643
 
2644
  /* This function should only be called for declarations that really
2645
     require cleanups.  */
2646
  gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
2647
 
2648
  /* Treat all objects with destructors as used; the destructor may do
2649
     something substantive.  */
2650
  mark_used (decl);
2651
 
2652
  if (TREE_CODE (type) == ARRAY_TYPE)
2653
    temp = decl;
2654
  else
2655
    temp = build_address (decl);
2656
  temp = build_delete (TREE_TYPE (temp), temp,
2657
                       sfk_complete_destructor,
2658
                       LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0,
2659
                       tf_warning_or_error);
2660
  return temp;
2661
}
2662
 
2663
/* Returns the initialization guard variable for the variable DECL,
2664
   which has static storage duration.  */
2665
 
2666
tree
2667
get_guard (tree decl)
2668
{
2669
  tree sname;
2670
  tree guard;
2671
 
2672
  sname = mangle_guard_variable (decl);
2673
  guard = IDENTIFIER_GLOBAL_VALUE (sname);
2674
  if (! guard)
2675
    {
2676
      tree guard_type;
2677
 
2678
      /* We use a type that is big enough to contain a mutex as well
2679
         as an integer counter.  */
2680
      guard_type = targetm.cxx.guard_type ();
2681
      guard = build_decl (DECL_SOURCE_LOCATION (decl),
2682
                          VAR_DECL, sname, guard_type);
2683
 
2684
      /* The guard should have the same linkage as what it guards.  */
2685
      TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
2686
      TREE_STATIC (guard) = TREE_STATIC (decl);
2687
      DECL_COMMON (guard) = DECL_COMMON (decl);
2688
      DECL_COMDAT (guard) = DECL_COMDAT (decl);
2689
      if (DECL_ONE_ONLY (decl))
2690
        make_decl_one_only (guard, cxx_comdat_group (guard));
2691
      if (TREE_PUBLIC (decl))
2692
        DECL_WEAK (guard) = DECL_WEAK (decl);
2693
      DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
2694
      DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
2695
 
2696
      DECL_ARTIFICIAL (guard) = 1;
2697
      DECL_IGNORED_P (guard) = 1;
2698
      TREE_USED (guard) = 1;
2699
      pushdecl_top_level_and_finish (guard, NULL_TREE);
2700
    }
2701
  return guard;
2702
}
2703
 
2704
/* Return those bits of the GUARD variable that should be set when the
2705
   guarded entity is actually initialized.  */
2706
 
2707
static tree
2708
get_guard_bits (tree guard)
2709
{
2710
  if (!targetm.cxx.guard_mask_bit ())
2711
    {
2712
      /* We only set the first byte of the guard, in order to leave room
2713
         for a mutex in the high-order bits.  */
2714
      guard = build1 (ADDR_EXPR,
2715
                      build_pointer_type (TREE_TYPE (guard)),
2716
                      guard);
2717
      guard = build1 (NOP_EXPR,
2718
                      build_pointer_type (char_type_node),
2719
                      guard);
2720
      guard = build1 (INDIRECT_REF, char_type_node, guard);
2721
    }
2722
 
2723
  return guard;
2724
}
2725
 
2726
/* Return an expression which determines whether or not the GUARD
2727
   variable has already been initialized.  */
2728
 
2729
tree
2730
get_guard_cond (tree guard)
2731
{
2732
  tree guard_value;
2733
 
2734
  /* Check to see if the GUARD is zero.  */
2735
  guard = get_guard_bits (guard);
2736
 
2737
  /* Mask off all but the low bit.  */
2738
  if (targetm.cxx.guard_mask_bit ())
2739
    {
2740
      guard_value = integer_one_node;
2741
      if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2742
        guard_value = convert (TREE_TYPE (guard), guard_value);
2743
      guard = cp_build_binary_op (input_location,
2744
                                  BIT_AND_EXPR, guard, guard_value,
2745
                                  tf_warning_or_error);
2746
    }
2747
 
2748
  guard_value = integer_zero_node;
2749
  if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2750
    guard_value = convert (TREE_TYPE (guard), guard_value);
2751
  return cp_build_binary_op (input_location,
2752
                             EQ_EXPR, guard, guard_value,
2753
                             tf_warning_or_error);
2754
}
2755
 
2756
/* Return an expression which sets the GUARD variable, indicating that
2757
   the variable being guarded has been initialized.  */
2758
 
2759
tree
2760
set_guard (tree guard)
2761
{
2762
  tree guard_init;
2763
 
2764
  /* Set the GUARD to one.  */
2765
  guard = get_guard_bits (guard);
2766
  guard_init = integer_one_node;
2767
  if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
2768
    guard_init = convert (TREE_TYPE (guard), guard_init);
2769
  return cp_build_modify_expr (guard, NOP_EXPR, guard_init,
2770
                               tf_warning_or_error);
2771
}
2772
 
2773
/* Start the process of running a particular set of global constructors
2774
   or destructors.  Subroutine of do_[cd]tors.  */
2775
 
2776
static tree
2777
start_objects (int method_type, int initp)
2778
{
2779
  tree body;
2780
  tree fndecl;
2781
  char type[14];
2782
 
2783
  /* Make ctor or dtor function.  METHOD_TYPE may be 'I' or 'D'.  */
2784
 
2785
  if (initp != DEFAULT_INIT_PRIORITY)
2786
    {
2787
      char joiner;
2788
 
2789
#ifdef JOINER
2790
      joiner = JOINER;
2791
#else
2792
      joiner = '_';
2793
#endif
2794
 
2795
      sprintf (type, "sub_%c%c%.5u", method_type, joiner, initp);
2796
    }
2797
  else
2798
    sprintf (type, "sub_%c", method_type);
2799
 
2800
  fndecl = build_lang_decl (FUNCTION_DECL,
2801
                            get_file_function_name (type),
2802
                            build_function_type_list (void_type_node,
2803
                                                      NULL_TREE));
2804
  start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
2805
 
2806
  TREE_PUBLIC (current_function_decl) = 0;
2807
 
2808
  /* Mark as artificial because it's not explicitly in the user's
2809
     source code.  */
2810
  DECL_ARTIFICIAL (current_function_decl) = 1;
2811
 
2812
  /* Mark this declaration as used to avoid spurious warnings.  */
2813
  TREE_USED (current_function_decl) = 1;
2814
 
2815
  /* Mark this function as a global constructor or destructor.  */
2816
  if (method_type == 'I')
2817
    DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2818
  else
2819
    DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2820
 
2821
  body = begin_compound_stmt (BCS_FN_BODY);
2822
 
2823
  return body;
2824
}
2825
 
2826
/* Finish the process of running a particular set of global constructors
2827
   or destructors.  Subroutine of do_[cd]tors.  */
2828
 
2829
static void
2830
finish_objects (int method_type, int initp, tree body)
2831
{
2832
  tree fn;
2833
 
2834
  /* Finish up.  */
2835
  finish_compound_stmt (body);
2836
  fn = finish_function (0);
2837
 
2838
  if (method_type == 'I')
2839
    {
2840
      DECL_STATIC_CONSTRUCTOR (fn) = 1;
2841
      decl_init_priority_insert (fn, initp);
2842
    }
2843
  else
2844
    {
2845
      DECL_STATIC_DESTRUCTOR (fn) = 1;
2846
      decl_fini_priority_insert (fn, initp);
2847
    }
2848
 
2849
  expand_or_defer_fn (fn);
2850
}
2851
 
2852
/* The names of the parameters to the function created to handle
2853
   initializations and destructions for objects with static storage
2854
   duration.  */
2855
#define INITIALIZE_P_IDENTIFIER "__initialize_p"
2856
#define PRIORITY_IDENTIFIER "__priority"
2857
 
2858
/* The name of the function we create to handle initializations and
2859
   destructions for objects with static storage duration.  */
2860
#define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2861
 
2862
/* The declaration for the __INITIALIZE_P argument.  */
2863
static GTY(()) tree initialize_p_decl;
2864
 
2865
/* The declaration for the __PRIORITY argument.  */
2866
static GTY(()) tree priority_decl;
2867
 
2868
/* The declaration for the static storage duration function.  */
2869
static GTY(()) tree ssdf_decl;
2870
 
2871
/* All the static storage duration functions created in this
2872
   translation unit.  */
2873
static GTY(()) VEC(tree,gc) *ssdf_decls;
2874
 
2875
/* A map from priority levels to information about that priority
2876
   level.  There may be many such levels, so efficient lookup is
2877
   important.  */
2878
static splay_tree priority_info_map;
2879
 
2880
/* Begins the generation of the function that will handle all
2881
   initialization and destruction of objects with static storage
2882
   duration.  The function generated takes two parameters of type
2883
   `int': __INITIALIZE_P and __PRIORITY.  If __INITIALIZE_P is
2884
   nonzero, it performs initializations.  Otherwise, it performs
2885
   destructions.  It only performs those initializations or
2886
   destructions with the indicated __PRIORITY.  The generated function
2887
   returns no value.
2888
 
2889
   It is assumed that this function will only be called once per
2890
   translation unit.  */
2891
 
2892
static tree
2893
start_static_storage_duration_function (unsigned count)
2894
{
2895
  tree type;
2896
  tree body;
2897
  char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2898
 
2899
  /* Create the identifier for this function.  It will be of the form
2900
     SSDF_IDENTIFIER_<number>.  */
2901
  sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2902
 
2903
  type = build_function_type_list (void_type_node,
2904
                                   integer_type_node, integer_type_node,
2905
                                   NULL_TREE);
2906
 
2907
  /* Create the FUNCTION_DECL itself.  */
2908
  ssdf_decl = build_lang_decl (FUNCTION_DECL,
2909
                               get_identifier (id),
2910
                               type);
2911
  TREE_PUBLIC (ssdf_decl) = 0;
2912
  DECL_ARTIFICIAL (ssdf_decl) = 1;
2913
 
2914
  /* Put this function in the list of functions to be called from the
2915
     static constructors and destructors.  */
2916
  if (!ssdf_decls)
2917
    {
2918
      ssdf_decls = VEC_alloc (tree, gc, 32);
2919
 
2920
      /* Take this opportunity to initialize the map from priority
2921
         numbers to information about that priority level.  */
2922
      priority_info_map = splay_tree_new (splay_tree_compare_ints,
2923
                                          /*delete_key_fn=*/0,
2924
                                          /*delete_value_fn=*/
2925
                                          (splay_tree_delete_value_fn) &free);
2926
 
2927
      /* We always need to generate functions for the
2928
         DEFAULT_INIT_PRIORITY so enter it now.  That way when we walk
2929
         priorities later, we'll be sure to find the
2930
         DEFAULT_INIT_PRIORITY.  */
2931
      get_priority_info (DEFAULT_INIT_PRIORITY);
2932
    }
2933
 
2934
  VEC_safe_push (tree, gc, ssdf_decls, ssdf_decl);
2935
 
2936
  /* Create the argument list.  */
2937
  initialize_p_decl = cp_build_parm_decl
2938
    (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2939
  DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2940
  TREE_USED (initialize_p_decl) = 1;
2941
  priority_decl = cp_build_parm_decl
2942
    (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2943
  DECL_CONTEXT (priority_decl) = ssdf_decl;
2944
  TREE_USED (priority_decl) = 1;
2945
 
2946
  DECL_CHAIN (initialize_p_decl) = priority_decl;
2947
  DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2948
 
2949
  /* Put the function in the global scope.  */
2950
  pushdecl (ssdf_decl);
2951
 
2952
  /* Start the function itself.  This is equivalent to declaring the
2953
     function as:
2954
 
2955
       static void __ssdf (int __initialize_p, init __priority_p);
2956
 
2957
     It is static because we only need to call this function from the
2958
     various constructor and destructor functions for this module.  */
2959
  start_preparsed_function (ssdf_decl,
2960
                            /*attrs=*/NULL_TREE,
2961
                            SF_PRE_PARSED);
2962
 
2963
  /* Set up the scope of the outermost block in the function.  */
2964
  body = begin_compound_stmt (BCS_FN_BODY);
2965
 
2966
  return body;
2967
}
2968
 
2969
/* Finish the generation of the function which performs initialization
2970
   and destruction of objects with static storage duration.  After
2971
   this point, no more such objects can be created.  */
2972
 
2973
static void
2974
finish_static_storage_duration_function (tree body)
2975
{
2976
  /* Close out the function.  */
2977
  finish_compound_stmt (body);
2978
  expand_or_defer_fn (finish_function (0));
2979
}
2980
 
2981
/* Return the information about the indicated PRIORITY level.  If no
2982
   code to handle this level has yet been generated, generate the
2983
   appropriate prologue.  */
2984
 
2985
static priority_info
2986
get_priority_info (int priority)
2987
{
2988
  priority_info pi;
2989
  splay_tree_node n;
2990
 
2991
  n = splay_tree_lookup (priority_info_map,
2992
                         (splay_tree_key) priority);
2993
  if (!n)
2994
    {
2995
      /* Create a new priority information structure, and insert it
2996
         into the map.  */
2997
      pi = XNEW (struct priority_info_s);
2998
      pi->initializations_p = 0;
2999
      pi->destructions_p = 0;
3000
      splay_tree_insert (priority_info_map,
3001
                         (splay_tree_key) priority,
3002
                         (splay_tree_value) pi);
3003
    }
3004
  else
3005
    pi = (priority_info) n->value;
3006
 
3007
  return pi;
3008
}
3009
 
3010
/* The effective initialization priority of a DECL.  */
3011
 
3012
#define DECL_EFFECTIVE_INIT_PRIORITY(decl)                                    \
3013
        ((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \
3014
         ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl))
3015
 
3016
/* Whether a DECL needs a guard to protect it against multiple
3017
   initialization.  */
3018
 
3019
#define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl)      \
3020
                                                    || DECL_ONE_ONLY (decl) \
3021
                                                    || DECL_WEAK (decl)))
3022
 
3023
/* Called from one_static_initialization_or_destruction(),
3024
   via walk_tree.
3025
   Walks the initializer list of a global variable and looks for
3026
   temporary variables (DECL_NAME() == NULL and DECL_ARTIFICIAL != 0)
3027
   and that have their DECL_CONTEXT() == NULL.
3028
   For each such temporary variable, set their DECL_CONTEXT() to
3029
   the current function. This is necessary because otherwise
3030
   some optimizers (enabled by -O2 -fprofile-arcs) might crash
3031
   when trying to refer to a temporary variable that does not have
3032
   it's DECL_CONTECT() properly set.  */
3033
static tree
3034
fix_temporary_vars_context_r (tree *node,
3035
                              int  *unused ATTRIBUTE_UNUSED,
3036
                              void *unused1 ATTRIBUTE_UNUSED)
3037
{
3038
  gcc_assert (current_function_decl);
3039
 
3040
  if (TREE_CODE (*node) == BIND_EXPR)
3041
    {
3042
      tree var;
3043
 
3044
      for (var = BIND_EXPR_VARS (*node); var; var = DECL_CHAIN (var))
3045
        if (TREE_CODE (var) == VAR_DECL
3046
          && !DECL_NAME (var)
3047
          && DECL_ARTIFICIAL (var)
3048
          && !DECL_CONTEXT (var))
3049
          DECL_CONTEXT (var) = current_function_decl;
3050
    }
3051
 
3052
  return NULL_TREE;
3053
}
3054
 
3055
/* Set up to handle the initialization or destruction of DECL.  If
3056
   INITP is nonzero, we are initializing the variable.  Otherwise, we
3057
   are destroying it.  */
3058
 
3059
static void
3060
one_static_initialization_or_destruction (tree decl, tree init, bool initp)
3061
{
3062
  tree guard_if_stmt = NULL_TREE;
3063
  tree guard;
3064
 
3065
  /* If we are supposed to destruct and there's a trivial destructor,
3066
     nothing has to be done.  */
3067
  if (!initp
3068
      && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3069
    return;
3070
 
3071
  /* Trick the compiler into thinking we are at the file and line
3072
     where DECL was declared so that error-messages make sense, and so
3073
     that the debugger will show somewhat sensible file and line
3074
     information.  */
3075
  input_location = DECL_SOURCE_LOCATION (decl);
3076
 
3077
  /* Make sure temporary variables in the initialiser all have
3078
     their DECL_CONTEXT() set to a value different from NULL_TREE.
3079
     This can happen when global variables initialisers are built.
3080
     In that case, the DECL_CONTEXT() of the global variables _AND_ of all
3081
     the temporary variables that might have been generated in the
3082
     accompagning initialisers is NULL_TREE, meaning the variables have been
3083
     declared in the global namespace.
3084
     What we want to do here is to fix that and make sure the DECL_CONTEXT()
3085
     of the temporaries are set to the current function decl.  */
3086
  cp_walk_tree_without_duplicates (&init,
3087
                                   fix_temporary_vars_context_r,
3088
                                   NULL);
3089
 
3090
  /* Because of:
3091
 
3092
       [class.access.spec]
3093
 
3094
       Access control for implicit calls to the constructors,
3095
       the conversion functions, or the destructor called to
3096
       create and destroy a static data member is performed as
3097
       if these calls appeared in the scope of the member's
3098
       class.
3099
 
3100
     we pretend we are in a static member function of the class of
3101
     which the DECL is a member.  */
3102
  if (member_p (decl))
3103
    {
3104
      DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
3105
      DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
3106
    }
3107
 
3108
  /* Assume we don't need a guard.  */
3109
  guard = NULL_TREE;
3110
  /* We need a guard if this is an object with external linkage that
3111
     might be initialized in more than one place.  (For example, a
3112
     static data member of a template, when the data member requires
3113
     construction.)  */
3114
  if (NEEDS_GUARD_P (decl))
3115
    {
3116
      tree guard_cond;
3117
 
3118
      guard = get_guard (decl);
3119
 
3120
      /* When using __cxa_atexit, we just check the GUARD as we would
3121
         for a local static.  */
3122
      if (flag_use_cxa_atexit)
3123
        {
3124
          /* When using __cxa_atexit, we never try to destroy
3125
             anything from a static destructor.  */
3126
          gcc_assert (initp);
3127
          guard_cond = get_guard_cond (guard);
3128
        }
3129
      /* If we don't have __cxa_atexit, then we will be running
3130
         destructors from .fini sections, or their equivalents.  So,
3131
         we need to know how many times we've tried to initialize this
3132
         object.  We do initializations only if the GUARD is zero,
3133
         i.e., if we are the first to initialize the variable.  We do
3134
         destructions only if the GUARD is one, i.e., if we are the
3135
         last to destroy the variable.  */
3136
      else if (initp)
3137
        guard_cond
3138
          = cp_build_binary_op (input_location,
3139
                                EQ_EXPR,
3140
                                cp_build_unary_op (PREINCREMENT_EXPR,
3141
                                                   guard,
3142
                                                   /*noconvert=*/1,
3143
                                                   tf_warning_or_error),
3144
                                integer_one_node,
3145
                                tf_warning_or_error);
3146
      else
3147
        guard_cond
3148
          = cp_build_binary_op (input_location,
3149
                                EQ_EXPR,
3150
                                cp_build_unary_op (PREDECREMENT_EXPR,
3151
                                                   guard,
3152
                                                   /*noconvert=*/1,
3153
                                                   tf_warning_or_error),
3154
                                integer_zero_node,
3155
                                tf_warning_or_error);
3156
 
3157
      guard_if_stmt = begin_if_stmt ();
3158
      finish_if_stmt_cond (guard_cond, guard_if_stmt);
3159
    }
3160
 
3161
 
3162
  /* If we're using __cxa_atexit, we have not already set the GUARD,
3163
     so we must do so now.  */
3164
  if (guard && initp && flag_use_cxa_atexit)
3165
    finish_expr_stmt (set_guard (guard));
3166
 
3167
  /* Perform the initialization or destruction.  */
3168
  if (initp)
3169
    {
3170
      if (init)
3171
        finish_expr_stmt (init);
3172
 
3173
      /* If we're using __cxa_atexit, register a function that calls the
3174
         destructor for the object.  */
3175
      if (flag_use_cxa_atexit)
3176
        finish_expr_stmt (register_dtor_fn (decl));
3177
    }
3178
  else
3179
    finish_expr_stmt (build_cleanup (decl));
3180
 
3181
  /* Finish the guard if-stmt, if necessary.  */
3182
  if (guard)
3183
    {
3184
      finish_then_clause (guard_if_stmt);
3185
      finish_if_stmt (guard_if_stmt);
3186
    }
3187
 
3188
  /* Now that we're done with DECL we don't need to pretend to be a
3189
     member of its class any longer.  */
3190
  DECL_CONTEXT (current_function_decl) = NULL_TREE;
3191
  DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
3192
}
3193
 
3194
/* Generate code to do the initialization or destruction of the decls in VARS,
3195
   a TREE_LIST of VAR_DECL with static storage duration.
3196
   Whether initialization or destruction is performed is specified by INITP.  */
3197
 
3198
static void
3199
do_static_initialization_or_destruction (tree vars, bool initp)
3200
{
3201
  tree node, init_if_stmt, cond;
3202
 
3203
  /* Build the outer if-stmt to check for initialization or destruction.  */
3204
  init_if_stmt = begin_if_stmt ();
3205
  cond = initp ? integer_one_node : integer_zero_node;
3206
  cond = cp_build_binary_op (input_location,
3207
                             EQ_EXPR,
3208
                             initialize_p_decl,
3209
                             cond,
3210
                             tf_warning_or_error);
3211
  finish_if_stmt_cond (cond, init_if_stmt);
3212
 
3213
  node = vars;
3214
  do {
3215
    tree decl = TREE_VALUE (node);
3216
    tree priority_if_stmt;
3217
    int priority;
3218
    priority_info pi;
3219
 
3220
    /* If we don't need a destructor, there's nothing to do.  Avoid
3221
       creating a possibly empty if-stmt.  */
3222
    if (!initp && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3223
      {
3224
        node = TREE_CHAIN (node);
3225
        continue;
3226
      }
3227
 
3228
    /* Remember that we had an initialization or finalization at this
3229
       priority.  */
3230
    priority = DECL_EFFECTIVE_INIT_PRIORITY (decl);
3231
    pi = get_priority_info (priority);
3232
    if (initp)
3233
      pi->initializations_p = 1;
3234
    else
3235
      pi->destructions_p = 1;
3236
 
3237
    /* Conditionalize this initialization on being in the right priority
3238
       and being initializing/finalizing appropriately.  */
3239
    priority_if_stmt = begin_if_stmt ();
3240
    cond = cp_build_binary_op (input_location,
3241
                               EQ_EXPR,
3242
                               priority_decl,
3243
                               build_int_cst (NULL_TREE, priority),
3244
                               tf_warning_or_error);
3245
    finish_if_stmt_cond (cond, priority_if_stmt);
3246
 
3247
    /* Process initializers with same priority.  */
3248
    for (; node
3249
           && DECL_EFFECTIVE_INIT_PRIORITY (TREE_VALUE (node)) == priority;
3250
         node = TREE_CHAIN (node))
3251
      /* Do one initialization or destruction.  */
3252
      one_static_initialization_or_destruction (TREE_VALUE (node),
3253
                                                TREE_PURPOSE (node), initp);
3254
 
3255
    /* Finish up the priority if-stmt body.  */
3256
    finish_then_clause (priority_if_stmt);
3257
    finish_if_stmt (priority_if_stmt);
3258
 
3259
  } while (node);
3260
 
3261
  /* Finish up the init/destruct if-stmt body.  */
3262
  finish_then_clause (init_if_stmt);
3263
  finish_if_stmt (init_if_stmt);
3264
}
3265
 
3266
/* VARS is a list of variables with static storage duration which may
3267
   need initialization and/or finalization.  Remove those variables
3268
   that don't really need to be initialized or finalized, and return
3269
   the resulting list.  The order in which the variables appear in
3270
   VARS is in reverse order of the order in which they should actually
3271
   be initialized.  The list we return is in the unreversed order;
3272
   i.e., the first variable should be initialized first.  */
3273
 
3274
static tree
3275
prune_vars_needing_no_initialization (tree *vars)
3276
{
3277
  tree *var = vars;
3278
  tree result = NULL_TREE;
3279
 
3280
  while (*var)
3281
    {
3282
      tree t = *var;
3283
      tree decl = TREE_VALUE (t);
3284
      tree init = TREE_PURPOSE (t);
3285
 
3286
      /* Deal gracefully with error.  */
3287
      if (decl == error_mark_node)
3288
        {
3289
          var = &TREE_CHAIN (t);
3290
          continue;
3291
        }
3292
 
3293
      /* The only things that can be initialized are variables.  */
3294
      gcc_assert (TREE_CODE (decl) == VAR_DECL);
3295
 
3296
      /* If this object is not defined, we don't need to do anything
3297
         here.  */
3298
      if (DECL_EXTERNAL (decl))
3299
        {
3300
          var = &TREE_CHAIN (t);
3301
          continue;
3302
        }
3303
 
3304
      /* Also, if the initializer already contains errors, we can bail
3305
         out now.  */
3306
      if (init && TREE_CODE (init) == TREE_LIST
3307
          && value_member (error_mark_node, init))
3308
        {
3309
          var = &TREE_CHAIN (t);
3310
          continue;
3311
        }
3312
 
3313
      /* This variable is going to need initialization and/or
3314
         finalization, so we add it to the list.  */
3315
      *var = TREE_CHAIN (t);
3316
      TREE_CHAIN (t) = result;
3317
      result = t;
3318
    }
3319
 
3320
  return result;
3321
}
3322
 
3323
/* Make sure we have told the back end about all the variables in
3324
   VARS.  */
3325
 
3326
static void
3327
write_out_vars (tree vars)
3328
{
3329
  tree v;
3330
 
3331
  for (v = vars; v; v = TREE_CHAIN (v))
3332
    {
3333
      tree var = TREE_VALUE (v);
3334
      if (!var_finalized_p (var))
3335
        {
3336
          import_export_decl (var);
3337
          rest_of_decl_compilation (var, 1, 1);
3338
        }
3339
    }
3340
}
3341
 
3342
/* Generate a static constructor (if CONSTRUCTOR_P) or destructor
3343
   (otherwise) that will initialize all global objects with static
3344
   storage duration having the indicated PRIORITY.  */
3345
 
3346
static void
3347
generate_ctor_or_dtor_function (bool constructor_p, int priority,
3348
                                location_t *locus)
3349
{
3350
  char function_key;
3351
  tree fndecl;
3352
  tree body;
3353
  size_t i;
3354
 
3355
  input_location = *locus;
3356
  /* ??? */
3357
  /* Was: locus->line++; */
3358
 
3359
  /* We use `I' to indicate initialization and `D' to indicate
3360
     destruction.  */
3361
  function_key = constructor_p ? 'I' : 'D';
3362
 
3363
  /* We emit the function lazily, to avoid generating empty
3364
     global constructors and destructors.  */
3365
  body = NULL_TREE;
3366
 
3367
  /* For Objective-C++, we may need to initialize metadata found in this module.
3368
     This must be done _before_ any other static initializations.  */
3369
  if (c_dialect_objc () && (priority == DEFAULT_INIT_PRIORITY)
3370
      && constructor_p && objc_static_init_needed_p ())
3371
    {
3372
      body = start_objects (function_key, priority);
3373
      objc_generate_static_init_call (NULL_TREE);
3374
    }
3375
 
3376
  /* Call the static storage duration function with appropriate
3377
     arguments.  */
3378
  FOR_EACH_VEC_ELT (tree, ssdf_decls, i, fndecl)
3379
    {
3380
      /* Calls to pure or const functions will expand to nothing.  */
3381
      if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
3382
        {
3383
          tree call;
3384
 
3385
          if (! body)
3386
            body = start_objects (function_key, priority);
3387
 
3388
          call = cp_build_function_call_nary (fndecl, tf_warning_or_error,
3389
                                              build_int_cst (NULL_TREE,
3390
                                                             constructor_p),
3391
                                              build_int_cst (NULL_TREE,
3392
                                                             priority),
3393
                                              NULL_TREE);
3394
          finish_expr_stmt (call);
3395
        }
3396
    }
3397
 
3398
  /* Close out the function.  */
3399
  if (body)
3400
    finish_objects (function_key, priority, body);
3401
}
3402
 
3403
/* Generate constructor and destructor functions for the priority
3404
   indicated by N.  */
3405
 
3406
static int
3407
generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
3408
{
3409
  location_t *locus = (location_t *) data;
3410
  int priority = (int) n->key;
3411
  priority_info pi = (priority_info) n->value;
3412
 
3413
  /* Generate the functions themselves, but only if they are really
3414
     needed.  */
3415
  if (pi->initializations_p)
3416
    generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
3417
  if (pi->destructions_p)
3418
    generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
3419
 
3420
  /* Keep iterating.  */
3421
  return 0;
3422
}
3423
 
3424
/* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
3425
   decls referenced from front-end specific constructs; it will be called
3426
   only for language-specific tree nodes.
3427
 
3428
   Here we must deal with member pointers.  */
3429
 
3430
tree
3431
cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED)
3432
{
3433
  tree t = *tp;
3434
 
3435
  switch (TREE_CODE (t))
3436
    {
3437
    case PTRMEM_CST:
3438
      if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
3439
        cgraph_mark_address_taken_node (
3440
                              cgraph_get_create_node (PTRMEM_CST_MEMBER (t)));
3441
      break;
3442
    case BASELINK:
3443
      if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
3444
        cgraph_mark_address_taken_node (
3445
                              cgraph_get_create_node (BASELINK_FUNCTIONS (t)));
3446
      break;
3447
    case VAR_DECL:
3448
      if (DECL_CONTEXT (t)
3449
          && flag_use_repository
3450
          && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
3451
        /* If we need a static variable in a function, then we
3452
           need the containing function.  */
3453
        mark_decl_referenced (DECL_CONTEXT (t));
3454
      break;
3455
    default:
3456
      break;
3457
    }
3458
 
3459
  return NULL;
3460
}
3461
 
3462
/* Java requires that we be able to reference a local address for a
3463
   method, and not be confused by PLT entries.  If hidden aliases are
3464
   supported, collect and return all the functions for which we should
3465
   emit a hidden alias.  */
3466
 
3467
static struct pointer_set_t *
3468
collect_candidates_for_java_method_aliases (void)
3469
{
3470
  struct cgraph_node *node;
3471
  struct pointer_set_t *candidates = NULL;
3472
 
3473
#ifndef HAVE_GAS_HIDDEN
3474
  return candidates;
3475
#endif
3476
 
3477
  for (node = cgraph_nodes; node ; node = node->next)
3478
    {
3479
      tree fndecl = node->decl;
3480
 
3481
      if (DECL_CONTEXT (fndecl)
3482
          && TYPE_P (DECL_CONTEXT (fndecl))
3483
          && TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
3484
          && TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
3485
        {
3486
          if (candidates == NULL)
3487
            candidates = pointer_set_create ();
3488
          pointer_set_insert (candidates, fndecl);
3489
        }
3490
    }
3491
 
3492
  return candidates;
3493
}
3494
 
3495
 
3496
/* Java requires that we be able to reference a local address for a
3497
   method, and not be confused by PLT entries.  If hidden aliases are
3498
   supported, emit one for each java function that we've emitted.
3499
   CANDIDATES is the set of FUNCTION_DECLs that were gathered
3500
   by collect_candidates_for_java_method_aliases.  */
3501
 
3502
static void
3503
build_java_method_aliases (struct pointer_set_t *candidates)
3504
{
3505
  struct cgraph_node *node;
3506
 
3507
#ifndef HAVE_GAS_HIDDEN
3508
  return;
3509
#endif
3510
 
3511
  for (node = cgraph_nodes; node ; node = node->next)
3512
    {
3513
      tree fndecl = node->decl;
3514
 
3515
      if (TREE_ASM_WRITTEN (fndecl)
3516
          && pointer_set_contains (candidates, fndecl))
3517
        {
3518
          /* Mangle the name in a predictable way; we need to reference
3519
             this from a java compiled object file.  */
3520
          tree oid, nid, alias;
3521
          const char *oname;
3522
          char *nname;
3523
 
3524
          oid = DECL_ASSEMBLER_NAME (fndecl);
3525
          oname = IDENTIFIER_POINTER (oid);
3526
          gcc_assert (oname[0] == '_' && oname[1] == 'Z');
3527
          nname = ACONCAT (("_ZGA", oname+2, NULL));
3528
          nid = get_identifier (nname);
3529
 
3530
          alias = make_alias_for (fndecl, nid);
3531
          TREE_PUBLIC (alias) = 1;
3532
          DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
3533
 
3534
          assemble_alias (alias, oid);
3535
        }
3536
    }
3537
}
3538
 
3539
/* Return C++ property of T, based on given operation OP.  */
3540
 
3541
static int
3542
cpp_check (tree t, cpp_operation op)
3543
{
3544
  switch (op)
3545
    {
3546
      case IS_ABSTRACT:
3547
        return DECL_PURE_VIRTUAL_P (t);
3548
      case IS_CONSTRUCTOR:
3549
        return DECL_CONSTRUCTOR_P (t);
3550
      case IS_DESTRUCTOR:
3551
        return DECL_DESTRUCTOR_P (t);
3552
      case IS_COPY_CONSTRUCTOR:
3553
        return DECL_COPY_CONSTRUCTOR_P (t);
3554
      case IS_TEMPLATE:
3555
        return TREE_CODE (t) == TEMPLATE_DECL;
3556
      default:
3557
        return 0;
3558
    }
3559
}
3560
 
3561
/* Collect source file references recursively, starting from NAMESPC.  */
3562
 
3563
static void
3564
collect_source_refs (tree namespc)
3565
{
3566
  tree t;
3567
 
3568
  if (!namespc)
3569
    return;
3570
 
3571
  /* Iterate over names in this name space.  */
3572
  for (t = NAMESPACE_LEVEL (namespc)->names; t; t = TREE_CHAIN (t))
3573
    if (!DECL_IS_BUILTIN (t) )
3574
      collect_source_ref (DECL_SOURCE_FILE (t));
3575
 
3576
  /* Dump siblings, if any */
3577
  collect_source_refs (TREE_CHAIN (namespc));
3578
 
3579
  /* Dump children, if any */
3580
  collect_source_refs (NAMESPACE_LEVEL (namespc)->namespaces);
3581
}
3582
 
3583
/* Collect decls relevant to SOURCE_FILE from all namespaces recursively,
3584
   starting from NAMESPC.  */
3585
 
3586
static void
3587
collect_ada_namespace (tree namespc, const char *source_file)
3588
{
3589
  if (!namespc)
3590
    return;
3591
 
3592
  /* Collect decls from this namespace */
3593
  collect_ada_nodes (NAMESPACE_LEVEL (namespc)->names, source_file);
3594
 
3595
  /* Collect siblings, if any */
3596
  collect_ada_namespace (TREE_CHAIN (namespc), source_file);
3597
 
3598
  /* Collect children, if any */
3599
  collect_ada_namespace (NAMESPACE_LEVEL (namespc)->namespaces, source_file);
3600
}
3601
 
3602
/* Returns true iff there is a definition available for variable or
3603
   function DECL.  */
3604
 
3605
static bool
3606
decl_defined_p (tree decl)
3607
{
3608
  if (TREE_CODE (decl) == FUNCTION_DECL)
3609
    return (DECL_INITIAL (decl) != NULL_TREE);
3610
  else
3611
    {
3612
      gcc_assert (TREE_CODE (decl) == VAR_DECL);
3613
      return !DECL_EXTERNAL (decl);
3614
    }
3615
}
3616
 
3617
/* Nonzero for a VAR_DECL whose value can be used in a constant expression.
3618
 
3619
      [expr.const]
3620
 
3621
      An integral constant-expression can only involve ... const
3622
      variables of integral or enumeration types initialized with
3623
      constant expressions ...
3624
 
3625
      C++0x also allows constexpr variables and temporaries initialized
3626
      with constant expressions.  We handle the former here, but the latter
3627
      are just folded away in cxx_eval_constant_expression.
3628
 
3629
   The standard does not require that the expression be non-volatile.
3630
   G++ implements the proposed correction in DR 457.  */
3631
 
3632
bool
3633
decl_constant_var_p (tree decl)
3634
{
3635
  if (!decl_maybe_constant_var_p (decl))
3636
    return false;
3637
 
3638
  /* We don't know if a template static data member is initialized with
3639
     a constant expression until we instantiate its initializer.  Even
3640
     in the case of a constexpr variable, we can't treat it as a
3641
     constant until its initializer is complete in case it's used in
3642
     its own initializer.  */
3643
  mark_used (decl);
3644
  return DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl);
3645
}
3646
 
3647
/* Returns true if DECL could be a symbolic constant variable, depending on
3648
   its initializer.  */
3649
 
3650
bool
3651
decl_maybe_constant_var_p (tree decl)
3652
{
3653
  tree type = TREE_TYPE (decl);
3654
  if (TREE_CODE (decl) != VAR_DECL)
3655
    return false;
3656
  if (DECL_DECLARED_CONSTEXPR_P (decl))
3657
    return true;
3658
  return (CP_TYPE_CONST_NON_VOLATILE_P (type)
3659
          && INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3660
}
3661
 
3662
/* Complain that DECL uses a type with no linkage but is never defined.  */
3663
 
3664
static void
3665
no_linkage_error (tree decl)
3666
{
3667
  tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
3668
  if (TYPE_ANONYMOUS_P (t))
3669
    {
3670
      permerror (0, "%q+#D, declared using anonymous type, "
3671
                 "is used but never defined", decl);
3672
      if (is_typedef_decl (TYPE_NAME (t)))
3673
        permerror (0, "%q+#D does not refer to the unqualified type, "
3674
                   "so it is not used for linkage", TYPE_NAME (t));
3675
    }
3676
  else
3677
    permerror (0, "%q+#D, declared using local type %qT, "
3678
               "is used but never defined", decl, t);
3679
}
3680
 
3681
/* Collect declarations from all namespaces relevant to SOURCE_FILE.  */
3682
 
3683
static void
3684
collect_all_refs (const char *source_file)
3685
{
3686
  collect_ada_namespace (global_namespace, source_file);
3687
}
3688
 
3689
/* Clear DECL_EXTERNAL for NODE.  */
3690
 
3691
static bool
3692
clear_decl_external (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED)
3693
{
3694
  DECL_EXTERNAL (node->decl) = 0;
3695
  return false;
3696
}
3697
 
3698
/* This routine is called at the end of compilation.
3699
   Its job is to create all the code needed to initialize and
3700
   destroy the global aggregates.  We do the destruction
3701
   first, since that way we only need to reverse the decls once.  */
3702
 
3703
void
3704
cp_write_global_declarations (void)
3705
{
3706
  tree vars;
3707
  bool reconsider;
3708
  size_t i;
3709
  location_t locus;
3710
  unsigned ssdf_count = 0;
3711
  int retries = 0;
3712
  tree decl;
3713
  struct pointer_set_t *candidates;
3714
 
3715
  locus = input_location;
3716
  at_eof = 1;
3717
 
3718
  /* Bad parse errors.  Just forget about it.  */
3719
  if (! global_bindings_p () || current_class_type
3720
      || !VEC_empty (tree,decl_namespace_list))
3721
    return;
3722
 
3723
  if (pch_file)
3724
    c_common_write_pch ();
3725
 
3726
  cgraph_process_same_body_aliases ();
3727
 
3728
  /* Handle -fdump-ada-spec[-slim] */
3729
  if (dump_enabled_p (TDI_ada))
3730
    {
3731
      if (get_dump_file_info (TDI_ada)->flags & TDF_SLIM)
3732
        collect_source_ref (main_input_filename);
3733
      else
3734
        collect_source_refs (global_namespace);
3735
 
3736
      dump_ada_specs (collect_all_refs, cpp_check);
3737
    }
3738
 
3739
  /* FIXME - huh?  was  input_line -= 1;*/
3740
 
3741
  timevar_start (TV_PHASE_DEFERRED);
3742
 
3743
  /* We now have to write out all the stuff we put off writing out.
3744
     These include:
3745
 
3746
       o Template specializations that we have not yet instantiated,
3747
         but which are needed.
3748
       o Initialization and destruction for non-local objects with
3749
         static storage duration.  (Local objects with static storage
3750
         duration are initialized when their scope is first entered,
3751
         and are cleaned up via atexit.)
3752
       o Virtual function tables.
3753
 
3754
     All of these may cause others to be needed.  For example,
3755
     instantiating one function may cause another to be needed, and
3756
     generating the initializer for an object may cause templates to be
3757
     instantiated, etc., etc.  */
3758
 
3759
  emit_support_tinfos ();
3760
 
3761
  do
3762
    {
3763
      tree t;
3764
      tree decl;
3765
 
3766
      reconsider = false;
3767
 
3768
      /* If there are templates that we've put off instantiating, do
3769
         them now.  */
3770
      instantiate_pending_templates (retries);
3771
      ggc_collect ();
3772
 
3773
      /* Write out virtual tables as required.  Note that writing out
3774
         the virtual table for a template class may cause the
3775
         instantiation of members of that class.  If we write out
3776
         vtables then we remove the class from our list so we don't
3777
         have to look at it again.  */
3778
 
3779
      while (keyed_classes != NULL_TREE
3780
             && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
3781
        {
3782
          reconsider = true;
3783
          keyed_classes = TREE_CHAIN (keyed_classes);
3784
        }
3785
 
3786
      t = keyed_classes;
3787
      if (t != NULL_TREE)
3788
        {
3789
          tree next = TREE_CHAIN (t);
3790
 
3791
          while (next)
3792
            {
3793
              if (maybe_emit_vtables (TREE_VALUE (next)))
3794
                {
3795
                  reconsider = true;
3796
                  TREE_CHAIN (t) = TREE_CHAIN (next);
3797
                }
3798
              else
3799
                t = next;
3800
 
3801
              next = TREE_CHAIN (t);
3802
            }
3803
        }
3804
 
3805
      /* Write out needed type info variables.  We have to be careful
3806
         looping through unemitted decls, because emit_tinfo_decl may
3807
         cause other variables to be needed. New elements will be
3808
         appended, and we remove from the vector those that actually
3809
         get emitted.  */
3810
      for (i = VEC_length (tree, unemitted_tinfo_decls);
3811
           VEC_iterate (tree, unemitted_tinfo_decls, --i, t);)
3812
        if (emit_tinfo_decl (t))
3813
          {
3814
            reconsider = true;
3815
            VEC_unordered_remove (tree, unemitted_tinfo_decls, i);
3816
          }
3817
 
3818
      /* The list of objects with static storage duration is built up
3819
         in reverse order.  We clear STATIC_AGGREGATES so that any new
3820
         aggregates added during the initialization of these will be
3821
         initialized in the correct order when we next come around the
3822
         loop.  */
3823
      vars = prune_vars_needing_no_initialization (&static_aggregates);
3824
 
3825
      if (vars)
3826
        {
3827
          /* We need to start a new initialization function each time
3828
             through the loop.  That's because we need to know which
3829
             vtables have been referenced, and TREE_SYMBOL_REFERENCED
3830
             isn't computed until a function is finished, and written
3831
             out.  That's a deficiency in the back end.  When this is
3832
             fixed, these initialization functions could all become
3833
             inline, with resulting performance improvements.  */
3834
          tree ssdf_body;
3835
 
3836
          /* Set the line and file, so that it is obviously not from
3837
             the source file.  */
3838
          input_location = locus;
3839
          ssdf_body = start_static_storage_duration_function (ssdf_count);
3840
 
3841
          /* Make sure the back end knows about all the variables.  */
3842
          write_out_vars (vars);
3843
 
3844
          /* First generate code to do all the initializations.  */
3845
          if (vars)
3846
            do_static_initialization_or_destruction (vars, /*initp=*/true);
3847
 
3848
          /* Then, generate code to do all the destructions.  Do these
3849
             in reverse order so that the most recently constructed
3850
             variable is the first destroyed.  If we're using
3851
             __cxa_atexit, then we don't need to do this; functions
3852
             were registered at initialization time to destroy the
3853
             local statics.  */
3854
          if (!flag_use_cxa_atexit && vars)
3855
            {
3856
              vars = nreverse (vars);
3857
              do_static_initialization_or_destruction (vars, /*initp=*/false);
3858
            }
3859
          else
3860
            vars = NULL_TREE;
3861
 
3862
          /* Finish up the static storage duration function for this
3863
             round.  */
3864
          input_location = locus;
3865
          finish_static_storage_duration_function (ssdf_body);
3866
 
3867
          /* All those initializations and finalizations might cause
3868
             us to need more inline functions, more template
3869
             instantiations, etc.  */
3870
          reconsider = true;
3871
          ssdf_count++;
3872
          /* ??? was:  locus.line++; */
3873
        }
3874
 
3875
      /* Go through the set of inline functions whose bodies have not
3876
         been emitted yet.  If out-of-line copies of these functions
3877
         are required, emit them.  */
3878
      FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3879
        {
3880
          /* Does it need synthesizing?  */
3881
          if (DECL_DEFAULTED_FN (decl) && ! DECL_INITIAL (decl)
3882
              && (! DECL_REALLY_EXTERN (decl) || possibly_inlined_p (decl)))
3883
            {
3884
              /* Even though we're already at the top-level, we push
3885
                 there again.  That way, when we pop back a few lines
3886
                 hence, all of our state is restored.  Otherwise,
3887
                 finish_function doesn't clean things up, and we end
3888
                 up with CURRENT_FUNCTION_DECL set.  */
3889
              push_to_top_level ();
3890
              /* The decl's location will mark where it was first
3891
                 needed.  Save that so synthesize method can indicate
3892
                 where it was needed from, in case of error  */
3893
              input_location = DECL_SOURCE_LOCATION (decl);
3894
              synthesize_method (decl);
3895
              pop_from_top_level ();
3896
              reconsider = true;
3897
            }
3898
 
3899
          if (!DECL_SAVED_TREE (decl))
3900
            continue;
3901
 
3902
          /* We lie to the back end, pretending that some functions
3903
             are not defined when they really are.  This keeps these
3904
             functions from being put out unnecessarily.  But, we must
3905
             stop lying when the functions are referenced, or if they
3906
             are not comdat since they need to be put out now.  If
3907
             DECL_INTERFACE_KNOWN, then we have already set
3908
             DECL_EXTERNAL appropriately, so there's no need to check
3909
             again, and we do not want to clear DECL_EXTERNAL if a
3910
             previous call to import_export_decl set it.
3911
 
3912
             This is done in a separate for cycle, because if some
3913
             deferred function is contained in another deferred
3914
             function later in deferred_fns varray,
3915
             rest_of_compilation would skip this function and we
3916
             really cannot expand the same function twice.  */
3917
          import_export_decl (decl);
3918
          if (DECL_NOT_REALLY_EXTERN (decl)
3919
              && DECL_INITIAL (decl)
3920
              && decl_needed_p (decl))
3921
            {
3922
              struct cgraph_node *node, *next;
3923
 
3924
              node = cgraph_get_node (decl);
3925
              if (node->same_body_alias)
3926
                node = cgraph_alias_aliased_node (node);
3927
 
3928
              cgraph_for_node_and_aliases (node, clear_decl_external,
3929
                                           NULL, true);
3930
              /* If we mark !DECL_EXTERNAL one of the symbols in some comdat
3931
                 group, we need to mark all symbols in the same comdat group
3932
                 that way.  */
3933
              if (node->same_comdat_group)
3934
                for (next = node->same_comdat_group;
3935
                     next != node;
3936
                     next = next->same_comdat_group)
3937
                  cgraph_for_node_and_aliases (next, clear_decl_external,
3938
                                               NULL, true);
3939
            }
3940
 
3941
          /* If we're going to need to write this function out, and
3942
             there's already a body for it, create RTL for it now.
3943
             (There might be no body if this is a method we haven't
3944
             gotten around to synthesizing yet.)  */
3945
          if (!DECL_EXTERNAL (decl)
3946
              && decl_needed_p (decl)
3947
              && !TREE_ASM_WRITTEN (decl)
3948
              && !cgraph_get_node (decl)->local.finalized)
3949
            {
3950
              /* We will output the function; no longer consider it in this
3951
                 loop.  */
3952
              DECL_DEFER_OUTPUT (decl) = 0;
3953
              /* Generate RTL for this function now that we know we
3954
                 need it.  */
3955
              expand_or_defer_fn (decl);
3956
              /* If we're compiling -fsyntax-only pretend that this
3957
                 function has been written out so that we don't try to
3958
                 expand it again.  */
3959
              if (flag_syntax_only)
3960
                TREE_ASM_WRITTEN (decl) = 1;
3961
              reconsider = true;
3962
            }
3963
        }
3964
 
3965
      if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
3966
        reconsider = true;
3967
 
3968
      /* Static data members are just like namespace-scope globals.  */
3969
      FOR_EACH_VEC_ELT (tree, pending_statics, i, decl)
3970
        {
3971
          if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl)
3972
              /* Don't write it out if we haven't seen a definition.  */
3973
              || DECL_IN_AGGR_P (decl))
3974
            continue;
3975
          import_export_decl (decl);
3976
          /* If this static data member is needed, provide it to the
3977
             back end.  */
3978
          if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
3979
            DECL_EXTERNAL (decl) = 0;
3980
        }
3981
      if (VEC_length (tree, pending_statics) != 0
3982
          && wrapup_global_declarations (VEC_address (tree, pending_statics),
3983
                                         VEC_length (tree, pending_statics)))
3984
        reconsider = true;
3985
 
3986
      retries++;
3987
    }
3988
  while (reconsider);
3989
 
3990
  /* All used inline functions must have a definition at this point.  */
3991
  FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3992
    {
3993
      if (/* Check online inline functions that were actually used.  */
3994
          DECL_ODR_USED (decl) && DECL_DECLARED_INLINE_P (decl)
3995
          /* If the definition actually was available here, then the
3996
             fact that the function was not defined merely represents
3997
             that for some reason (use of a template repository,
3998
             #pragma interface, etc.) we decided not to emit the
3999
             definition here.  */
4000
          && !DECL_INITIAL (decl)
4001
          /* Don't complain if the template was defined.  */
4002
          && !(DECL_TEMPLATE_INSTANTIATION (decl)
4003
               && DECL_INITIAL (DECL_TEMPLATE_RESULT
4004
                                (template_for_substitution (decl)))))
4005
        {
4006
          warning (0, "inline function %q+D used but never defined", decl);
4007
          /* Avoid a duplicate warning from check_global_declaration_1.  */
4008
          TREE_NO_WARNING (decl) = 1;
4009
        }
4010
    }
4011
 
4012
  /* So must decls that use a type with no linkage.  */
4013
  FOR_EACH_VEC_ELT (tree, no_linkage_decls, i, decl)
4014
    if (!decl_defined_p (decl))
4015
      no_linkage_error (decl);
4016
 
4017
  /* Then, do the Objective-C stuff.  This is where all the
4018
     Objective-C module stuff gets generated (symtab,
4019
     class/protocol/selector lists etc).  This must be done after C++
4020
     templates, destructors etc. so that selectors used in C++
4021
     templates are properly allocated.  */
4022
  if (c_dialect_objc ())
4023
    objc_write_global_declarations ();
4024
 
4025
  /* We give C linkage to static constructors and destructors.  */
4026
  push_lang_context (lang_name_c);
4027
 
4028
  /* Generate initialization and destruction functions for all
4029
     priorities for which they are required.  */
4030
  if (priority_info_map)
4031
    splay_tree_foreach (priority_info_map,
4032
                        generate_ctor_and_dtor_functions_for_priority,
4033
                        /*data=*/&locus);
4034
  else if (c_dialect_objc () && objc_static_init_needed_p ())
4035
    /* If this is obj-c++ and we need a static init, call
4036
       generate_ctor_or_dtor_function.  */
4037
    generate_ctor_or_dtor_function (/*constructor_p=*/true,
4038
                                    DEFAULT_INIT_PRIORITY, &locus);
4039
 
4040
  /* We're done with the splay-tree now.  */
4041
  if (priority_info_map)
4042
    splay_tree_delete (priority_info_map);
4043
 
4044
  /* Generate any missing aliases.  */
4045
  maybe_apply_pending_pragma_weaks ();
4046
 
4047
  /* We're done with static constructors, so we can go back to "C++"
4048
     linkage now.  */
4049
  pop_lang_context ();
4050
 
4051
  /* Collect candidates for Java hidden aliases.  */
4052
  candidates = collect_candidates_for_java_method_aliases ();
4053
 
4054
  timevar_stop (TV_PHASE_DEFERRED);
4055
  timevar_start (TV_PHASE_CGRAPH);
4056
 
4057
  cgraph_finalize_compilation_unit ();
4058
 
4059
  timevar_stop (TV_PHASE_CGRAPH);
4060
  timevar_start (TV_PHASE_CHECK_DBGINFO);
4061
 
4062
  /* Now, issue warnings about static, but not defined, functions,
4063
     etc., and emit debugging information.  */
4064
  walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
4065
  if (VEC_length (tree, pending_statics) != 0)
4066
    {
4067
      check_global_declarations (VEC_address (tree, pending_statics),
4068
                                 VEC_length (tree, pending_statics));
4069
      emit_debug_global_declarations (VEC_address (tree, pending_statics),
4070
                                      VEC_length (tree, pending_statics));
4071
    }
4072
 
4073
  perform_deferred_noexcept_checks ();
4074
 
4075
  /* Generate hidden aliases for Java.  */
4076
  if (candidates)
4077
    {
4078
      build_java_method_aliases (candidates);
4079
      pointer_set_destroy (candidates);
4080
    }
4081
 
4082
  finish_repo ();
4083
 
4084
  /* The entire file is now complete.  If requested, dump everything
4085
     to a file.  */
4086
  {
4087
    int flags;
4088
    FILE *stream = dump_begin (TDI_tu, &flags);
4089
 
4090
    if (stream)
4091
      {
4092
        dump_node (global_namespace, flags & ~TDF_SLIM, stream);
4093
        dump_end (TDI_tu, stream);
4094
      }
4095
  }
4096
 
4097
  if (flag_detailed_statistics)
4098
    {
4099
      dump_tree_statistics ();
4100
      dump_time_statistics ();
4101
    }
4102
  input_location = locus;
4103
 
4104
#ifdef ENABLE_CHECKING
4105
  validate_conversion_obstack ();
4106
#endif /* ENABLE_CHECKING */
4107
 
4108
  timevar_stop (TV_PHASE_CHECK_DBGINFO);
4109
}
4110
 
4111
/* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
4112
   function to call in parse-tree form; it has not yet been
4113
   semantically analyzed.  ARGS are the arguments to the function.
4114
   They have already been semantically analyzed.  This may change
4115
   ARGS.  */
4116
 
4117
tree
4118
build_offset_ref_call_from_tree (tree fn, VEC(tree,gc) **args)
4119
{
4120
  tree orig_fn;
4121
  VEC(tree,gc) *orig_args = NULL;
4122
  tree expr;
4123
  tree object;
4124
 
4125
  orig_fn = fn;
4126
  object = TREE_OPERAND (fn, 0);
4127
 
4128
  if (processing_template_decl)
4129
    {
4130
      gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
4131
                  || TREE_CODE (fn) == MEMBER_REF);
4132
      if (type_dependent_expression_p (fn)
4133
          || any_type_dependent_arguments_p (*args))
4134
        return build_nt_call_vec (fn, *args);
4135
 
4136
      orig_args = make_tree_vector_copy (*args);
4137
 
4138
      /* Transform the arguments and add the implicit "this"
4139
         parameter.  That must be done before the FN is transformed
4140
         because we depend on the form of FN.  */
4141
      make_args_non_dependent (*args);
4142
      object = build_non_dependent_expr (object);
4143
      if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4144
        {
4145
          if (TREE_CODE (fn) == DOTSTAR_EXPR)
4146
            object = cp_build_addr_expr (object, tf_warning_or_error);
4147
          VEC_safe_insert (tree, gc, *args, 0, object);
4148
        }
4149
      /* Now that the arguments are done, transform FN.  */
4150
      fn = build_non_dependent_expr (fn);
4151
    }
4152
 
4153
  /* A qualified name corresponding to a bound pointer-to-member is
4154
     represented as an OFFSET_REF:
4155
 
4156
        struct B { void g(); };
4157
        void (B::*p)();
4158
        void B::g() { (this->*p)(); }  */
4159
  if (TREE_CODE (fn) == OFFSET_REF)
4160
    {
4161
      tree object_addr = cp_build_addr_expr (object, tf_warning_or_error);
4162
      fn = TREE_OPERAND (fn, 1);
4163
      fn = get_member_function_from_ptrfunc (&object_addr, fn);
4164
      VEC_safe_insert (tree, gc, *args, 0, object_addr);
4165
    }
4166
 
4167
  if (CLASS_TYPE_P (TREE_TYPE (fn)))
4168
    expr = build_op_call (fn, args, tf_warning_or_error);
4169
  else
4170
    expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
4171
  if (processing_template_decl && expr != error_mark_node)
4172
    expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
4173
 
4174
  if (orig_args != NULL)
4175
    release_tree_vector (orig_args);
4176
 
4177
  return expr;
4178
}
4179
 
4180
 
4181
void
4182
check_default_args (tree x)
4183
{
4184
  tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
4185
  bool saw_def = false;
4186
  int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
4187
  for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
4188
    {
4189
      if (TREE_PURPOSE (arg))
4190
        saw_def = true;
4191
      else if (saw_def)
4192
        {
4193
          error ("default argument missing for parameter %P of %q+#D", i, x);
4194
          TREE_PURPOSE (arg) = error_mark_node;
4195
        }
4196
    }
4197
}
4198
 
4199
/* Return true if function DECL can be inlined.  This is used to force
4200
   instantiation of methods that might be interesting for inlining.  */
4201
bool
4202
possibly_inlined_p (tree decl)
4203
{
4204
  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
4205
  if (DECL_UNINLINABLE (decl))
4206
    return false;
4207
  if (!optimize || pragma_java_exceptions)
4208
    return DECL_DECLARED_INLINE_P (decl);
4209
  /* When optimizing, we might inline everything when flatten
4210
     attribute or heuristics inlining for size or autoinlining
4211
     is used.  */
4212
  return true;
4213
}
4214
 
4215
/* Mark DECL (either a _DECL or a BASELINK) as "used" in the program.
4216
   If DECL is a specialization or implicitly declared class member,
4217
   generate the actual definition.  Return false if something goes
4218
   wrong, true otherwise.  */
4219
 
4220
bool
4221
mark_used (tree decl)
4222
{
4223
  /* If DECL is a BASELINK for a single function, then treat it just
4224
     like the DECL for the function.  Otherwise, if the BASELINK is
4225
     for an overloaded function, we don't know which function was
4226
     actually used until after overload resolution.  */
4227
  if (BASELINK_P (decl))
4228
    {
4229
      decl = BASELINK_FUNCTIONS (decl);
4230
      if (really_overloaded_fn (decl))
4231
        return true;
4232
      decl = OVL_CURRENT (decl);
4233
    }
4234
 
4235
  /* Set TREE_USED for the benefit of -Wunused.  */
4236
  TREE_USED (decl) = 1;
4237
  if (DECL_CLONED_FUNCTION_P (decl))
4238
    TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4239
 
4240
  if (TREE_CODE (decl) == FUNCTION_DECL
4241
      && DECL_DELETED_FN (decl))
4242
    {
4243
      if (DECL_ARTIFICIAL (decl))
4244
        {
4245
          if (DECL_OVERLOADED_OPERATOR_P (decl) == TYPE_EXPR
4246
              && LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
4247
            {
4248
              /* We mark a lambda conversion op as deleted if we can't
4249
                 generate it properly; see maybe_add_lambda_conv_op.  */
4250
              sorry ("converting lambda which uses %<...%> to "
4251
                     "function pointer");
4252
              return false;
4253
            }
4254
        }
4255
      error ("use of deleted function %qD", decl);
4256
      if (!maybe_explain_implicit_delete (decl))
4257
        error_at (DECL_SOURCE_LOCATION (decl), "declared here");
4258
      return false;
4259
    }
4260
 
4261
  /* We can only check DECL_ODR_USED on variables or functions with
4262
     DECL_LANG_SPECIFIC set, and these are also the only decls that we
4263
     might need special handling for.  */
4264
  if ((TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
4265
      || DECL_LANG_SPECIFIC (decl) == NULL
4266
      || DECL_THUNK_P (decl))
4267
    return true;
4268
 
4269
  /* We only want to do this processing once.  We don't need to keep trying
4270
     to instantiate inline templates, because unit-at-a-time will make sure
4271
     we get them compiled before functions that want to inline them.  */
4272
  if (DECL_ODR_USED (decl))
4273
    return true;
4274
 
4275
  /* If within finish_function, defer the rest until that function
4276
     finishes, otherwise it might recurse.  */
4277
  if (defer_mark_used_calls)
4278
    {
4279
      VEC_safe_push (tree, gc, deferred_mark_used_calls, decl);
4280
      return true;
4281
    }
4282
 
4283
  if (TREE_CODE (decl) == FUNCTION_DECL)
4284
    maybe_instantiate_noexcept (decl);
4285
 
4286
  /* Normally, we can wait until instantiation-time to synthesize DECL.
4287
     However, if DECL is a static data member initialized with a constant
4288
     or a constexpr function, we need it right now because a reference to
4289
     such a data member or a call to such function is not value-dependent.  */
4290
  if ((decl_maybe_constant_var_p (decl)
4291
       || (TREE_CODE (decl) == FUNCTION_DECL
4292
           && DECL_DECLARED_CONSTEXPR_P (decl)))
4293
      && DECL_LANG_SPECIFIC (decl)
4294
      && DECL_TEMPLATE_INFO (decl)
4295
      && !uses_template_parms (DECL_TI_ARGS (decl)))
4296
    {
4297
      /* Instantiating a function will result in garbage collection.  We
4298
         must treat this situation as if we were within the body of a
4299
         function so as to avoid collecting live data only referenced from
4300
         the stack (such as overload resolution candidates).  */
4301
      ++function_depth;
4302
      instantiate_decl (decl, /*defer_ok=*/false,
4303
                        /*expl_inst_class_mem_p=*/false);
4304
      --function_depth;
4305
    }
4306
 
4307
  /* If we don't need a value, then we don't need to synthesize DECL.  */
4308
  if (cp_unevaluated_operand != 0)
4309
    return true;
4310
 
4311
  if (processing_template_decl)
4312
    return true;
4313
 
4314
  /* Check this too in case we're within fold_non_dependent_expr.  */
4315
  if (DECL_TEMPLATE_INFO (decl)
4316
      && uses_template_parms (DECL_TI_ARGS (decl)))
4317
    return true;
4318
 
4319
  DECL_ODR_USED (decl) = 1;
4320
  if (DECL_CLONED_FUNCTION_P (decl))
4321
    DECL_ODR_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4322
 
4323
  /* DR 757: A type without linkage shall not be used as the type of a
4324
     variable or function with linkage, unless
4325
   o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
4326
   o the variable or function is not used (3.2 [basic.def.odr]) or is
4327
   defined in the same translation unit.  */
4328
  if (cxx_dialect > cxx98
4329
      && decl_linkage (decl) != lk_none
4330
      && !DECL_EXTERN_C_P (decl)
4331
      && !DECL_ARTIFICIAL (decl)
4332
      && !decl_defined_p (decl)
4333
      && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
4334
    {
4335
      if (is_local_extern (decl))
4336
        /* There's no way to define a local extern, and adding it to
4337
           the vector interferes with GC, so give an error now.  */
4338
        no_linkage_error (decl);
4339
      else
4340
        VEC_safe_push (tree, gc, no_linkage_decls, decl);
4341
    }
4342
 
4343
  if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
4344
      && !DECL_INITIAL (decl) && !DECL_ARTIFICIAL (decl))
4345
    /* Remember it, so we can check it was defined.  */
4346
    note_vague_linkage_fn (decl);
4347
 
4348
  /* Is it a synthesized method that needs to be synthesized?  */
4349
  if (TREE_CODE (decl) == FUNCTION_DECL
4350
      && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
4351
      && DECL_DEFAULTED_FN (decl)
4352
      /* A function defaulted outside the class is synthesized either by
4353
         cp_finish_decl or instantiate_decl.  */
4354
      && !DECL_DEFAULTED_OUTSIDE_CLASS_P (decl)
4355
      && ! DECL_INITIAL (decl))
4356
    {
4357
      /* Defer virtual destructors so that thunks get the right
4358
         linkage.  */
4359
      if (DECL_VIRTUAL_P (decl) && !at_eof)
4360
        {
4361
          note_vague_linkage_fn (decl);
4362
          return true;
4363
        }
4364
 
4365
      /* Remember the current location for a function we will end up
4366
         synthesizing.  Then we can inform the user where it was
4367
         required in the case of error.  */
4368
      DECL_SOURCE_LOCATION (decl) = input_location;
4369
 
4370
      /* Synthesizing an implicitly defined member function will result in
4371
         garbage collection.  We must treat this situation as if we were
4372
         within the body of a function so as to avoid collecting live data
4373
         on the stack (such as overload resolution candidates).
4374
 
4375
         We could just let cp_write_global_declarations handle synthesizing
4376
         this function by adding it to deferred_fns, but doing
4377
         it at the use site produces better error messages.  */
4378
      ++function_depth;
4379
      synthesize_method (decl);
4380
      --function_depth;
4381
      /* If this is a synthesized method we don't need to
4382
         do the instantiation test below.  */
4383
    }
4384
  else if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4385
           && DECL_TEMPLATE_INFO (decl)
4386
           && (!DECL_EXPLICIT_INSTANTIATION (decl)
4387
               || always_instantiate_p (decl)))
4388
    /* If this is a function or variable that is an instance of some
4389
       template, we now know that we will need to actually do the
4390
       instantiation. We check that DECL is not an explicit
4391
       instantiation because that is not checked in instantiate_decl.
4392
 
4393
       We put off instantiating functions in order to improve compile
4394
       times.  Maintaining a stack of active functions is expensive,
4395
       and the inliner knows to instantiate any functions it might
4396
       need.  Therefore, we always try to defer instantiation.  */
4397
    {
4398
      ++function_depth;
4399
      instantiate_decl (decl, /*defer_ok=*/true,
4400
                        /*expl_inst_class_mem_p=*/false);
4401
      --function_depth;
4402
    }
4403
 
4404
  return true;
4405
}
4406
 
4407
#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.